如果你對其他作業系統的知識感興趣,請考慮閱讀我的專欄:
本文僅作學習筆記使用,僅在CSDN網站釋出,如果在其他網站發現,均為侵權行為,請舉報。作者:小王在努力。
參考資料:《計算機作業系統》 湯小鳳 樑紅兵 哲鳳屏 湯子贏 編著
死鎖是計算機中的一種狀態。會因為一些原因,導致程式阻塞,無法繼續執行。
產生死鎖的兩個主要原因:競爭資源和程式推進不當。
程式中產生死鎖,都會同時具有以下四個條件:
1.互斥條件
2.請求和保持條件
3.不可搶佔條件
4.迴圈等待條件
通常處理死鎖的方式有三種:
1.預防死鎖
2.避免死鎖
3.檢測和解除死鎖
預防死鎖是再程式執行之前進行的處理方法。避免死鎖則是在程式執行中解決的。而檢測和解除死鎖則是在死鎖發生後的處理。
在程式執行之前,為了預防產生死鎖,我們只需要破壞死鎖產生的條件之一即可。
常用的方法有:
1.破壞「請求和保持」條件
2.破壞「不可搶佔」條件
3.破壞「迴圈等待」條件
在程式執行中,為了避免產生死鎖,我們會判斷系統的是否安全狀態,通過使用銀行家演演算法來求出安全序列來保證程式處理安全狀態,從而不會出現死鎖。
銀行家演演算法舉例(注意此處表示有四類資源,每類資源的個數,而不是數位1622):
Process | Allocation | Need | Avaliable |
---|---|---|---|
P0 | 0032 | 0012 | 1622 |
P1 | 1000 | 1750 | |
P2 | 1354 | 2356 | |
P3 | 0332 | 0652 | |
P4 | 0014 | 0656 |
(1)該狀態是否安全?
(2)若程序P2提出請求Requset(1,2,2,2)後,系統能否將資源分配給它?
解:
(1)系統是安全的。
根據題意可以得出:
Process | Max(總共需要的資源量) | Allocation(目前已有的資源量) | Need (所需的資源量) | Avaliable (現有的資源量) |
---|---|---|---|---|
P0 | 0044 | 0032 | 0012 | 1622 |
P1 | 2750 | 1000 | 1750 | |
P2 | 36 10 10 | 1354 | 2356 | |
P3 | 0984 | 0332 | 0652 | |
P4 | 066 10 | 0014 | 0656 |
據此表可以推出安全序列為{P0,P3,P1,P2,P4}
具體推理過程如下:
1.如果先對P0進行分配則:Av = 1622 - Need=1 6 2 2 - 0 0 1 2 = 1610
遍歷剩下的,1610不足以為下面的資源進行二次分配
程式P0執行完成,釋放資源Av = 1610 + Max = 1654
2.從頭開始遍歷未執行完的程式,通過比較當前Av和Need(if(Av>Need)進行分配;else 跳過),不足以為P1進行分配,不足以為P2進行分配,足以為P3進行分配。
3.對P3進行分配:Av = 1654 - Need = 1002
遍歷剩下的,1002不足以為下面的資源進行二次分配
程式P3執行完成,釋放資源Av = 1002+Max = 1 9 8 6
4.從頭開始遍歷未執行完的程式,通過比較當前Av和Need(if(Av>Need)進行分配;
足以對P1進行分配。
5.對P1進行分配:Av = 19 8 6 - Need = 0236
遍歷剩下的,0236不足以未下面的資源進行二次分配
程式P1執行完成,釋放資源Av = 0236 + Max = 2986
6.從頭開始遍歷未執行完的程式,通過比較當前Av和Need(if(Av>Need)進行分配;
足以對P2進行分配。
7.對P2進行分配:Av = 2 9 8 6 - Need = 0630
遍歷剩下的,0630不足以未下面的資源進行二次分配
程式P2執行完成,釋放資源Av = 0630 + Max = 3 12 13 10
8.從頭開始遍歷未執行完的程式,通過比較當前Av和Need(if(Av>Need)進行分配;
足以對P4進行分配。
9.對P4進行分配:Av = 3 12 13 10 - Need = 3 6 8 4
遍歷剩下的,無可分配資源
程式P4執行完成,釋放資源Av = 3684 + Max = 3 12 14 14
10.執行完畢,序列為{P0,P3,P1,P2,P4}
(2)先為P2分配1,2,2,2資源之後,剩餘的資源量不足以為其他資源進行分配,同時P2資程式也未能執行完畢,不能釋放資源,造成死鎖,所以不能分配給它。
我們可以定時或者當資源利用率低的時候進行死鎖檢測。可以採用的方法有:
資源分配圖(圖片來自網路,侵權刪除)
其中圓圈代表程式;舉行代表資源;矩形中的○代表資源的個數。
觀察P1,已有兩個資源,需要r2的一個資源,並且r2有且分配給P1了,所以P1釋放資源。
P2有足夠的資源,執行完畢,釋放資源。
此處的為:多資源、有環、無死鎖。具體的在死鎖定理裡面有提及。
1.回退程序
2.復原所有程序