1. 程式人生 > >作業系統第三章之預防死鎖的

作業系統第三章之預防死鎖的

預防死鎖的方法

預防死鎖
資源的排他性無法更改,故在其他3個條件上入手
1.摒棄“請求和保持”條件:所有程序開始執行前,必須一次性的申請其在整個執行過程所需的全部資源(AND)。演算法簡單、易於實現且很安全。但缺點是資源浪費嚴重、或程序延遲執行。
2.摒棄“不剝奪”條件:允許程序先執行,但當提出的新要求不被滿足時必須釋放它已保持的所有資源,待以後需要時再重新申請。實現比較複雜且付出很大代價。可能會造成前功盡棄,反覆申請和釋放等情況。
3.摒棄“環路等待”條件:有序設定資源:將所有資源按型別進行線性排隊,賦予不同序號。所有程序對資源的請求必須嚴格按照資源序號遞增的次序提出,這樣在所形成的資源分配圖中,不可能會出現環路。
與前兩種策略比較,資源利用率和系統吞吐量都有較明顯的改善。但也存在嚴重問題:
資源編號限制新裝置的增加;
應用中的使用裝置順序與規定的順序並不協調;
限制了使用者程式設計自由。

避免死鎖

上述方法限制條件都太強;造成一定的應用不便。採用避免死鎖的方法則是隻施加較弱限制條件,從而獲得令人滿意的系統性能。
名詞:
安全狀態:系統能按某種程序順序為每個程序分配所需資源,直至滿足每個程序對資源的最大需求,並能順利完成。
不安全狀態:系統無法找到一種使多個程序能夠順利分配資源執行完的安全序列。

只要使系統始終處於安全狀態,便可避免發生死鎖。
不是所有的不安全狀態都是死鎖狀態。

銀行家演算法避免死鎖