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

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

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

要解释银行家算法,必须先解释操作系统安全状态和不安全状态。安全序列是指一个进程序列{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

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









    原文作者:银行家问题
    原文地址: https://blog.csdn.net/a519781181/article/details/53258020
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