【操作系统】死锁避免之银行家算法

引言

银行家算法(Banker’s Algorithm)是由Dijkstra提出,基本思想是仿照银行发放贷款时采取的控制方式而设计的一种死锁避免的算法。

实现思路

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

数据结构

银行家算法定义了一系列的数据结构用来描述系统当前的状态,其中包括:
Available:系统的可用资源量
Max[i]:进程i对资源的最大需求量
Allocation[i]:进程i目前已经得到的资源数量
Need[i]:进程i还需要多少的资源量
Request[i]:进程i当次申请的资源数量

银行家算法的具体步骤

在这里插入图片描述

银行家算法的安全性检查

细心的同学可以发现,上节所展示的银行家算法涉及到了系统新状态的安全性检查,那么如何检查呢?且听我娓娓道来。

数据结构

同样的先定义相关的数据结构:
Work:存放了当前每种可用资源的数量,值是整型
Finish:记录每个进程是否接受过安全检查,值是布尔类型

安全检查的步骤

在这里插入图片描述
如上图所示,事实上,当所有的i都满足Finish[i]==true时,此时总能找到一个包含所有进程的安全序列{P1,P2,P0,…,Pn}。

银行家算法的应用

前面两节已经介绍了银行家算法的实现步骤以及安全检查的流程,最后以一个实例说明银行家算法是如何有效避免死锁的。
假设有如下的三个进程:

目前资源占有量最大资源需求量尚需要资源量
P1143
P2462
P3583

假设系统资源剩余量为2,,可以看到,先把资源分配给P2,P2进程结束后释放资源,P1或P3继续执行就不会出现死锁,因此{P2,P1,P3}是一组安全序列。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值