銀行家算法=-- -
1. 安全狀態(tài): 在某時刻系統(tǒng)中所有進程可以排列一個安全序列:{P1,P2,`````Pn},剛稱此時,系統(tǒng)是安全的.
所謂安全序列{P1,P2,`````Pn}是指對于P2,都有它所需要剩余資源數(shù)量不大于系統(tǒng)掌握的剩余的空間資源與所有Pi(j<i)所占的資源之和.
2.不安全狀態(tài)可能產(chǎn)生死鎖.
目前狀態(tài) 最大需求 尚需
P1 3 9 6
P2 5 10 5
P3 2 4 2
在每一次進程中申請的資源,判定一下,若實際分配的話,之后系統(tǒng)是否安全.
3.銀行家算法的思路:
1),進程一開始向系統(tǒng)提出最大需求量.
2),進程每次提出新的需求(分期貸款)都統(tǒng)計是否超出它事先提出的最大需求量.
3),若正常,則判斷該進程所需剩余剩余量(包括本次申請)是否超出系統(tǒng)所掌握的
剩余資源量,若不超出,則分配,否則等待.
4.銀行家算法的數(shù)據(jù)結(jié)構(gòu).
1),系統(tǒng)剩余資源量A[n],其中A[n]表示第I類資源剩余量.
2),各進程最大需求量,B[m][n],其中B[j][i]表示進程j對i
類資源最大需求.
3),已分配資源量C[m][n],其中C[j][i]表示系統(tǒng)j程已得到的第i資源的數(shù)量.
4),剩余需求量.D[m][n],其中D[j][i]對第i資源尚需的數(shù)目.
5.銀行家算法流程:當(dāng)某時刻,某進程時,提出新的資源申請,系統(tǒng)作以下操作:
1),判定E[n]是否大于D[j][n],若大于,表示出錯.
2),判定E[n]是否大于系統(tǒng)剩余量A[n],若大于,則該進程等待.
3),若以上兩步?jīng)]有問題,嘗試分配,即各變量作調(diào)整.
4),按照安全性推測算法,判斷,分配過后,系統(tǒng)是否安全,若安全,則實際分配,否則,撤消分配,讓進程等待.
6."安全性檢測"算法
1),先定義兩個變量,用來表示推算過程的數(shù)據(jù).
F[n]=A[n],表示推算過程中,系統(tǒng)中剩余資源量的變化.
J[n]=False表示推算過程中各進程是否假設(shè)"已完成"
2),流程:
在"剩余"的進程中(在推算)過程中,一些進程假設(shè)已完成,查找D[j][n]<=F[n]的進程,找到后令J[j]=True
(假設(shè)該進程完成),F[n]+D[j][n](該進程所占資源釋放),如此循環(huán)執(zhí)行.
若最后,所有的F[n]=True(在推算過程中,所有進程均可以完成),則表示(分配過后)系統(tǒng)是安全的,否則系統(tǒng)是不安全的.
參考資料:
http://huangqiyu.blogchina.com/419807.html