如果你對其他作業系統的知識感興趣,請考慮閱讀我的專欄:
【作業系統】
須知
本文僅作學習筆記使用,僅在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.撤銷所有行程
后話
- 首先給大家說一下,博主經常在線,如果有什么問題或者想法,可以在下方評論,我會積極反饋的,
- 其次還是要請大家能夠多多指出問題,我也會在評論區等候大家!
.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/166423.html
標籤:其他
上一篇:銳捷網路技能大賽-2019年國賽真題[2019年全國職業技能大賽高職組計算機網路應用賽項真題-H卷]路由交換部分答案詳解
