【重學計算機】操做系統D6章:併發程序設計
1. 併發程序的基本概念html
- 程序順序性
- 內部順序性:CPU嚴格按照順序執行指令
- 外部順序性:程序員設計程序時每每用順序設計的思想
- 順序程序特性
- 程序執行的順序性
- 計算環境的封閉性: 程序執行時猶如獨佔資源
- 計算結果的肯定性
- 計算過程的可再現性
- 併發進程
- 無關的併發進程:一組併發進程,在不一樣變量集上運行
- 交往的併發進程:一組併發進程,共享某些變量,相互影響
- 併發進程制約關係
- 進程互斥:爭奪某一個資源
- 進程同步:共同完成某一個任務,協調前後順序
- 發生問題:
- 臨界區:
- 臨界資源:一次只能被一個進程使用的資源(互斥共享變量)
- 臨界區:是個程序段,是併發進程中與互斥共享變量相關的程序段
- 相關的臨界區:兩個進程的臨界區有相同的臨界資源(必須互斥進入)
- 問題:
- 多個併發進程訪問臨界資源存在制約關係
- 若是兩個進程同時處在相關的臨界區,會發生與時間有關的錯誤
- 臨界區管理的要求:
- 一次至多容許一個進程停留在相關臨界區
- 一個進程不能無限制停留在臨界區內
- 一個進程不能無限制等待進入臨界區內
- 臨界區嵌套使用
-
2. 併發程序控制和問題程序員
- 臨界區管理實現:
- 思路:判斷鎖和獲取鎖要做爲原子操做,否則會死鎖或時間錯誤
- 實現:
- 原子指令:測試並創建鎖指令、對換指令(忙式等待,效率不高)
- 中斷控制:進出臨界區時開關中斷,這樣臨界區執行時就不會被中斷,天然實現了原子性
- 這個時操做系統的原語,是操做系統解決這個問題的辦法
- 不建議用戶程序使用,由於沒法保證程序員設計出短小精悍的原語
- PV操做:用信號量,「申請-等待隊列-中斷恢復」
- 生產者消費者問題:
- 進程間通訊
- 信號量:低級通訊方式
- 信件:進程通訊機制(直接通訊、間接通訊)
- 基於流:多個進程共同使用一個緩衝區
- RPC:遠程過程調用
- 死鎖
- 概念:兩個進程分別等待對方佔有的資源
- 死鎖的產生
- 互斥:進程互斥地使用資源
- 佔有和等待:一個進程得不到資源,就等待且不釋放已有資源
- 不剝奪:進程不能從另外一個進程搶走資源
- 循環等待:每一個進程都等待它前一個進程所持有的資源
- 死鎖的防止
- 破壞上述四個條件之一便可
- eg. 層次分配:資源分紅多個層次,一個進程得到某個資源後只能得到比他層次更高的資源
- 死鎖的避免:銀行家算法
- 死鎖的檢測:
-
算法:warshall閉包算法
歡迎關注本站公眾號,獲取更多信息