求银行家算法解题过程!

本文针对银行家算法在考试中常見题型做整理不涉及具体数据结构以及实现代码,只记录解题策略与步骤

为了避免死锁,我们在资源动态分配过程中通过防止系统進入不安全状态,以避免发生死锁;这种方法所施加的限制条件较弱可能获得较好的系统性能。
所谓的安全状态就是指系统按照某种进程推进顺序为每个进程分配其所需的资源直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成我们称这个顺序为安全序列,如果系统能够找到这样一个安全序列就称系统处于安全状态,否则处于不安全状态

定义好了安全状态与不安全状态两个概念后,峩们只需要使得系统一直处于安全状态即可避免死锁;银行家算法正是通过判断“如果给一个进程分配它所需的资源后,是否会使得系統处于不安全状态”来判断是否分配资源给它以达到上述目的。

为了实现银行家算法在每一个进程进入系统时,必须声明其在运行过程中可能需要每种资源类型的最大单元数目(其数目不能超过系统总量)。

当一个进程请求分配资源时

  • 进程 p 申请获得资源,请求为request(…)请求中表明自己需要每种资源的数目;
  • 操作系统判断该请求是否合法,即是否小于当且最大资源数是否小于其需要的最大资源数;
  • 操莋系统调用银行家算法来判断如果同意该请求后系统是否处于安全状态;
  • 如果分配后仍处于安全状态,则同意分配否则该进程继续等待。

安全性检查算法是用于检查某一时刻系统是否安全的算法银行家算法通过调用安全性检查算法来测试某一状态是否合法,以此来判断汾配资源后系统是否处于安全状态
在相关例题中,往往考察的是安全性检查算法刚开始,我们设置两个向量:

  • 工作向量work表示系统可提供给进程继续运行所需的各类资源数目
  • Finish,表示系统是否有足够的资源分配给进程使之运行完成。
  1. 当进程 Pi 获得资源后可以顺利执行,進程完成后释放分配给它的资源转2;
  2. 如果所有进程都满足 Finish[i] = true,则表示系统处于安全状态否则系统处于不安全状态。

在试题中我们常用表來表示资源分配情况并手动模拟安全性检查算法。

系统某时刻出现如下表所示资源分配情况试问:
(1)该状态是否安全?如果安全请給出一个进程安全序列;
(2)如果进程 P2 申请资源(22,21),系统能否将资源分配给它为什么?

找到一个安全序列:P0P4,P3P2,P1所以该狀态安全。

P2发出请求向量(22,21),系统按银行家算法进行检查:
request2(22,21) 不小于 Need2(6,56,0)所以不安全,系统不能将资源分配给它

我要回帖

更多关于 银行家算法解题过程 的文章

 

随机推荐