银行家算法题目详解

知识点

(1)Available【j】=k系统中现有Rj类资源K个
(2)Max【i,j】=k进程i需要Rj类资源最大数目为K个
(3)Allocation【i,j】=k表示进程i当前已分配Rj类资源的数目为K个
(4)need【i,j】=k表示进程i还需要Rj类资源数目K个
need=Max-Allocation

安全性算法举例

假定系统中有5个进程{P0,P1,P2,P3,P4}和三类资源{A,B,C}各种资源的数目分别是10,5,7,T0时刻的资源分配情况如下表

在这里插入图片描述
(1)第一步:先利用公式Need=Max-Allocation求出Need
Max矩阵-Allocation矩阵=Need矩阵
在这里插入图片描述
(2)第二步:将Available向量和Need矩阵的各行进行比较
找出Available小于Need的加入安全序列
例如在初始时

(3,3,2)>(1,2,2)(p1)
(3,3,2)>(0,1,1)  (p2)

对应两个进程为P1.P3(两个都可以选择),我先选P1
(3)第三步:释放P1所占的资源
Available=Allocation(P1)+Available
(3 3 2)+(2 0 0)=(5 3 2)
此时Need矩阵更新为
在这里插入图片描述
(4)重复(2)最后得到一个安全序列{P1,P3,P4,P2,P0}

在这里插入图片描述

知识点

设requesti是进程Pi的请求向量
Requesti[j]=K表示进程Pi需要j类资源K个
当Pi发出资源请求后,系统按下述步骤进行检查

 (1)若Request~i~[j]<=Need[i,j]转向步骤(2);否则认为出错,因为他所需的资源数已经超过他所宣布的最大值
 (2)若Request~i~[j]<=Available[j]则转向步骤(3),否则尚无资源,pi
 (3)系统试探着把资源分配给进程pi,并修改下面数据结构中的数值
        Available=Available-Request~i~
        Allocation[i,j]=Allocation[i,j]+Request ~i~[j]
        Need[i,j]=Need[i,j]-Request~i~[j]
 (4)系统执行安全算法,检查此次资源分配后,系统是否处于安全状态,若安全才正式将资源分配给进程P~i~,已完成本次分配;否则将此次的试探分配作废,恢复原来的资源分配状态,让进程P~i~等待

银行家算法举例

假设系统资源的分配和剩余情况如下
在这里插入图片描述
(1)P1请求资源:P1发出请求向量
Request1(1,0,2),系统按银行家算法进行检测:

 	Request1(1,0,2)<=Need1(1,2,2)
 	Request1(1,0,2)<=Available1(3,3,2)
 	资源分配给进程P1,并修改
 	 Available=Available-Request~1~=(2,3,0)
     Allocation1=Allocation1+Request ~1~(3,0,2)
     Need1=Need1-Request~1~(0,2,0)
 	此时资源发生变化
 	Available=(2,3,0)按照安全算法检查是否安全找到安全序列

在这里插入图片描述
找到一个安全序列{P1,P3,P4,P2,P3,P0}
在这里插入图片描述
所以系统是安全的可以立即将P1所申请的资源分配给他,分配后资源如上表。
(2)P4请求资源:
P4发出请求向量Request4(3,3,0),系统按照银行家算法进行检查

 Request4(3,3,0)<=Need4(4,3,1)
 Request4(3,3,0)<=Available4(2,3,0)(不成立)所以让P4等待

作者也是一个大二的小菜鸟,有错误请指出,没错误请收藏以免迷路

猜你喜欢

转载自blog.csdn.net/m0_46315852/article/details/106652753