? ? ? ? ? ? ?
1、死鎖概念知識
計算機中存在許多互斥資源(打印機)、軟件資源(進程表、臨界區)如果兩個進程同時調用打印機,或同時進入臨界區必然會出現問題。
死鎖:指兩個以上的進程互相要求對方已經占有的資源導致無法繼續進行下去的現象。
2、死鎖案例
2.1 進程推進順序不當引起的死鎖
假設系統中有一臺打印機A、一臺掃描儀B,它們被進程P1、P2共享,兩個進程并發執行,按照下面的順序請求和釋放資源
如果按照P1<a>P2<a>P1<b>P2<b>的順序執行,會發生死鎖。首先P1<a>打印機A未被占用,可以正常執行;P2<a>掃描儀沒有被占用所以可以正常執行。
P1<b>時掃描儀被占用,所以需要等待。P1<b>時打印機被占用所以也需要等待。這樣導致雙方互相請求對方已經占用的資源,系統就會發生死鎖。
? ? ? ? ? ? ?
2.2 同類資源分配不當引起死鎖
如果系統中有m個資源被n個進程共享,當每個進程都需要k個資源,并且m<nk時,即資源數小于進程所要求的的總數時,可能會引起死鎖。
2.3 PV操作使用不當引起死鎖
P2進程從緩沖區取產品前,先執行P(S2),因為S2=-1,故P2等待;P1進程將產品送到緩沖區后。執行P(S1),因為S1=-1,故P1等待。這樣P1、P2都無法繼續執行下午,導致系統死鎖。
? ? ? ? ? ? ?
3、產生死鎖的原因和條件
原因:競爭資源及進程推進順序非
必要條件:互斥條件、請求保持條件、不可剝奪條件、環路條件。
進程資源有向圖:由方框(資源)、圓圈(請求資源)、有向邊組成。
? ? ? ? ? ? ?
4、死鎖的處理
鴕鳥策略(不理睬策略)、預防策略、避免策略、檢測與解除死鎖。
4.1 死鎖預防
采用某種策略顯示并發進程對資源的請求,破壞死鎖產生的某個必要條件,是系統在任何時刻都不能滿足死鎖的必要條件。預防死鎖的兩種策略如下:
1、預先靜態分配法
破壞不可剝奪條件、預先分配所需資源,保證不出現資源等待的情況。缺點:會降低資源利用率、并發程度。
2、資源有序分配法
破壞環路條件。把資源分類按順序排列,保證不形成環路。缺點:限制了進程對資源的請求、資源的排序會占用系統開銷。
4.2 死鎖避免
死鎖預防是設法破壞產生死鎖的必要條件之一,嚴格防止死鎖產生。死鎖避免并不是嚴格地限制死鎖產生的必要條件。最經典的死鎖避免算法是Dijkstra提出的銀行家算法。缺點:死鎖算法會占用系統的很大開銷。
4.3 死鎖檢測
該方法對資源分配不加限制,即允許死鎖產生,當系統要定時運行死鎖檢測程序,判斷系統是否發生死鎖,如果檢測到則設法解除。
4.4 死鎖解除
1、資源剝奪法:從一些進程那里強行剝奪足夠數量的資源分配給死鎖進程。
2、撤銷進程法:按照某種策略撤銷死鎖進程,直到解除死鎖。