進程的死鎖問題

1、什麼是死鎖

死鎖是指多個進程因競爭資源而造成的一種僵局(互相等待),若無外力作用,這些進程都將無法向前推進。

例如,在某一個計算機系統中只有一臺打印機和一臺輸入 設備,進程P1正佔用輸入設備,同時又提出使用打印機的請求,但此時打印機正被進程P2 所佔用,而P2在未釋放打印機之前,又提出請求使用正被P1佔用着的輸入設備。這樣兩個進程相互無休止地等待下去,均無法繼續執行,此時兩個進程陷入死鎖狀態。

2、死鎖產生的原因

  1. 系統資源的競爭:系統資源的競爭導致系統資源不足,以及資源分配不當,導致死鎖。

  2. 進程運行推進順序非法:進程在運行過程中,請求和釋放資源的順序不當,會導致死鎖。

3 產生死鎖的四個必要條件

互斥條件(Mutual exclusion):一個資源每次只能被一個進程使用,即在一段時間內某 資源僅爲一個進程所佔有。此時若有其他進程請求該資源,則請求進程只能等待。

請求與保持條件(Hold and wait):進程已經保持了至少一個資源,但又提出了新的資源請求,而該資源 已被其他進程佔有,此時請求進程被阻塞,但對自己已獲得的資源保持不放。

不可剝奪條件(No pre-emption):進程所獲得的資源在未使用完畢之前,不能被其他進程強行奪走,即只能 由獲得該資源的進程自己來釋放(只能是主動釋放)。

循環等待條件(Circular wait): 若干進程間形成首尾相接循環等待資源的關係(即存在一種資源的循環等待鏈)。

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

4 死鎖處理策略

  1. 預防死鎖:設置某些限制條件,破壞產生死鎖的四個必要條件中的一個或幾個。
  2. 避免死鎖:在資源的動態分配過程中,用某種方法防比系統進入不安全狀態。銀行家算法是著名的死鎖避免算法。
  3. 死鎖的檢測及解除:無須採取任何限制性措施,允許進程在運行過程中發生死鎖,通過系統的檢測機制及時地檢測出死鎖的發生,然後採取某種措施解除死鎖。死鎖的檢測可利用資源分配圖來描述。

5 死鎖的避免與預防

死鎖避免的基本思想:

系統對進程發出每一個系統能夠滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源,如果分配後系統可能發生死鎖,則不予分配,否則予以分配。這是一種保證系統不進入死鎖狀態的動態策略

理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和解除死鎖。所以,在系統設計、進程調度等方面注意如何讓這四個必要條件不成立,如何確定資源的合理分配算法,避免進程永久佔據系統資源。此外,也要防止進程在處於等待狀態的情況下佔用資源。因此,對資源的分配要給予合理的規劃。

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

  1. 破壞“不可剝奪”條件:一個進程不能獲得所需要的全部資源時便處於等待狀態,等待期間他佔有的資源將被隱式的釋放重新加入到 系統的資源列表中,可以被其他的進程使用,而等待的進程只有重新獲得自己原有的資源以及新申請的資源纔可以重新啓動,執行。
  2. 破壞”請求與保持條件“:第一種方法靜態分配每個進程在開始執行時就申請他所需要的全部資源。第二種是動態分配每個進程在申請所需要的資源時他本身不佔用系統資源
  3. 破壞“循環等待”條件:採用資源有序分配,其基本思想是將系統中的所有資源順序編號,將緊缺的,稀少的採用較大的編號,在申請資源時必須按照編號的順序進行,一個進程只有獲得較小編號的進程才能申請較大編號的進程。

死鎖避免和死鎖預防的區別:

死鎖預防是設法至少破壞產生死鎖的四個必要條件之一,嚴格的防止死鎖的出現;
而死鎖避免則不那麼嚴格的限制產生死鎖的必要條件的存在,因爲即使死鎖的必要條件存在,也不一定發生死鎖。死鎖避免是在系統運行過程中注意避免死鎖的最終發生。

6 死鎖的解除主要方法如下

(1)資源剝奪法
(2)撤銷進程法。
(3)進程回退法。
發佈了138 篇原創文章 · 獲贊 99 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章