先说一下银行家的算法:设进程cusneed提出请求request [i],则银行家算法按如下规则进行判断。(1)如果request [cusneed] [i]<= need[cusneed][i],则转(2);否则,出错。(2)如果request [cusneed] [i]<= **ailable[i],则转(3);否则,等待。(3)系统试探分配兹源,修改相关数据:**ailable[i]-=request[cusneed][i];allocation[cusneed][i]+=request[cusneed][i];need[cusneed][i]-=request[cusneed][i];(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。=================================================题目中的计算过程:先算出每个进程还需要多少进程才能满足,即request的值 = need - allocation进程名 allocation need request **ailable abc abc abc abcp1 4 0 5 4 0 11 0 0 6 2 3 **2 4 0 2 5 3 6 1 2 4p3 2 1 4 4 2 5 2 1 1p4 2 1 2 5 5 9 3 4 7p5 3 1 3 4 2 4 1 1 1第一题a项p3 p1 p4 p2 p5先分配给p3,其request(2,1,1) < **ailable(2,2,3) 满足,分配兹源等待p3完成,p3进程完成之后,**ailable = (2,1,4) + (2,3,3) = (4,4,7)然后分配给p1,其request(0,0,6) < **ailable(4,4,7),可以满足资源,分配兹源给p1,p1完成任务释放资源**ailable = (4,0,5) +(4,4,7) = (8,4,12)接着p4,request(3 4 7) < **ailable(8,4,12),可以满足资源,分配兹源给p4,p4完成任务释放资源**ailable = (2,1,2) +(8,4,12) = (10,5,14)接着p2,request(1 2 4) < **ailable(10,5,14)可以满足资源,分配兹源给p4,p4完成任务释放资源**ailable = (4,0,2)+ (10,5,14) = (14,5,16)最后p5,request(1 1 1) < **ailable(14,5,16)可以满足资源,分配兹源给p4,p4完成任务,资源全部释放,变为(3 1 3 )+ (14,5,16) = (17,6,19)所以a是安全序列。同理分析b p1 p3 p5 p2 p4,先分配给p1的话request(0,0,6) > **ailable(2,3,3),c资源不满足,所以该序列不安全。分析c项p4 p2 p3 p5 p1,先分配给p4, request(3,4,7) > **ailable(2,3,3),abc资源都不满足,该序列不安全。分析d项p2 p3 p1 p4 p5,先分配给p2,request(1,2,4) > **ailable(2,3,3),c资源不满足,所以该序列不安全。第二题,分析方法跟上面的一样,只是比较费时。如果单选的话,看一下答案,d项,先分配给p4,显然完成p4还需( 3 4 7) ,其大于 **ailable,所d项不安全。 20210311