全文分四部分:
一、什么是银行家算法?
二、银行家算法中的数据结构
三、银行家算法自然语言描述
四、银行家算法流程图表示
五、银行家算法举例
一、什么是银行家算法?
用于避免死锁情况的出现,每一个新进程进入系统时,必须声明需要每种资源的最大数目,其数目不能超过系统所拥有的的资源总量。当进程请求一组资源时,系统必须首先确定是否有足够的资源分配给该进程,若有,再进一步计算在将这些资源分配给进程后,是否会使系统处于不安全状态如果不会才将资源分配给它,否则让进程等待。
二、银行家算法中的数据结构
为了实现银行家算法,在系统中必须设置这样四个数据结构:
1、Available向量:表示可利用资源的数量,初值为系统每类资源总数量。Availabeli]=K
2、Max矩阵:每个进程对每类资源的最大需求数量。Max[i,j]=K
3、Allocation矩阵:每个进程已分配的每类资源数量。Allocation[i,j]=K
4、Need矩阵:每个进程尚需要的每类资源数量。Need[i,j]=Max[i,j]-Allocation[i,j]
三、银行家算法自然语言描述
四、银行家算法流程图表示
五、银行家算法举例
首先看P0行,A、B、C总需求量7,5,3 P0进程对已分配资源分别是0 1 0,需求为 7 4 3 ,此时可用资源3 3 2
Need=Max - Allocation,根据这个可以算出P1、P2、P3、P4进程的Need
Work向量,Finish向量,开始Work向量是等于Available向量也就是当前剩余的资源,我们就从列表中找哪个Work向量小于Need向量,P1的Need是1 2 2,而可用资源数目Available是3 3 2 ,P1进程需求满足,因此P1进程可以执行,Work+Allocation代表完成后的资源数。然后继续判断其他进程,如上表示例
最后进程序列为 <P1,P3,P4,P2,P0>,因此是安全的。
另外,安全序列可能会不唯一
情况一:
情况二:
拒绝: