OS:面試常問點
阿新 • • 發佈:2022-04-13
面試中遇到的 OS 相關知識點。
數值表示
計算機中用 8 位二進位制數編碼表示數值資訊。
-
符號位:最高位,0 表示正數,1 表示負數。
-
形式:原碼、反碼和補碼。
- 原碼是數值在計算機中最真實的表示。
- 正數:三碼相同。
-
負數
- 反碼:除符號位,其餘位取反(方便加法)
- 補碼:反碼 + 1(方便減法)
-
表示範圍:
-
原碼、反碼:-127 ~ 127
-
補碼:-128 ~ 127
-127 -0 +0 127 原碼 1111 1111 1000 0000 0000 0000 0111 1111 反碼 1000 0000 1111 1111 0111 1111 0000 0000 補碼 1000 0001 (負)1000 0000 1000 0000 0000 0001
-
-
整數用定點數來表示,實數用浮點數來表示。
程序 & 執行緒
程序 vs 執行緒
https://blog.csdn.net/ThinkWon/article/details/102021274
程序 | 執行緒 | |
---|---|---|
含義 | 一個在記憶體中執行的應用程式 | 程序的一個執行任務 |
包含關係 | 一個程序有若干個執行緒,至少包含一個執行緒 | 程序的一部分,相當於只有一個任務的程序(也稱輕權程序、輕量級程序) |
根本區別 | 作業系統資源分配的基本單位 | 處理器任務排程和執行的基本單位 |
資源開銷 | 每個程序都有獨立的程式碼和資料空間(程式上下文),上下文切換的開銷大 | 同一類執行緒共享程式碼和資料空間,每個執行緒有獨立的棧區和程式計數器 |
記憶體分配 | 不同程序間的地址空間和資源相互獨立 | 同一程序的執行緒共享本程序的地址空間和資源 |
影響關係 | 程序崩潰後,在保護模式下不影響其它程序 | 執行緒“崩潰”,可能導致整個程序崩潰。 (多程序比多執行緒健壯) |
執行過程 | 可獨立執行,有程式執行的入口、順序執行序列和程式出口 | 執行緒不能獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制 |
執行緒“崩潰”時觸發 segment fault 訊號,系統的預設處理方式是終結該執行緒所在的程序,也可遮蔽訊號。
- 不遮蔽訊號:作業系統終止該執行緒所在的程序。
- 遮蔽訊號:由執行緒的崩潰位置決定
- 執行緒獨佔區
:不影響其它執行緒。- 執行緒共享區:會的
Java 執行緒崩潰,JVM 自動釋放相關的資源,不會導致程序崩潰。
執行緒狀態
-
OS 層面:初始、可執行、執行、阻塞、終止。
-
Java Thread API:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED
死鎖
死鎖 & 飢餓
- 死鎖:多個程序在競爭資源或彼此通訊而造成的阻塞。
- 飢餓:某個程序一直得不到資源。
死鎖示例
- 兩個執行緒各佔用資源,且等待對方釋放鎖。
資源型別
重用性
-
可重用資源(永久)
- 可被多個程序多次使用,如硬體。
- 一次只能分配給一個程序使用,其它執行緒必須等待資源釋放。
- 數目:固定,程序無法建立或刪除。
- 使用順序:請求資源、使用資源、釋放資源。
-
消耗性資源(臨時):
- 程序在執行期間動態的建立和消耗。
- 數目:程序執行期間是可以不斷變化(0 或多個)。
- 建立:通常由生產者程序建立,放入該資源類的緩衝區。
- 消耗:通常由消費者程序消耗,程序可請求若干個資源並消耗,不再放回緩衝區。
- 典例:程序間通訊的訊息。
搶佔性
- 可搶佔資源:被程序獲取後,可被其他程序或系統搶佔,不會引起死鎖(如 CPU、主存)
- 不可搶佔資源:被程序獲取後,只能等程序本身釋放資源(如印表機)
原因
-
競爭不可搶佔資源(互斥)
- OS 中僅有一臺印表機和輸入裝置,某一時刻程序 P1 使用印表機,P2 使用輸入裝置。
- 此時 P1 請求使用輸入裝置、P2 請求使用印表機,雙方等待彼此的資源。
-
競爭可消耗資源(迴圈等待)
- 三個程序互相傳送訊息(可消耗資源)
- 程序 P1 接收 P3 的訊息 m3,傳送 m1 給 P2;P2 接收 P1 的m1,傳送 m2 給 m3;P3 接收 P2 的 m2,傳送 m3 給 m1。
- 若程序先發送再接收,OK。
- 若程序先接收再發送,死鎖。
- 程序執行順序:系統進入不安全狀態。
4 個特徵(必要條件)
只要發生死鎖,以下 4 個條件同時成立。
- 互斥:至少有一個資源非共享,同一時刻只有一個執行緒能使用。
- 不可剝奪:即不可搶佔資源,資源只能在程序完成任務後主動釋放。
- 請求與保持:程序佔用至少一個資源,並等待另一個被其它程序佔用的資源。
- 迴圈等待:存在程序資源的迴圈等待鏈(如程序 P1 等待 P2,P2 等待 P1)
處理
- 預防
- 避免
- 檢測
- 接觸
預防死鎖
設定限制條件,破壞產生死鎖的 4 個必要條件。
- 互斥:無法破壞
- 不可剝奪:請求被另一個程序佔有的資源被拒絕時,釋放當前程序的資源、或搶佔資源。
- 迴圈等待:有序資源分配法
避免死鎖
在資源的動態分配過程中,用某種方法防止系統進入不安全狀態。
-
有序資源分配法:將資源統一編號,程序必須按編號順序申請資源。
- 示例:作業系統中有一個 R1、R2 資源,分別編號為 1、2
- 程序必須按編號升序申請,即 R1 → R2,不能是 R2→ R1。
- 破壞迴圈等待的條件
-
銀行家演算法:允許程序動態申請資源,在資源分配前檢查安全性。
- 擬分配資源給當前程序,計算剩餘資源數量是否能滿足下一程序的需求。
常用技術
- 加鎖順序:執行緒按一定的順序加鎖。
- 加鎖時限:執行緒嘗試獲取鎖時加上一定的時限,超過時限則放棄對該鎖的請求,並釋放自己佔有的鎖。
- 死鎖檢測
檢測死鎖
設定檢測機構,及時檢測死鎖的發生。
解除死鎖
檢測出死鎖後,採取適當措施將程序從死鎖狀態中解脫出來。
- 資源剝奪:掛起某些死鎖程序並剝奪資源,分配給其它死鎖程序。
- 撤銷程序:強制撤銷部分或全部死鎖程序並剝奪資源。
- 程序回退:設定還原點,讓死鎖程序回退到足以迴避死鎖,程序回退時自願釋放資源而不是被剝奪。