银行家算法例题(P120)
例: 系统中原有三类资源A、B、C和五个进程P1、P2、P3、P4、P5,A资源17,B资源5,C资源20。T0时刻系统资源分配和进程最大需求如下表。
资源 进程 P1 P2 P3 P4 P5 Allocation A B C 2 1 2 4 0 2 4 0 5 2 0 4 3 1 4 Max A B C 5 5 9 5 3 6 4 0 11 4 2 5 4 2 4 1、T0时刻系统是否处于安全状态? 2、是否可以允许以下请求? (1) T1时刻:P2 Request2=(0,3,4) (2 ) T2时刻:P4 Request4=(2,0,1) (3) T3时刻:P1 Request1=(0,2,0)
注:T0 T1 T2 T3时刻是前后顺序,后一时刻是建立在前一时刻的基础上。
1
解:由题可知Need=Max-Allocation
Available A=17-(2+4+4+2+3)=2(原有-分配) 同理 Available B=3,Available C=3
即T0时刻资源分配表如下所示(表中数据顺序均为A B C):
Process Allocation P1 P2 P3 P4 P5
1、判断T0时刻是否安全,执行安全算法找安全序列,过程如下表: Work Need 2 2 1 0 0 6 1 3 4 1 1 0 3 4 7 Allocation Work+Allocation Finish 2 0 4 4 0 5 4 0 2 3 1 4 2 1 2 4 3 7 8 3 12 12 3 14 15 4 18 17 5 20 True True True True True 2 1 2 4 0 2 4 0 5 2 0 4 3 1 4 Max 5 5 9 5 3 6 Need 3 4 7 1 3 4 Available 2 3 3 4 0 11 0 0 6 4 2 5 4 2 4 2 2 1 1 1 0 P4 2 3 3 P3 4 3 7 P2 8 3 12 P5 12 3 14 P1 15 4 18 T0时刻能找到一个安全序列{P4,P3,P2,P5,P1},故T0时刻系统处于安全状态。
2
2、判断T1 T2 T3时刻是否满足进程请求进行资源分配。 (1)T1时刻,P2 Request2=(0,3,4)
//第一步判断条件
①满足 Request2=(0,3,4)<=Need2(1,3,4) ②不满足Request2=(0,3,4)<=Available(2,3,3) 故系统不能将资源分配给它,此时P2必须等待。 (2)T2时刻,P4 Request4=(2,0,1) //第一步判断条件
①满足Request4=(2,0,1)<=Need4(2,2,1) ②满足Request4=(2,0,1)<=Available(2,3,3) //第二步修改Need、Available、Allocation的值
Available=Available-Request4= (0,3,2) Allocation4=Allocation4+Request4=(4,0,5) Need4=Need4-Request4=(0,2,0) //第三步执行安全算法,找安全序列
(注:先写上work,其初值是系统当前进行试分配后的Available(0,3,2),找五个进程中Need小于work的进程,比如Need4<=Work满足,则将P4写在第一行的最前面,同时写出P4的Need和Allocation,以此类推) Work Need Allocation Work+Allocation 4 0 5 4 0 2 3
Finish True True P4 0 3 2 0 2 0 P2 4 3 7 1 3 4 4 3 7 8 3 9 P3 8 3 9 0 0 6 P5 12 3 14 1 1 0 P1 15 4 18 3 4 7 4 0 5 3 1 4 2 1 2 12 3 14 15 4 18 17 5 20 True True True //第四步在T2时刻存在安全序列{P4,P2,P3,P5,P1},则满足Request4
请求,将Request4=(2,0,1)分配给P4。
(3)T3时刻,P1 Request1=(0,2,0) //第一步判断条件
①满足Request1=(0,2,0)<=Need1(3,4,7) ②满足Request1=(0,2,0)<=Available(2,3,3) //第二步修改Need、Available、Allocation的值 Available=Available-Request1= (0,1,2)(在T2时刻基础上) Allocation=Allocation1+Request1=(2,3,2) Need1=Need1-Request1=(3,2,7) //第三步执行安全算法,找安全序列
对于所有Need i均不小于Work(初值是Available (0,1,2)),找
不到安全序列,故系统不能将资源分配给它,P1必须等待。
4
归纳总结——银行家算法解题总结为四步走:
第一步:判断银行家算法中的条件,看是否满足,如果满足跳转第二步(判断条件) ①Request i<=Need i ②Request i<=Available
第二步:试图分配,修改Need、Available、Allocation的值(修改NAA) Available=Available-Request i Allocation i=Allocation i+Request i Need i=Need i-Request i
第三步:执行安全算法,找安全序列(找安全序列)
第四步:找到了安全序列,则此时系统满足进程Pi的请求Request i系统不会进入不安全状态,即可将Request i分配给进程Pi。(真分配)
银行家算法解题流程图:
判断条件 修改NAA 找安全序列 真分配 5