1. 程式人生 > 其它 >OS:面試常問點

OS:面試常問點

面試中遇到的 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、主存)
  • 不可搶佔資源:被程序獲取後,只能等程序本身釋放資源(如印表機)

原因

  • 競爭不可搶佔資源(互斥)
    1. OS 中僅有一臺印表機和輸入裝置,某一時刻程序 P1 使用印表機,P2 使用輸入裝置。
    2. 此時 P1 請求使用輸入裝置、P2 請求使用印表機,雙方等待彼此的資源。
  • 競爭可消耗資源(迴圈等待)
    • 三個程序互相傳送訊息(可消耗資源)
    • 程序 P1 接收 P3 的訊息 m3,傳送 m1 給 P2;P2 接收 P1 的m1,傳送 m2 給 m3;P3 接收 P2 的 m2,傳送 m3 給 m1。
    • 若程序先發送再接收,OK。
    • 若程序先接收再發送,死鎖。
  • 程序執行順序:系統進入不安全狀態。

4 個特徵(必要條件)

只要發生死鎖,以下 4 個條件同時成立。

  1. 互斥:至少有一個資源非共享,同一時刻只有一個執行緒能使用。
  2. 不可剝奪:即不可搶佔資源,資源只能在程序完成任務後主動釋放
  3. 請求與保持:程序佔用至少一個資源,並等待另一個被其它程序佔用的資源。
  4. 迴圈等待:存在程序資源的迴圈等待鏈(如程序 P1 等待 P2,P2 等待 P1)

處理

  • 預防
  • 避免
  • 檢測
  • 接觸

預防死鎖

設定限制條件,破壞產生死鎖的 4 個必要條件。

  • 互斥:無法破壞
  • 不可剝奪:請求被另一個程序佔有的資源被拒絕時,釋放當前程序的資源、或搶佔資源。
  • 迴圈等待:有序資源分配法

避免死鎖

在資源的動態分配過程中,用某種方法防止系統進入不安全狀態。

  1. 有序資源分配法:將資源統一編號,程序必須按編號順序申請資源。
    • 示例:作業系統中有一個 R1、R2 資源,分別編號為 1、2
    • 程序必須按編號升序申請,即 R1 → R2,不能是 R2→ R1。
    • 破壞迴圈等待的條件
  2. 銀行家演算法:允許程序動態申請資源,在資源分配前檢查安全性。
    • 擬分配資源給當前程序,計算剩餘資源數量是否能滿足下一程序的需求。

常用技術

  • 加鎖順序:執行緒按一定的順序加鎖。
  • 加鎖時限:執行緒嘗試獲取鎖時加上一定的時限,超過時限則放棄對該鎖的請求,並釋放自己佔有的鎖。
  • 死鎖檢測

檢測死鎖

設定檢測機構,及時檢測死鎖的發生。

解除死鎖

檢測出死鎖後,採取適當措施將程序從死鎖狀態中解脫出來。

  • 資源剝奪:掛起某些死鎖程序並剝奪資源,分配給其它死鎖程序。
  • 撤銷程序:強制撤銷部分或全部死鎖程序並剝奪資源。
  • 程序回退:設定還原點,讓死鎖程序回退到足以迴避死鎖,程序回退時自願釋放資源而不是被剝奪。