【重學計算機】操做系統D6章:併發程序設計

1. 併發程序的基本概念html

  • 程序順序性
    • 內部順序性:CPU嚴格按照順序執行指令
    • 外部順序性:程序員設計程序時每每用順序設計的思想
  • 順序程序特性
    • 程序執行的順序性
    • 計算環境的封閉性: 程序執行時猶如獨佔資源
    • 計算結果的肯定性
    • 計算過程的可再現性
  • 併發進程
    • 無關的併發進程:一組併發進程,在不一樣變量集上運行
    • 交往的併發進程:一組併發進程,共享某些變量,相互影響
  • 併發進程制約關係
    • 進程互斥:爭奪某一個資源
    • 進程同步:共同完成某一個任務,協調前後順序
    • 發生問題:
      • 與時間有關的錯誤:結果錯誤、永遠等待
  • 臨界區:
    • 臨界資源:一次只能被一個進程使用的資源(互斥共享變量)
    • 臨界區:是個程序段,是併發進程中與互斥共享變量相關的程序段
    • 相關的臨界區:兩個進程的臨界區有相同的臨界資源(必須互斥進入)
    • 問題
      • 多個併發進程訪問臨界資源存在制約關係
      • 若是兩個進程同時處在相關的臨界區,會發生與時間有關的錯誤
    • 臨界區管理的要求
      • 一次至多容許一個進程停留在相關臨界區
      • 一個進程不能無限制停留在臨界區內
      • 一個進程不能無限制等待進入臨界區內
    • 臨界區嵌套使用
    •  

2. 併發程序控制和問題程序員

  • 臨界區管理實現:
    • 思路判斷鎖獲取鎖要做爲原子操做,否則會死鎖或時間錯誤
    • 實現
      • 原子指令:測試並創建鎖指令、對換指令(忙式等待,效率不高)
      • 中斷控制:進出臨界區時開關中斷,這樣臨界區執行時就不會被中斷,天然實現了原子性
        • 這個時操做系統的原語,是操做系統解決這個問題的辦法
        • 不建議用戶程序使用,由於沒法保證程序員設計出短小精悍的原語
      • PV操做:用信號量,「申請-等待隊列-中斷恢復」
    • 生產者消費者問題
  • 進程間通訊
    • 信號量:低級通訊方式
    • 信件:進程通訊機制(直接通訊、間接通訊)
    • 基於流:多個進程共同使用一個緩衝區
    • RPC:遠程過程調用
  • 死鎖
    • 概念:兩個進程分別等待對方佔有的資源
    • 死鎖的產生
      • 互斥:進程互斥地使用資源
      • 佔有和等待:一個進程得不到資源,就等待且不釋放已有資源
      • 不剝奪:進程不能從另外一個進程搶走資源
      • 循環等待:每一個進程都等待它前一個進程所持有的資源
    • 死鎖的防止
      • 破壞上述四個條件之一便可
      • eg. 層次分配:資源分紅多個層次,一個進程得到某個資源後只能得到比他層次更高的資源  
    • 死鎖的避免:銀行家算法
    • 死鎖的檢測
      • 算法:warshall閉包算法

相關文章
相關標籤/搜索