操作系统——银行家算法

银行家算法


一种解决死锁的方案


基本思想:

计算机银行
系统资源贷款
申请资源的进程借款人
操作系统银行家

模拟银行贷款,银行家不可能满足所有借款人所要求的借款总额,所以当某借款人提出借款时,银行家必须判断如果将款借出,会不会导致资金周转不灵。若会,则不借;否则,就借。


算法过程:

对每一个资源申请进行检查,看如果满足该申请是否会导致不安全状态。若是则不满足该申请,否则满足。


单项资源的银行家算法:

系统状态如下表:


进程名已有数目最大需求尚需数目
a143
b253
c165
d275
剩余资源4

观察表可得,此时系统剩余资源为4,而a、b尚需资源为3,可以满足,所以就可以先分配给a,待a进程执行完成后回收资源,剩余资源就会变为5。

如果一开始把剩余资源分给c或者d,c和d获得资源并没有满足它们的最大需求,所以就不会执行完成释放资源,此时所有进程都无法执行下去,剩余资源为0(状态不安全),陷入了死锁的局面。

银行放贷——>借款人收到钱后完成项目——>借款人还贷并附带利息——>银行用收到的利息和贷款继续放贷良性循环


多项资源的银行家算法:
  1. 准备工作

    • 设置资源的已分配矩阵R
    • 设置尚需资源分配矩阵Q
    • 设置可分配资源向量available
  2. 此时某进程对某一种资源提出申请,假定预先分配给它

  3. 修改1中的信息(矩阵和向量)

  4. 在矩阵Q中找到一行,使该行向量小于等于available

    • 若不存在——说明没有进程能够获得全部资源运行到完成
  5. 假设被选中的那一行的进程获得资源并运行结束,将它占有的资源全部加入向量available

    • 满足尚需资源矩阵的一行之后,将已分配矩阵对应的行加入到available向量
  6. 重复4、5,直到所有进程都完成,则系统是安全的,可以分配;或者发生死锁,则预先分配是不安全的,应不予分配


例:假设有四类资源R1、R2、R3、R4;五个进程a、b、c、d、e;
已分配矩阵尚需资源矩阵
在这里插入图片描述在这里插入图片描述
最大需求矩阵available向量
在这里插入图片描述(2,2,1,2)
  1. 对比available向量和尚需资源矩阵,available向量目前只能满足c进程;
  2. 满足c进程之后,c行在尚需资源矩阵Q里变为0,available向量变为(2,2+3,4+1,2)=(2,5,5,2);
  3. 可以满足进程a或e,进而满足b或d,直到全部结束;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值