死鎖的解除
當死鎖偵測程序偵測到死鎖存在時,應設法將其解除,讓系統從死鎖狀態中恢復過來。常用的解除死鎖的方法包括:
方法 | 說明 | 優點 | 缺點 |
---|---|---|---|
立即結束所有進程 | 結束所有進程的執行,並重新啟動作業系統 | 簡單 | 損失大,之前的工作全部作廢 |
撤銷所有死鎖進程 | 撤銷涉及死鎖的所有進程,解除死鎖後繼續運行 | 能徹底破壞死鎖的循環等待條件 | 代價高,可能會導致一些重要進程被終止,進程已做的工作會遺失,恢復過程麻煩。 |
逐一撤銷死鎖進程 | 逐一撤銷涉及死鎖的進程,回收其資源,直至死鎖解除 | 靈活,可根據進程特性選擇撤銷順序 | 需判斷先撤銷哪些進程,可能比較複雜 |
搶奪資源 | 從涉及死鎖的進程中搶奪資源,重新分配給其他進程 | 能在不終止進程的情況下解除死鎖 | 可能導致其他進程的不穩定,需謹慎處理 |
逐一撤銷死鎖進程的條件選擇
逐一撤銷死鎖進程時,可以選擇符合下列條件的進程優先撤銷:
-
消耗的 CPU 時間最少者
-
產生的輸出最少者
- 預計剩餘執行時間最長者
- 佔有資源數最少者
- 優先最低者
這種方法透過彈性選擇撤銷的進程,可以在盡量減少影響的情況下解除死鎖。