面試操作系統八股文五問五答第二期

面試操作系統八股文五問五答第二期

作者:程序員小白條,個人博客

相信看了本文后,對你的面試是有一定幫助的!

?點贊?收藏?不迷路!?

1.怎么解決死鎖?

1、預防死鎖:通過設置一些限制條件,去破壞產生死鎖的必要條件(四個條件)

2、避免死鎖:在資源分配過程中,使用某種方法避免系統進入不安全的狀態,從而避免發生死鎖(銀行家算法)

3、檢測死鎖:允許死鎖的發生,但是通過系統的檢測之后,采取一些措施,將死鎖清除掉

4、解除死鎖:該方法與檢測死鎖配合使用

2.JMM內存模型?

Java 內存模型(JMM) 抽象了線程和主內存之間的關系,就比如說線程之間的共享變量必須存儲在主內存中。

在 JDK1.2 之前,Java 的內存模型實現總是從 主存 (即共享內存)讀取變量,是不需要進行特別的注意的。而在當前的 Java 內存模型下,線程可以把變量保存 本地內存 (比如機器的寄存器)中,而不是直接在主存中進行讀寫。這就可能造成一個線程在主存中修改了一個變量的值,而另外一個線程還繼續使用它在寄存器中的變量值的拷貝,造成數據的不一致。

什么是主內存?什么是本地內存?

●主內存:所有線程創建的實例對象都存放在主內存中,不管該實例對象是成員變量,還是局部變量,類信息、常量、靜態變量都是放在主內存中。為了獲取更好的運行速度,虛擬機及硬件系統可能會讓工作內存優先存儲于寄存器和高速緩存中。

●本地內存:每個線程都有一個私有的本地內存,本地內存存儲了該線程以讀 / 寫共享變量的副本。每個線程只能操作自己本地內存中的變量,無法直接訪問其他線程的本地內存。如果線程間需要通信,必須通過主內存來進行。本地內存是 JMM 抽象出來的一個概念,并不真實存在,它涵蓋了緩存、寫緩沖區、寄存器以及其他的硬件和編譯器優化。

3.CPU和內存之間的三級緩存有了解嗎

為什么要弄一個 CPU 高速緩存呢? 類比我們開發網站后臺系統使用的緩存(比如 Redis)是為了解決程序處理速度和訪問常規關系型數據庫速度不對等的問題。 CPU 緩存則是為了解決 CPU 處理速度和內存處理速度不對等的問題。

我們甚至可以把 內存看作外存的高速緩存,程序運行的時候我們把外存的數據復制到內存,由于內存的處理速度遠遠高于外存,這樣提高了處理速度。

總結:CPU Cache 緩存的是內存數據用于解決 CPU 處理速度和內存不匹配的問題,內存緩存的是硬盤數據用于解決硬盤訪問速度過慢的問題。

現代的 CPU Cache 通常分為三層,分別叫 L1,L2,L3 Cache。有些 CPU 可能還有 L4 Cache,這里不做討論,并不常見

CPU Cache 的工作方式: 先復制一份數據到 CPU Cache 中,當 CPU 需要用到的時候就可以直接從 CPU Cache 中讀取數據,當運算完成后,再將運算得到的數據寫回 Main Memory 中。但是,這樣存在 內存緩存不一致性的問題 !比如我執行一個 i++ 操作的話,如果兩個線程同時執行的話,假設兩個線程從 CPU Cache 中讀取的 i=1,兩個線程做了 i++ 運算完之后再寫回 Main Memory 之后 i=2,而正確結果應該是 i=3。

CPU 為了解決內存緩存不一致性問題可以通過制定緩存一致協議(比如 MESI 協議open in new window)或者其他手段來解決。 這個緩存一致性協議指的是在 CPU 高速緩存與主內存交互的時候需要遵守的原則和規范。不同的 CPU 中,使用的緩存一致性協議通常也會有所不同。

我們的程序運行在操作系統之上,操作系統屏蔽了底層硬件的操作細節,將各種硬件資源虛擬化。于是,操作系統也就同樣需要解決內存緩存不一致性問題。

操作系統通過 內存模型(Memory Model) 定義一系列規范來解決這個問題。無論是 Windows 系統,還是 Linux 系統,它們都有特定的內存模型。

4.多核CPU下,三級緩存對于每個內核來說是共享的嗎?那你知道它的數據存儲以及指令存儲的方式有了解過嗎

1.L1緩存:

L1緩存是每個核心(內核)私有的,不與其他核心共享。

通常包括L1數據緩存和L1指令緩存,分別用于數據和指令的快速存取。

2.L2緩存:

L2緩存有時也是每個核心私有的,特別是在一些多核架構中。

