死鎖的四個必要條件、預防和避免辦法

死鎖

1. 四個必要條件

2. 死鎖預防

3. 死鎖的避免


死鎖

概念:多個併發進程因爭奪系統資源而產生相互等待的現象。

1. 四個必要條件

  1. 互斥:某種資源一次只允許一個進程訪問,即該資源一旦分配給某個進程,其他進程就不能再訪問,直到該進程訪問結束。
  2. 佔有且等待:一個進程本身佔有資源(一種或多種),同時還有資源未得到滿足,正在等待其他進程釋放該資源。
  3. 不可搶佔:別人已經佔有了某項資源,你不能因爲自己也需要該資源,就去把別人的資源搶過來。
  4. 循環等待:存在一個進程鏈,使得每個進程都佔有下一個進程所需的至少一種資源。

       當以上四個條件均滿足,必然會造成死鎖,發生死鎖的進程無法進行下去,它們所持有的資源也無法釋放。這樣會導致CPU的吞吐量下降。所以死鎖情況是會浪費系統資源和影響計算機的使用性能的。那麼,解決死鎖問題就是相當有必要的了。
 

2. 死鎖預防

我們可以通過破壞死鎖產生的4個必要條件來 預防死鎖,由於資源互斥是資源使用的固有特性是無法改變的。

破壞“佔有且等待”條件

方法1:所有的進程在開始運行之前,必須一次性地申請其在整個運行過程中所需要的全部資源
         優點:簡單易實施且安全。
         缺點:因爲某項資源不滿足,進程無法啓動,而其他已經滿足了的資源也不會得到利用,嚴重降低了資源的利用率,造成資源浪費。
                  使進程經常發生飢餓現象。

方法2:該方法是對第一種方法的改進,允許進程只獲得運行初期需要的資源,便開始運行,在運行過程中逐步釋放掉分配到的已經使用完畢的資源,然後再去請求新的資源。這樣的話,資源的利用率會得到提高,也會減少進程的飢餓問題。

破壞“不可搶佔”條件

當一個已經持有了一些資源的進程在提出新的資源請求沒有得到滿足時,它必須釋放已經保持的所有資源,待以後需要使用的時候再重新申請。這就意味着進程已佔有的資源會被短暫地釋放或者說是被搶佔了。

該種方法實現起來比較複雜,且代價也比較大。釋放已經保持的資源很有可能會導致進程之前的工作實效等,反覆的申請和釋放資源會導致進程的執行被無限的推遲,這不僅會延長進程的週轉週期,還會影響系統的吞吐量。

破壞“循環等待”條件

採用資源有序分配其基本思想是將系統中的所有資源順序編號,將緊缺的,稀少的採用較大的編號,在申請資源時必須按照編號的順序進行(從小往大申請),一個進程只有獲得較小編號的進程才能申請較大編號的進程。

 

3. 死鎖的避免

死鎖避免:在使用前進行判斷,只允許不會產生死鎖的進程申請資源

死鎖避免是利用額外的檢驗信息,在分配資源時判斷是否會出現死鎖,只在不會出現死鎖的情況下才分配資源。
兩種避免辦法:
    1、如果一個進程的請求會導致死鎖,則不啓動該進程
    2、如果一個進程的增加資源請求會導致死鎖 ,則拒絕該申請。
避免死鎖的具體實現通常利用銀行家算法
    銀行家算法
a、銀行家算法的相關數據結構
    可利用資源向量Available:用於表示系統裏邊各種資源剩餘的數目。由於系統裏邊擁有的資源通常都是有很多種(假設有m種),所以,我們用一個有m個元素的數組來表示各種資源。數組元素的初始值爲系統裏邊所配置的該類全部可用資源的數目,其數值隨着該類資源的分配與回收動態地改變。
    最大需求矩陣Max:用於表示各個進程對各種資源的額最大需求量。進程可能會有很多個(假設爲n個),那麼,我們就可以用一個nxm的矩陣來表示各個進程多各種資源的最大需求量
    分配矩陣Allocation:顧名思義,就是用於表示已經分配給各個進程的各種資源的數目。也是一個nxm的矩陣。
    需求矩陣Need:用於表示進程仍然需要的資源數目,用一個nxm的矩陣表示。系統可能沒法一下就滿足了某個進程的最大需求(通常進程對資源的最大需求也是隻它在整個運行週期中需要的資源數目,並不是每一個時刻都需要這麼多),於是,爲了進程的執行能夠向前推進,通常,系統會先分配個進程一部分資源保證進程能夠執行起來。那麼,進程的最大需求減去已經分配給進程的數目,就得到了進程仍然需要的資源數目了。

銀行家算法通過對進程需求、佔有和系統擁有資源的實時統計,確保系統在分配給進程資源不會造成死鎖纔會給與分配。
死鎖避免的優點:不需要死鎖預防中的搶佔和重新運行進程,並且比死鎖預防的限制要少。
死鎖避免的限制:
    必須事先聲明每個進程請求的最大資源量
    考慮的進程必須無關的,也就是說,它們執行的順序必須沒有任何同步要求的限制
    分配的資源數目必須是固定的。
    在佔有資源時,進程不能退出
 

參考:https://blog.csdn.net/guaiguaihenguai/article/details/80303835

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章