银行家算法的通俗理解

概念

银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。

背景及相关概念介绍

在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。
银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。

  • 安全状态:如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。
  • 安全序列:是指一个进程序列{P1,…,Pn}是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。

比如:有进程{p1, p2, p3, p4},当前占有的资源量为{w1, w2, w3, w4},对应还需要的资源量{n1, n2, n3, n4},系统还剩资源 {v}。若{v>=n1; v+w1>=n2; v+w1+w2>=n3; v+w1+w2+w3>=n4},则{p1, p2, p3, p4}就是一个安全序列,因为v大于n1,进程p1可以执行;进程p1归还资源后,v+w1>=n2,进程p2也可以执行,以此类推,那么所有的进程都可以执行完。

  • 不安全状态:不存在一个安全序列。不安全状态不一定导致死锁。

数据结构

  • 可利用资源向量Available:是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个。
  • 最大需求矩阵Max:这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。
  • 分配矩阵Allocation:这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的 数目为K。
  • 需求矩阵Need。:这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。Need[i,j]=Max[i,j]-Allocation[i,j]

模拟过程

如果系统中有4中类型的资源(A,B,C,D)和5个进程(P1,P2,P3,P4,P5),4种资源的数量分别为(3,12,14,14).
若现在某时刻系统状态如下:
在这里插入图片描述
现在判断是否存在一种安全序列,使得每个进程都能先后成功执行完毕。
通过计算可得:此时系统资源还剩余(1,6,2,2).(剩余 = 总资源 - 已分配资源之和)
在这里插入图片描述
(下次可利用资源 = 该进程已分配资源 + 当前可利用资源) 若当前可利用资源 >= 进程还需要资源量,则进程可以执行,为安全状态;反之不安全
通过上述表格可以看出,可以找到一个安全序列使程序执行完毕(注:安全队列不唯一,只要能找到一个就算是安全队列)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值