銀行家算法
當(dāng)一個(gè)進(jìn)程申請(qǐng)使用資源的時(shí)候借卧,銀行家算法通過先試探分配給該進(jìn)程資源保檐,然后通過安全性算法判斷分配后的系統(tǒng)是否處于安全狀態(tài),若不安全則試探分配作廢宛徊,讓該進(jìn)程繼續(xù)等待。
首先是銀行家算法中的進(jìn)程:
包含進(jìn)程Pi的需求資源數(shù)量(也是最大需求資源數(shù)量逻澳,MAX)
已分配給該進(jìn)程的資源A(Allocation)
還需要的資源數(shù)量N(Need=M-A)
Available為空閑資源數(shù)量闸天,即資源池(注意:資源池的剩余資源數(shù)量+已分配給所有進(jìn)程的資源數(shù)量=系統(tǒng)中的資源總量)
假設(shè)資源P1申請(qǐng)資源,銀行家算法先試探的分配給它(當(dāng)然先要看看當(dāng)前資源池中的資源數(shù)量夠不夠)斜做,若申請(qǐng)的資源數(shù)量小于等于Available苞氮,然后接著判斷分配給P1后剩余的資源,能不能使進(jìn)程隊(duì)列的某個(gè)進(jìn)程執(zhí)行完畢瓤逼,若沒有進(jìn)程可執(zhí)行完畢笼吟,則系統(tǒng)處于不安全狀態(tài)(即此時(shí)沒有一個(gè)進(jìn)程能夠完成并釋放資源,隨時(shí)間推移霸旗,系統(tǒng)終將處于死鎖狀態(tài))贷帮。
若有進(jìn)程可執(zhí)行完畢,則假設(shè)回收已分配給它的資源(剩余資源數(shù)量增加)诱告,把這個(gè)進(jìn)程標(biāo)記為可完成撵枢,并繼續(xù)判斷隊(duì)列中的其它進(jìn)程,若所有進(jìn)程都可執(zhí)行完畢精居,則系統(tǒng)處于安全狀態(tài)锄禽,并根據(jù)可完成進(jìn)程的分配順序生成安全序列(如{P0,P3靴姿,P2沃但,P1}表示將申請(qǐng)后的剩余資源Work先分配給P0–>回收(Work+已分配給P0的A0=Work)–>分配給P3–>回收(Work+A3=Work)–>分配給P2–>······滿足所有進(jìn)程)。
如此就可避免系統(tǒng)存在潛在死鎖的風(fēng)險(xiǎn)佛吓。
在銀行家算法中宵晚,若出現(xiàn)下述資源分配情況:
1)該狀態(tài)是否安全垂攘? (2)若進(jìn)程P2提出請(qǐng)求Request(1,2坝疼,2搜贤,2)后,系統(tǒng)能否將資源分配給它钝凶?
(1)利用安全性算法對(duì)上面的狀態(tài)進(jìn)行分析(見下表)仪芒,找到了一個(gè)安全序列{P0,P3,P4,P1,P2},故系統(tǒng)是安全的耕陷。
(2)P2發(fā)出請(qǐng)求向量Request(1,2,2,2),系統(tǒng)按銀行家算法進(jìn)行檢查:
①Request2(1,2,2,2)<=Need2(2,3,5,6)
②Request2(1,2,2,2)<=Available(1,6,2,2)
③系統(tǒng)先假定可為P2分配資源掂名,并修改Available,Allocation2和Need2向量:
Available=(0,4,0,0)
Allocation2=(2,5,7,6)
Need2=(1,1,3,4)
此時(shí)再進(jìn)行安全性檢查哟沫,發(fā)現(xiàn) Available=(0,4,0,0) 不能滿足任何一個(gè)進(jìn)程饺蔑,所以判定系統(tǒng)進(jìn)入不安全狀態(tài),即不能分配給P2相應(yīng)的Request(1,2,2,2)嗜诀。