互斥和死鎖

【說明】:死鎖部分知識整理,參考書籍《現代操作系統》,題目練習,牛客網:點擊打開鏈接

【死鎖的規範定義】:存在一組進程集合,這個集合中的所有進程,都在等待集合中其他進程才能引發的事件,那麼這個進程集合就是死鎖的;

【死鎖發生的4個必要條件】:這4點經常考

1、互斥條件

2、佔有和等待

3、不可搶佔

4、環路等待

【死鎖檢測】:有向圖建模,用dfs檢測環路,有環路的情況下就有死鎖;牛客網的題目中稱之爲:資源分配圖簡化法;

【處理死鎖的4種策略】:這4種策略經常考

1、忽略該問題:鴕鳥算法,即忽略死鎖的發生,不管他;

2、檢測死鎖並恢復:恢復方法有下面幾種

2.1、搶佔資源

2.2、殺死進程

2.3、回滾恢復

ps:這幾種方法都不太好,1 2可能有副作用,3的開銷我覺得大;

3、仔細對資源進行分配,動態地避免死鎖:

3.1、銀行家算法

3.2、銀行家算法中的數據結構:

1)可利用資源向量Available
是個含有m個元素的數組,其中的每一個元素代表一類可利用的資源數目。如果Available[j]=K,則表示系統中現有Rj類資源K個。
2)最大需求矩陣Max
這是一個n×m的矩陣,它定義了系統中n個進程中的每一個進程對m類資源的最大需求。如果Max[i,j]=K,則表示進程i需要Rj類資源的最大數目爲K。
3)分配矩陣Allocation
這也是一個n×m的矩陣,它定義了系統中每一類資源當前已分配給每一進程的資源數。如果Allocation[i,j]=K,則表示進程i當前已分得Rj類資源的 數目爲K。
4)需求矩陣Need。
這也是一個n×m的矩陣,用以表示每一個進程尚需的各類資源數。如果Need[i,j]=K,則表示進程i還需要Rj類資源K個,方能完成其任務。
Need[i,j]=Max[i,j]-Allocation[i,j] 

4、預防死鎖發生,破壞死鎖發生的4個必要條件:

4.1、破壞互斥條件:比如假脫機技術;

4.2、破壞佔有和等待:靜態資源分配法;

4.3、破壞不可搶佔條件:虛擬化;

4.4、破壞環路等待條件:資源編號,按順序請求分配,不會出現環路;

【其他死鎖】:通信死鎖,活鎖等等;










發佈了59 篇原創文章 · 獲贊 112 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章