操作系統簡要總結之死鎖


死鎖的概念

  死鎖 (deallocks): 是指兩個或兩個以上的進程(線程)在執行過程中,因爭奪互斥資源而造成的一種互相等待的現象

死鎖產生的原因

  -----競爭資源引起的資源分配不當

  -----進程推進順序不合理

 

產生死鎖的四個必要條件

  -----互斥條件:一個資源每次只能被一個進程(線程)使用。

  -----不可剝奪條件:一個進程(線程)對已獲得的資源在未使用完畢之前,不能被其他進程強行剝奪,而只能又該進程自願釋放。

  -----請求保持條件條件: 進程(線程)每次申請它所需要的一部分資源,在申請新資源的同時繼續占用已分配的資源。

  -----循壞等待條件: 多個進程(線程)之間形成一種頭尾相接的循環等待資源關系,即前一個進程占有后一個進程所請求的資源。

注:這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之 一不滿足,就不會發生死鎖。

 

解決死鎖的方法

  -----預防死鎖(破壞產生死鎖的條件)

  -----避免死鎖(銀行家算法)

  -----檢測死鎖(資源分配圖)

  -----解除死鎖

注:第三條與第四條一般聯合使用

 

預防死鎖的策略

  -----破壞互斥條件(SPOOLing)

  ----- 允許剝奪其他進程的資源(破壞不可剝奪條件)

  -----一次性分配所有的資源(破壞請求與保持條件

  -----有序分配資源(破壞請求與保持條件

 

檢測死鎖的策略

  資源分配圖

 

解除死鎖的策略

-----撤銷進程

      -----撤消陷於死鎖的全部進程

  -----逐個撤消陷於死鎖的進程,直到死鎖不存在

-----剝奪資源

  -----將陷於死鎖的進程所占用的資源逐個強迫放棄,直至死鎖消失

  -----從另外一些進程那里強行剝奪足夠數量的資源分配給死鎖進程,以解除死鎖狀態

 

與死鎖相關的概念

     -----活鎖:活鎖不會被阻塞,而是不停檢測一個永遠不可能為真的條件。除去進程本身持有的資源外,活鎖狀態的進程會持續耗費寶貴的CPU時間。

                 避免活鎖的簡單方法是采用先來先服務的策略

  -----飢餓:由於優先級別低而無法得到執行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM