【說明】:死鎖部分知識整理,參考書籍《現代操作系統》,題目練習,牛客網:點擊打開鏈接
【死鎖的規範定義】:存在一組進程集合,這個集合中的所有進程,都在等待集合中其他進程才能引發的事件,那麼這個進程集合就是死鎖的;
【死鎖發生的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、破壞環路等待條件:資源編號,按順序請求分配,不會出現環路;
【其他死鎖】:通信死鎖,活鎖等等;