银行家算法解析

利用银行家算法避免死锁的原理:

当一个进程申请资源的时候,操作系统通过银行家算法先试探分配给该进程资源,然后通过安全性算法判断分配后的系统是否处于安全状态,若不安全则分配作废,让该进程继续等待,否则分配资源给进程。

银行家算法的四个数据结构:

1.可利用资源向量:Available
2.最大需求矩阵:Max
3.分配矩阵:Allocation
4.需求矩阵:Need

银行家算法:

当进程申请资源后,系统进行如下检查:
1,如果申请的资源数量<=需求的资源数量(Request<=Need),转步骤2,否则不分配。
2,如果申请的资源数量<=可利用资源数量(Request<=Available),转步骤3,否则不给分配。
3,系统把资源试探分配给进程,修改数据结构中的数值:
1)当前可利用资源数量=可利用资源数量-进程请求资源数量
(Available=Available-Request)
2)当前分配资源数量=已分配资源数量+进程请求资源数量
(Allocatin=Allocation+Request)
3)当前需求资源数量=需求资源数量-进程请求资源数量
(Need=Need-Request)
4,系统执行安全行算法,检查此次资源分配后系统是否处于安全状态,若安全则分配该资源给进程,否则分配作废,回复原来状态,让该进程等待。

安全性算法:

1,设置两个向量:Work(工作向量,等于可利用资源数量),Finsh(是否能够完成分配,初始时Finsh=false)。
2,从进程集合中找到一个能满足下述条件的进程:(如果有多个满足,就可能会使安全序列不唯一)
进程需要的资源数量<=可利用资源数量(Need<=Work)
若找到,转步骤3.
3,进程获得资源后,就可顺利执行到最后释放所有资源,修改数据:
当前可利用资源数量=可利用资源数量+该进程已分配的资源数量
(work=work+allocation)
finsh=true;
转步骤2直至进程集合中没有进程。
4,如果所有进程的Finsh=true,则表示系统该时刻处于安全状态,否则不安全。

举个栗子:

在银行家算法中,若出现下述资源分配情况:

在这里插入图片描述
(1)该状态是否安全? (2)若进程P2提出请求Request(1,2,2,2)后,系统能否将资源分配给它?

(1)利用安全性算法对上面的状态进行分析(见下表),找到了一个安全序列{P0,P3,P4,P1,P2},故系统是安全的。
在这里插入图片描述
(2)P2发出请求向量Request(1,2,2,2),系统按银行家算法进行检查:

①Request2(1,2,2,2)<=Need2(2,3,5,6)
②Request2(1,2,2,2)<=Available(1,6,2,2)
③系统先假定可为P2分配资源,并修改Available,Allocation2和Need2向量:
Available=(0,4,0,0)
Allocation2=(2,5,7,6)
Need2=(1,1,3,4)
此时再进行安全性检查,发现 Available=(0,4,0,0) 不能满足任何一个进程,所以判定系统进入不安全状态,即不能分配给P2相应的Request(1,2,2,2)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值