死鎖的檢測和解除
資源分配圖
資源分配圖是一種數據結構 :
graph LR A[數據分配圖] -->B[兩種結點] A-->C[兩種邊] B-->D[進程結點:對應一個進程] B-->E[資源結點:對應一類資源,一類資源可能有多個] C-->F[進程結點->資源結點:表示進程想申請幾個資源<每條邊代表一個>] C-->G[資源節點->進程結點:表示已經為進程分配了幾個資源<每條邊代表一個>]
如圖:

用資源分配圖判斷系統是否死鎖
方法 :

e.x.
沒有死鎖的資源分配圖 :

死鎖了的資源分配圖 :

死鎖的解除
資源剝奪法
掛起(暫時放在外存)某些 死鎖 進程, 並搶占它的資源, 讓這些資源分配給其他的死鎖進程, 注意需要防止被掛起的進程長時間得不到資源而飢餓
撤銷進程法
強制某些死鎖進程, 並剝奪這些進程的資源.
優點 : 實現簡單
缺點 : 代價大, 比如有些進程已經運行了很長時間甚至接近結束, 突然剝奪將功虧一簣
進程回退法
讓一個或多個死鎖進程回退到足以避免死鎖的地步
缺點 : 不太容易實現--系統需要記錄進程的歷史信息並設置還原點
可以根據 :
- 進程優先級
- 已執行多長時間
- 還要多久能完成
- 已經使用了多少資源
等方式決定對那個死鎖進程執行解除方案
