操作系統2.4.4 死鎖的檢測和解除

一、死鎖檢測

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

1、用一種數據結構來保存資源的請求和分配信息

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

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

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

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

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

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

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

 

二、死鎖解除

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

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

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

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

 

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

1)進程的的優先級低的先下手

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章