1. 程式人生 > >作業系統第三章之產生死鎖的原因和必要條件

作業系統第三章之產生死鎖的原因和必要條件

關於死鎖

死鎖(Deadlock):指多個程序在執行過程中,因爭奪資源而造成的一種僵局。當程序處於這種狀態時,若無外力作用,它們都將無法再向前推進。
死鎖(Deadlock): 指程序之間無休止地互相等待!
飢餓(Starvation):指一個程序無休止地等待!

產生死鎖的原因和必要條件

請求推進的次序與對非剝奪性資源的爭用都是造成死鎖的原因。
產生死鎖的必要條件
形成死鎖的四個必要條件(四個條件都具備就會死鎖,缺一就不會死鎖)
互斥條件:程序對所分配到的資源進行排他性使用
請求和保持條件:程序已經保持了至少一個資源,又提出新的資源請求,而新請求資源被其他程序佔有只能造成自身程序阻塞,但對自己已獲得的其他資源保持不放,必然影響其他程序。
不剝奪條件:

程序已獲得的資源未使用完之前不能被剝奪,只能在使用完時由自己釋放。

環路等待條件

破壞這4個條件即是處理死鎖的方法

處理死鎖的基本方法

事先預防:
預防死鎖
設定限制條件,破壞四個必要條件的一個或幾個,預防發生死鎖。
較易實現。限制條件的嚴格也會導致系統資源利用率和系統吞吐量降低。
避免死鎖
不須事先限制,破壞四個必要條件,而是在資源的動態分配過程中,用某種方法去防止系統進入不安全狀態,從而避免發生死鎖。
這種事先加以較弱限制的方法,實現上有一定難度,但可獲較高的資源利用率及系統吞吐量,目前在較完善的系統中,常用此方法來避免發生死鎖。
事後處理:
檢測死鎖。
允許系統執行過程中發生死鎖,但通過系統檢測機構可及時的檢測出,能精確確定與死鎖有關的程序和資源;然後採取適當的措施,從系統中將已發生的死鎖清除掉。
解除死鎖。


與死鎖檢測配套的一種措施。
常用的實施方法:撤銷或掛起一些程序,以便回收一些資源並將他們分配給已阻塞程序,使之轉為就緒以繼續執行。
死鎖的檢測與解除措施,有可能使系統獲得較好的資源利用率和吞吐量(死鎖機率不一定很高),但在實現上難度也最大。