操作系统-死锁-银行家算法

操作系统在解决死锁问题的时候,有四个大的方向,分别是预防死锁避免死锁检测死锁解除死锁。而今天要讲的银行家算法是避免死锁算法的代表。

安全状态:<P2,P1,P3>

处于不安全状态很可能产生死锁

银行家算法的数据结构

  1. 可利用资源向量(Available):系统还可以分配的资源
  2. 最大需求矩阵(Max):进程的最大资源需要
  3. 分配矩阵(Alloction):进程已经获得的资源
  4. 需求矩阵(Need):进程还需要获得的资源

银行家算法

可参考:https://blog.csdn.net/only06/article/details/53381153

系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。

1假设 P1 进程提出请求 K 个资源
2如果 K <= Need,就继续步骤;否则出错,因为请求资源 K 不能超过还需要获得的资源
3如果 K <= Available,就继续步骤;否则出错,因为请求资源 K 不能超过系统还可以分配的资源 Available
4系统试探分配资源,并修改下列数据
Available = Available - K;表示分配给 P1 K 个资源后,还剩多少系统可分配资源
Allocation = Allocation + K;表示 P1 已经获得的资源
Need = Need - K;表示进程 P1 还需要获得的资源
5此时系统执行安全性算法,计算进程是否处于安全性状态(试探分配,为的是检查进程是否处于安全状态,不处理则试探作废)

安全性算法

(1)两个向量
1、工作向量Work:系统提供给进程的各类资源数目
2、Finish:表示系统是否有足够的资源分配给进程,这是一个布尔值。初始化为 false。
(2)在进程集合中找到下述条件的进程
Finish[ i ] = false;Need <= Work 
若找到执行步骤(3),否则执行步骤(4)
(3)进程i执行完后释放资源
Work = Work + Allocation;(这个式子是在安全性算法中用)
Finish [ i ] = true
返回继续执行(2) ,寻找其他的进程分配资源
(4)若所有的 Finish 为 true 则安全

银行家算法实例

实例2:https://wenku.baidu.com/view/e6ae6dd1b9f3f90f76c61bb7.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值