您的位置:首页 > 理论基础

那时候的银行家算法 处理计算机思索避免问题

2016-11-21 12:00 169 查看
银行家算法:二维表格解决方法

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

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

安全状态

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

不安全状态

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

 

 

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

 

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

 

 



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

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



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

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



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

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: