操作系統2.4.2 預防死鎖

 

一、靜態策略:預防死鎖

1)破壞互斥條件

互斥條件只有對必須互斥使用的資源的爭搶纔會導致死鎖

破壞互斥條件

如果把只能互斥使用的資源改造成允許共享使用,則系統不會進入死鎖狀態。

比如SPOOLing技術可以把獨佔設備在邏輯上改造成共享設備。

該策略的缺點:並不是所有的資源都可以改造成可以共享使用的資源。並且爲了系統安全,很多地方還必須保護這種互斥性。因此,很多時候無法破壞互斥條件

 

2)破壞不剝奪條件

不剝奪條件:進程所獲得的資源在未使用完之前,不能由其他進程強行奪走,只能主動釋放

破壞不剝奪條件

方案一:當某個進程請求新資源得不到滿足時,它必須立即釋放保持的所有資源,待以後需要時再重新申請。也就是說,即使某些資源還沒有使用完,也需要主動釋放,從而破壞了不可剝奪條件

方案二:當某個進程需要的資源被其它進程所佔有時,可以由操作系統協助,將想要的資源強行剝奪。這種方式一般需要考慮各個進程的優先級(比如:剝奪調度方式,就是將處理機資源強行剝奪給優先級更高的進程使用)

缺點

1、實現起來比較複雜,

2、釋放已經獲得的資源可能造成前一段工作的失效。因此這種方法一般只使用於易保存和恢復狀態的資源,如CPU。

3、反覆的申請和釋放資源會增加系統開銷,降低系統吞吐量。

4、如果採用方案一,只要暫時得不到某個資源,之前獲得的那些資源都需要放棄,以後在重新申請。如果一直髮生這樣的情況,就會導致進程飢餓。

 

3)破壞請求和保持條件

請求和保持條件:進程已經保持了至少一個資源,但又提出了新的資源請求,而該資源又被其它進程佔有,此時請求進程被阻塞,但又對自己已有的資源保持不放

可以採用靜態分配方法,即進程在運行前一次申請完它所需要的全部資源,在它的資源未滿足前,不讓它投入運行。一旦投入運行後,這些資源就一直歸它所有,該進程不會再請求任何資源了

該策略實現簡單,但也有明顯的缺點

有些資源可能只需要很短的時間,因此如果進程整個運行期間都一直保持所有資源,就會造成嚴重的資源浪費,資源利用率低。另外,該策略也有可能導致某些進程飢餓

 

4)破壞循環等待條件

循環等待條件:存在一種進程資源的循環等待鏈,鏈中的每一個進程已獲得的資源同時被下一個進程所請求

可以採用順序資源分配法首先給系統中資源編號,規定每個進程必須按編號遞增的順序請求資源,同類資源(編號相同的資源)一次申請完

原理分析:一個進程只有已佔有小編號的資源時,纔有資格申請更大編號的資源。按此規則,已經持有大編號的資源不可能逆向地回來申請小編號的資源,從而就不會產生循環等待現象

缺點

1、不方便增加新的設備,因爲可能需要重新分配所有的編號;

2、進程實際使用資源的順序可能和編號遞增順序不一致,會導致資源浪費;

3、必須按規定申請資源,用戶編程麻煩

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