银行家算法(1):二维表格解决方法

银行家算法(1):二维表格解决方法

银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。

要解释银行家算法,必须先解释操作系统安全状态和不安全状态。安全序列是指一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。


安全状态

  如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。

不安全状态

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

 

 

     在操作系统课程中遇到了要处理“银行家算法”的问题,参考了网上的一些介绍,发现用表格处理的方法很简单方便,并且也容易用代码去实现。

 

     我们可以建立一个表格:每列数据表示每次交易各个参与者的限额。这个表格第一列列出银行家和客户数目,每发生一次交易,增加一列,同时将银行家和发生交易的客户的限额减小。直到银行家的限额小于某个客户的限额时,交易不能继续进行。我们可以从表格中分析得到哪个申请可以被允许,哪个要被挂起,如果能分配成功则全部的请求允许,否则便发生死锁。如下图所示:

 

 

http://blog.csdn.net/libenqing

下面用这种方法去解决实际的问题,例如在下面这道系统分析员的考试题目:

操作系统分配资源时的一个重要考虑是避免死锁的发生.若系统中有同类资源 16 个,由四个进程 P1 、P2 、P3 和 P4 共享该资源。已知 P1 、P2 、P3 、P4 所需的资源总数分别为 8 、5 、9 、6 。各进程请求资源的次序如下表,若系统采用银行家算法为它们分配资源,那么_____依次申请分配会使系统进入不安全状态。

http://blog.csdn.net/libenqing

A(3,4)   B(3,5)   C(4,5)   D(5,6)

我们按照提到的方案建立下面这个表格:

http://blog.csdn.net/libenqing

分析:从图中可以看出,当银行家允许客户3的请求后,银行家拥有的资源只有1个,这时银行家只能满足客户2的请求,所以第4个和第5个资源请求会被银行家挂起,然后第6个资源请求(客户2)会被允许。只能等到P2结束运行释放资源后,银行家才会允许接下来的其他请求,在这种分配情况下系统不会发生死锁。

不过,如果在允许客户3的请求后,接着允许请求4或请求5,但请求4和请求5需要的不止一个资源,这时系统就会进入死锁状态。所以答案选择C

这只是理论上的分析,接下来要用代码去模拟下银行家算法的具体分配工作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值