[操作系统]银行家算法 例题与算法

作用: 防止死锁. 防止所有人都抱着资源不放手等其他资源, 导致死锁.

假设系统有4类资源 A, B, C , D, 5个进程P0, P1, P2, P3 ,P4

Allocation	Max	Available
A	B	C	D	A	B	C	D	A	B	C	D

P0 1 1 0 0 1 5 5 0 1 4 1 0
P1 1 3 5 4 3 3 5 6
P2 0 0 0 2 0 0 1 2
P3 0 6 3 2 0 6 5 2
P4 0 0 1 4 0 4 2 5

  1. 填写需求矩阵
    Need = Max – Allocation

    Need
    A B C D
    P0 0 4 5 0
    P1 2 0 0 2
    P2 0 0 1 0
    P3 0 0 2 0
    P4 0 4 1 1

  2. 如果系统处于安全状态,请列出安全序列。

Work = Available = 1 4 1 0, then if Need ≤ Work, then Work = Work + Allocation

P # Work
A B C D
P2 1 4 1 2
P4 1 4 2 6
P3 1 10 5 8
P0 2 11 5 8
P1 3 14 10 12
安全序列:

小结: 
  1. 根据Max和allocate求出need Need = Max – Allocation
  2. 如果有request过来
    2.1 requist<need?下一步:不安全
    2.2 requist<available?下一步:不安全
    2.3 更新矩阵Allocate-Need-Available
    2.4 执行步骤3
  3. 确定了矩阵Allocate-Need-Available之后, 要求求出安全序列或者问是否安全
    建立新矩阵work
    Work=available;
    While(枚举每一个进程){
    If(need<work){//如果当前空闲(work)的资源能够满足一个进程
    work+=allocate;}//那么就运行这个进程, 直到进程结束并且释放自己占有的进程, 归还到work里面
    }

安全序列的work表格里面是释放了某个p之后的状态. 这个状态将会作为判断下一个的基础

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值