1)銀行家算法中的數(shù)據(jù)結構
(1)各類可利用資源的數(shù)量
u向量Available:(i1,i2,…,im),含m個元素,每個元素代表一類可利用的資源數(shù)目。
u動態(tài)變化的,初始值是系統(tǒng)配置的該類資源的全部數(shù)目,值隨資源的分配與回收而動態(tài)的改變。
u實現(xiàn):一維數(shù)組。Available【j】=K,表示系統(tǒng)中Rj類資源現(xiàn)有可用數(shù)量為K個。
(2)每個進程對每類資源的需求
最大需求、已獲得的、還需要的
v最大需求矩陣Max
vn*m,系統(tǒng)中n個進程中每個進程分別對m類資源的最大需求。
v取值:根據(jù)進程需求賦初始值。
v實現(xiàn):二維數(shù)組。Max【i,j】=K,表示進程 i
需要Rj類資源的最大數(shù)目為K。

算法過程:
就是對各進程的Request向量及資源數(shù)量進行一系列判斷及值操作。
進程Pi發(fā)出資源請求后,系統(tǒng)按下述步驟進行檢查:
首先是兩個基本判斷:
(1)IF Requesti[j]<= Need[i,j]
? THEN轉向步驟2;
? ELSE認為出錯,所需資源數(shù)超過宣布的最大值(自我矛盾)
(2)IF Requesti[j]<= Available[j]
? THEN轉向步驟3;
? ELSE表示尚無足夠資源,Pi需等待(現(xiàn)實不滿足)
如果上面兩步判斷都通過了,進入實質的資源分析
(3)系統(tǒng)試探著把資源分配給進程Pi
,并修改相應數(shù)據(jù)結構的值(假設性操作):
???? Available【j】? =
???? Allocation【i,j】=
???? Need【i,j】=
(4)系統(tǒng)執(zhí)行安全性算法,判斷新的資源分配狀態(tài)是否是安全的。
? 即:找一個安全序列,使這些進程按順序執(zhí)行完)如果能夠找到,則將假設操作真正實施完成資源分配。
3)安全性算法
(1)需要一些記錄信息的數(shù)據(jù)結構,設置兩個向量:
v工作向量work
算法開始時work=Available;
系統(tǒng)找安全序列的過程需要不斷判斷和修改當前資源數(shù)量,不能直接修改原始數(shù)據(jù)記錄Aailable。
v標志向量Finish
表示每個進程是否有足夠的資源使之運行完成。開始時所以進程都設置初值Finish[i]:=false;
找安全序列的過程相當于使所有Finish[i]:=true。
(2)找安全序列的過程
? 從Finish[i] = false 的進程集合中找一個進程
? IFNeed[i,j] <= work[j]
? THEN? 執(zhí)行步驟 a;
? ELSE? 執(zhí)行步驟 b;
? a)假設Pi獲得資源順利執(zhí)行完,釋放出分配給它的資源,修改相應的值:
????work【j】? = work【i】+Allocation【i,j】;
????Finish【i】= true;
????goto step (2);//返回去繼續(xù)找下一個進程。
? b)當算法不再在(2)、a)步間循環(huán)找進程,到達本步時,若所有Finish[i]=true都滿足,則表示所有進程都按某個順序執(zhí)行完了,系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)當前所處的資源分配狀態(tài)是不安全狀態(tài)。