作業系統2 4 4 死鎖的檢測和解除

2021-10-07 13:38:58 字數 1115 閱讀 2819

為了能系統是否已經發生死鎖進行檢測,必須

1、用一種資料結構來儲存資源的請求和分配資訊

2、用一種演算法,利用上述資訊來檢測系統是否進入死鎖狀態

如果系統中剩餘的可用資源足夠滿足程序的需求,那麼這個程序暫時不會被堵塞,可以順利執行下去。

如果這個程序執行結束了把資源歸還給系統,就可能使得某些正在等待的程序被啟用,並且順利的執行下去。

相應地,這些被啟用的程序執行完之後又會歸還一些資源,這樣可能啟用另外一些阻塞的程序...

如果按上述過程,最終能消除所有的邊,就稱這個圖是可以完全簡化的。此時一定沒有發生死鎖(相當於可找到乙個安全序列)。

反之,最終不能消除所有的邊,那麼此時就是發生了死鎖,最終還連著邊的那些程序就是處於死鎖狀態的程序

死鎖定理:如果某時刻系統的資源分配圖不可完全簡化,那麼此時系統死鎖(用於檢測是否為死鎖狀態)

補充:並不是系統中所有的程序都是 死鎖狀態,用死鎖檢測演算法化簡資源分配圖後,還連著邊的那些程序就是死鎖程序

1、資源剝奪法:掛起(暫時放到外存上)某些死鎖程序,並搶占它的資源,將這些資源分配給 其他死鎖程序。但是應防止被掛起的程序長時間得不到程序而導致飢餓

2、撤銷程序法(終止程序法):強制撤銷部分,甚至是全部死鎖程序,並且剝奪這些程序的全部資源,這種方式的優點是實現簡單,但是付出的代價可能會很大。因為有些程序可能已經執行很長時間,已經接近結束,一旦被終止可謂是功虧一簣

3、程序回退法:讓乙個或者多個程序回退到足以避免死鎖的地步。這就要求系統要記錄程序的歷史訊息,設定還原點(也不太容易實現)

如何決定對哪些程序下手?

1)程序的的優先順序低的先下手

2)已經執行的時間長度短的

3)還要很久程序才能結束

4)程序使用的資源數多的

5)優先犧牲批處理式程序,不是互動式的

死鎖的檢測和解除

前面紹的死鎖預防和避免演算法,都是在為程序分配資源時施加限制條件或進行檢測,若系統為程序分配資源時不釆取任何措施,則應該提供死鎖檢測和解除的手段。資源分配圖 系統死鎖,可利用資源分配圖來描述。如圖2 17所示,用圓圈代表乙個程序,用框代表一類資源。由於一種型別的資源可能有多個,用框中的乙個點代表一類...

作業系統 死鎖的預防 避免和解除

預防死鎖 破壞環路等待條件是屬於死鎖的預防 該方法是通過設定某些限制條件,去破壞產生死鎖的四個必要條件的乙個或多個條件,來預防發生死鎖。易實現,被廣泛使用,但由於所施加的限制條件往往太嚴格,因而可能導致系統資源利用率和吞吐量降低。避免死鎖 典型的銀行家演算法是屬於死鎖的避免 避免死鎖是在資源的動態分...

作業系統中提前檢測死鎖和死鎖解除的方法

以上小節討論了死鎖預防和死鎖避免的幾種方法,但是這些方法都比較保守,並且都是以犧牲系統效率和浪費資源為代價的,這恰恰與作業系統設計目標相違背。假如系統為程序分配資源時,不採取任何限制性措施來避免和預防死鎖,減少因避免和預防死鎖策略帶來的開銷,同時本著提高資源利用率的原則分配資源,但作業系統在執行過程...