處理器管理
-
程序:爲完成特定任務的指令序列
-
順序執行:多個任務按順序執行,多個任務多次執行結果一致
-
併發執行:一個程序尚未結束,另一個程序已經開始執行,多個任務多次執行結果不一致
進程
概念:程序的一次執行
系統資源分配的基本單位
進程的三個基本狀態
- 運行狀態:獲得CPU資源執行
- 等待狀態:等待資源
- 就緒狀態:獲得除CPU外的必須資源
進程狀態的變化圖
進程控制塊(PCB):保存與其他進程、系統資源以及進程所處狀態的數據結構
進程隊列:PCB與PCB之間通過隊列的形式進行存儲
處理器執行狀態
核心態:操作系統管理代碼執行時機器的狀態
用戶態:用戶進程執行時機器的狀態
原語:執行時具有原子性的一系列指令
進程調度的算法
批處理系統
- 先來先服務:誰先來誰先執行
- 短作業優先調度算法:優先調度執行時間短的作業,會出現長作業餓死的情況
- 最短剩餘時間調度算法:新增加的作業比當前執行的作業所需時間短,則讓出CPU給新增加的作業
交互式系統
- 優先數調度:爲每個進程分配一個優先數,按優先數調度進程
- 時間片輪轉調度:每個進程執行固定的時間後掛起
- 多級反饋隊列:分爲多個隊列,第一隊列優先級最高,時間片最少,第二隊列優先級次高,時間片次低,以此類推,進程首先進入第一隊列,時間片用完後,沒執行完,進入第二隊列
線程
概念:進程中的一個實體,可以併發執行,具有相同的地址空間,是獨立參與調度的基本單位
線程控制塊(TCB):記錄了線程的標識符、線程執行時的狀態信息
分類:
內核級線程:內核在其空間內執行線程的創建、調度和管理
用戶級線程:內核並不知道線程的存在,線程的創建、終止、同步和調度等在用戶級完成
混合級線程:同時支持內核級與用戶級線程
進程同步與互斥
-
臨界區:對共享資源進行訪問的程序段
-
臨界資源:共享的資源
-
信號量:表示可使用的某一資源的個數,使用PV原語操作對其進行增減操作,P爲減少信號量的值,V爲增加信號量的值,信號量可爲負,此時絕對值表明等待該資源的進程個數
-
進程互斥
-
概念:由於競爭共享資源導致進程執行具有先後順序
-
實現機制:
- 互斥量:信號量取值只有0與1時,此時信號量爲互斥量
-
-
進程同步
-
概念:由於進程之間的相互合作導致進程執行具有先後順序,一個進程的執行依賴於另外一個進程的結果
-
實現機制:
-
信號量:一個信號量與一個進程運行的結果關聯
-
管程
-
概念:任一時刻只有一個進程可以執行管程中的代碼
-
等待機制
-
目的:由於缺乏資源而導致進程掛起,若沒有等待機制,則沒有任何進程可以執行管程中的代碼
-
wait()操作:將進程阻塞在等待隊列中,釋放管程
-
signal()操作:將等待隊列中的一個進程喚醒
-
問題:管程中執行的進程可以執行signal()操作,此時會有兩個進程在管程中,解決方案:
- 執行signal的進程等待,直到被釋放進程退出管程或進入等待隊列
- 被釋放進程等待,直到執行signal的進程退出管程或進入等待隊列
-
-
-
-
經典同步問題:
-
哲學家就餐問題
-
讀者寫者問題
-
生產者消費者問題
經典同步問題的求解需要較多篇幅,此處不總結
-
-
進程通信
-
概念:進程之間的相互作用
-
分類
- 低級通信:進程同步與互斥
- 高級通信:用於傳輸大量信息
-
高級通信
-
分類
-
共享存儲器:進程通過某些數據結構或共享存儲區進行通信
-
管道通信
-
概念:用於連接一個讀進程與一個寫進程,以實現它們之間通信的共享文件
-
特點:
- 互斥:不能同時讀寫
- 同步:滿寫和空讀的等待
- 判斷對方是否存在,雙方存在纔可以通信
-
分類
-
直接通信
概念:每個進程都有一個名字,需指定信息接收進程的名字
特點:自動建立鏈路,對應一對通信進程,鏈路可以是單向,也可以是雙向
-
間接通信:進程間發送或接收消息通過一個信道來進行,每個信箱有一個唯一的標識符,多個進程可共享一個信箱
-
-
-
-
死鎖
-
概念:每一個進程佔用了某個資源而又等待另一進程所佔用的資源,導致沒有進程可以運行的情況
-
原因
1、資源競爭
2、進程推進順序不當
兩者共同作用造成了死鎖
-
產生死鎖的必要條件
必須同時滿足下列四個必要條件
- 互斥條件:任一時刻一個資源僅爲一個進程佔有
- 佔有且等待條件:一個進程無法運行時,不釋放佔有的資源
- 不剝奪條件:資源不可搶佔
- 循環等待條件:存在一個進程資源循環等待鏈
-
解決死鎖的方法
-
預防:限制併發進程對資源的請求
-
破壞互斥條件:是資源可同時訪問而不是互斥使用
-
破壞佔有和等待條件
靜態分配策略:一個進程必須在執行前就申請它所需要的全部資源
-
破壞不剝奪條件:允許進程搶佔資源
-
破壞循環等待條件
-
層次分配策略
- 資源分層
- 進程得到較低層的資源後,纔可以申請高一層的資源
- 進程釋放完高層的資源後,才能釋放底層的資源
- 進程只能佔有一層中的一個資源
-
按序分配策略
- 給系統的所有資源劃分優先級
- 進程只有佔據低優先級的資源後,纔可佔用高優先級的資源
-
-
-
避免:系統在分配資源時,根據資源使用情況進行預測,避免死鎖的發生
-
檢測:通過一個機構檢測死鎖是否發生
-
解除:與檢測配套的措施,用於解除死鎖狀態
- 結束所有進程,重啓操作系統
- 撤銷涉及死鎖的所有進程,解除死鎖後繼續運行
- 逐個撤銷涉及死鎖的進程,看剩餘進程是否可以執行
- 從涉及死鎖的某個進程中搶佔資源,將其分配給其他進程,知道死鎖解除
-