死鎖處理策略
1.預防死鎖
設置某些限制條件,破壞產生死鎖的四個必要條件中的一個或幾個,以預防發生死鎖
2.避免死鎖
在資源的動態分配中,用某種方法防止系統進入不安全狀態。從而避免死鎖。
3.死鎖檢測和解除
無需采取任何限制性措施,允許進程在運行過程中發生死鎖。通過系統檢測機構及時地檢測死鎖的發生,然后采取某種措施解除死鎖。
預防死鎖和避免死鎖都是屬於事先防范策略,但預防死鎖的限制條件比較嚴格,實現起來較為簡單,但往往導致系統的效率低,資源利用率低;避免死鎖的限制條件相對寬松,資源分配后需要通過算法來判斷是否進入不安全狀態,實現起來較為復雜。
死鎖預防
防止死鎖的發生只需要破壞死鎖產生的四個必要條件之一即可。
死鎖避免
死鎖避免同樣是屬於事先預防的策略,但並不是事先采取某種限制措施破壞死鎖的必要條件,而是在資源動態分配過程中,防止系統進入不安全狀態,以避免發生死鎖。這種方法所實施加的限制條件較弱,可以獲得較好的系統性能。
銀行家算法是著名的死鎖避免算法。
它的思想是:把操作系統看做是銀行家,操作系統管理的資源相當於銀行家管理的資金,進程向操作系統請求 分配資源相當於用戶向銀行家貸款。操作系統按照銀行家制定的規則為進程分配資源,當進程首次申請資源時,要測試該進程對資源的最大需求量,如果系統現存的資源可以滿足它的最大需求量則按當前的申請量分配資源。
否則就推遲分配。當進程在執行中繼續申請資源時,先測試該進程已占用的資源數和本次申請的資源數之和是否超過了該進程對資源的最大的需求量。若超過則拒絕分配資源,過沒有超過則再測試系統現存的資源能否滿足該進程尚需的最大的資源量,若能滿足則按當前的申請分配資源,否則也要推遲。
解除死鎖的方法:
1.資源剝奪法:掛起某些死進程並搶奪它的資源,以便讓其他進程繼續推進
2.撤銷進程法:強制撤銷部分,甚至全部死鎖進程並剝奪這些進程的資源
3.進程回退法:讓進程回退到足以避免死鎖的地步