在一些多核架構中,L2緩存可能部分共享,這意味著一組核心(例如,兩個核心共享一個L2緩存)。

L2緩存通常包括數據和指令緩存。

3.L3緩存:

L3緩存通常是在多核CPU上的共享緩存層,用于在所有核心之間共享數據。

這意味著多個核心可以訪問同一個L3緩存,以提供更大的緩存容量和更好的數據共享。

L3緩存通常更大,但速度相對較慢,用于存儲和共享較大量的數據。

●數據存儲和指令存儲的方式通常是硬件設計的一部分,不同的CPU架構可能有不同的實現方式。然而,一般來說,這些緩存存儲數據和指令的方式與它們的緩存行(cache lines)相關,緩存行是緩存中的最小數據單元。緩存行通常以塊的方式加載到緩存中,這有助于提高數據局部性(data locality),從而加速數據訪問。

5.CPU指令重排序的好處?

●提高并行性:現代處理器通常具有多個功能單元,可以執行多個指令,指令重排序可以使處理器更好地利用這些功能單元,從而提高并行性和整體性能。

●減少空閑周期:指令重排序可以減少處理器在等待某些操作完成時的空閑周期。例如,如果某個指令需要等待內存數據加載,處理器可以在等待時執行其他無依賴的指令,從而減少了空閑時間。

●提高分支預測準確性:指令重排序可以改善分支預測的準確性。處理器可以在分支預測錯誤時丟棄已經被重排序的指令,從而減少性能下降。

●提高內存層次的利用:指令重排序可以更好地利用處理器的高速緩存。通過重新排列指令以最大限度地減少緩存未命中,可以提高內存層次結構的效率。

●降低數據冒險的影響:數據冒險是一種因為數據相關性而導致指令無法立即執行的情況。指令重排序可以通過提前執行無數據相關性的指令來減輕數據冒險的影響。

●提高指令級并行性:指令重排序有助于充分利用指令級并行性,即處理器可以同時執行多條指令,而不必等待前一條指令的完成。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213562.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213562.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213562.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JAVA面試題8

1.Java中的線程是什么? 它有什么作用? 答案:線程是程序執行流的最小單位,用于實現多任務并發執行。Java中的線程可以實現并發編程,提高程序的性能和響應性。 2.什么是Java中的同步(Synchronization&#x…

超靜音的兩相步進電機驅動芯片GC6609,GC6610的性能分析

兩相步進電機驅動芯片GC6609,GC6610它們是一款超靜音的兩相步進電機驅動芯片,內置最大 256 細分的步進驅動模式, 超靜音,低振動。芯片可以工作在 4~36V 的寬工作電壓范圍內,平均工作電流可以達到 2A和2.5A &#xff0c…

大數據機器學習算法項目——基于Django/協同過濾算法的房源可視化分析推薦系統的設計與實現

大數據機器學習算法項目——基于Django/協同過濾算法的房源可視化分析推薦系統的設計與實現 技術棧:大數據爬蟲/機器學習學習算法/數據分析與挖掘/大數據可視化/Django框架/Mysql數據庫 本項目基于 Django框架開發的房屋可視化分析推薦系統。這個系統結合了大數據…

STM32-01-認識單片機

文章目錄 一、單片機簡介二、Cortex-M系列介紹三、初識STM32四、STM32原理圖設計五、搭建開發環境六、STM32初體驗七、MDK5使用技巧 一、單片機簡介 單片機是什么? 單片機:Single-Chip Microcomputer,單片微型計算機,是一種集成電…

python獲得曲線峰值的個數

import numpy as np from scipy.signal import find_peaks import matplotlib.pyplot as plt# 生成示例數據 x np.linspace(0, 10, 100) y np.sin(x)# 查找峰值 peaks, _ find_peaks(y)# 繪制曲線和峰值點 plt.plot(x, y) plt.plot(x[peaks], y[peaks], ro)# 顯示峰值個數 n…

Golang channle(管道)基本介紹、快速入門

channel(管道)-基本介紹 為什么需要channel?前面使用全局變量加鎖同步來解決goroutine的通訊,但不完美 1)主線程在等待所有goroutine全部完成的時間很難確定,我們這里設置10秒,僅僅是估算。 2)如果主線程休眠時間長了&#xff0c…

【計算機網絡】HTTP響應報文Cookie原理

目錄 HTTP響應報文格式 一. 狀態行 狀態碼與狀態碼描述 二. 響應頭 Cookie原理 一. 前因 二. Cookie的狀態管理 結束語 HTTP響應報文格式 HTTP響應報文分為四部分 狀態行:包含三部分:協議版本,狀態碼,狀態碼描述響應頭&a…

