銀行家算法:
當一個進程申請使用資源的時候,銀行家算法通過先 試探 分配給該進程資源,然後通過安全性算法判斷分配後的系統是否處於安全狀態,若不安全則試探分配作廢,讓該進程繼續等待。
判斷是否安全狀態
- 可利用資源向量Available。這是一個含有m個元素的數組,其中的而每一個元素代表一類可利用資源數目,其初始值是系統中所配置的該類全部可用資源的數目,其數值隨該類資源的分配和回收而動態的改變。如果Available[j]=K,則表示系統中現有Rj類資源K個。
- 最大需求矩陣Max。這是一個n*m的矩陣,它定義了系統中n個進程中的每一個進程對m類資源的最大需求。如果Max[i,j]=K;則表示進程i需要Rj類資源的最大數目爲K。
- 分配矩陣Allocation。這也是一個n*m的矩陣,它定義了系統中每一類資源當前已分配給每一進程的資源數。如果Allocation[i,j]=K,則表示進程i當前已分得Rj類資源的數目爲K。
- 需求矩陣Need。這也是一個n*m的矩陣,用以表示每一個進程尚需的各類資源數。如果Need[i,j]=K,則表示進程i還需要Rj類資源K個,方能完成任務。
詳細過程:
-
假設資源P1申請資源,銀行家算法先試探的分配給它(當然先要看看當前資源池中的資源數量夠不夠)
-
若申請的資源數量小於等於Available,然後接着判斷分配給P1後剩餘的資源,能不能使進程隊列的某個進程執行完畢
-
若沒有進程可執行完畢,則系統處於不安全狀態(即此時沒有一個進程能夠完成並釋放資源,隨時間推移,系統終將處於死鎖狀態)。
-
若有進程可執行完畢,則假設回收已分配給它的資源(剩餘資源數量增加),把這個進程標記爲可完成,並繼續判斷隊列中的其它進程,
-
若所有進程都可執行完畢,則系統處於安全狀態,並根據可完成進程的分配順序生成安全序列(如{P0,P3,P2,P1}表示將申請後的剩餘資源Work先分配給P0–>回收(Work+已分配給P0的A0=Work)–>分配給P3–>回收(Work+A3=Work)–>分配給P2–>······滿足所有進程)。
如此就可避免系統存在潛在死鎖的風險。