如何選擇LED天幕屏的型號

隨著LED屏幕技術的不斷成熟,其應用范圍也日益擴大,從傳統的墻面固定安裝,到落地式、租賃移動式,再到LED互動地磚屏和安裝在天花板上的LED天幕屏等,安裝方式多種多樣。那么,在面對如此多元化的選擇時&#x…

PHP基礎 - 類型比較

在 PHP 中,作為一種弱類型語言,它提供了松散比較和嚴格比較兩種方式來比較變量的值和類型。 松散比較: 使用兩個等號(==)進行比較,只會比較變量的值,而不會考慮它們的數據類型。例如: $a = 5; // 整數 $b = 5; // 字符串if ($a == $b) {echo "相等"; // 輸…

C/C++ 編程規范總結

目錄 前言 一、編程規范的作用 二、規范的三種形式 三、規范的內容 1. 基本原則 原則1-1 原則1-2 原則1-3 原則1-4 原則1-5 原則1-6 原則1-7 2. 布局 規則2-1-1 規則2-1-2 規則2-1-3 規則2-1-4 規則2-1-5 規則2-1-6 規則2-2-1 規則2-2-2 規則2-2-3 建議2…

簡單聊聊使用lombok 的爭議

大家好,我是G探險者。 項目里,因為我使用了Lombok插件,然后代碼走查的時候被領導點名了。 我心想,這么好用的插件,為啥不推廣呢,整天寫那些煩人的setter,getter方法就不嫌煩么? 領導…

AidLux:手機/平板上的Linux環境與AI開發利器

AidLux是一個基于ARM架構的跨生態(鴻蒙/AndroidLinux)一站式智能物聯網(AIoT)應用開發和部署平臺,正受到越來越多開發者和用戶的青睞。既可以作為手機/平板上的一個Linux環境使用,也可以作為AI開發利器以發…

Python Django Suit:構建現代化的Django后臺管理

概要 Django Suit是一款為Django后臺管理提供現代、優雅界面的第三方應用,它致力于提升Django開發者的管理體驗。本文將深入介紹Django Suit的安裝、配置和高級功能,提供詳實的示例代碼,幫助大家更好地使用和定制Django后臺管理界面。 安裝與…

無法解除Word文檔限制編輯?上干貨

方法一:新建一個文檔-點擊“插入”-點擊“對象”-點擊選擇中的倒三角-然后選擇“文件中的文字”-找到相應文檔即可 具體操作界面如下圖這個方法會導致格式出現稍稍微的變化 方法二:將受編輯的文件另存為 文件類型一定要選擇*.xml 另存好之后是這樣的 打…

智能優化算法應用:基于法醫調查算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用:基于法醫調查算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用:基于法醫調查算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.法醫調查算法4.實驗參數設定5.算法結果6.參考…

力扣labuladong一刷day34天

力扣labuladong一刷day34天 文章目錄 力扣labuladong一刷day34天一、230. 二叉搜索樹中第K小的元素二、538. 把二叉搜索樹轉換為累加樹 一、230. 二叉搜索樹中第K小的元素 題目鏈接:https://leetcode.cn/problems/kth-smallest-element-in-a-bst/?utm_sourceLCUS&…

[C++] STL_priority_queue(優先級隊列) 的使用及底層的模擬實現,容器適配器,deque的原理介紹

文章目錄 1、priority_queue1.1 priority_queue的介紹和使用1.2 priority_queue的使用模擬實現: 2、容器適配器2.1 什么是適配器2.2 STL標準庫中stack和queue的底層結構 3、deque3.1 deque的原理介紹3.2 deque的缺陷 4、為什么選擇deque作為stack和queue的底層默認容…

docker配置連接harbor私有倉庫

一、前言 以下分為兩種情況說明docker對harbor私有倉庫的訪問配置,一種是harbor使用自建證書配置https,一種是使用公有證書配置https 二、docker配置 harbor使用自建證書的情況 使用自建證書對harbor進行https配置,docker會將該倉庫識別成不…

SDXL使用animateDiff和hotshot-xl進行文生視頻

截至2023.12.8號,目前市面上有兩款適用于SDXL的文生視頻開源工具,分別是AnimateDiff和hotshot-xl。 一、工具下載鏈接 (1)AnimateDiff的webui版本的git鏈接: GitHub - continue-revolution/sd-webui-animatediff: A…

pytest測試框架介紹(2)

繼續進步一點點,溫故而知新 一、requests 介紹 1、requests 的官方文檔:https://docs.python-requests.org/en/latest/ 2、安裝requests:pip install requests 二、requests請求 1、請求方法:post,get&#xff0c…