操作系统之银行家算法解析

操作系统之银行家算法解析(带例题)

利用银行家算法避免死锁,首先我们先来明晰一下银行家算法的数据结构,其中必须设置四个数据结构,Available,Max,Allocation,Need.
Available,又名可利用资源向量,顾名思义即资源中可利用的数目。
Max,最大需求矩阵,Allocation 分配矩阵,Need需求矩阵。

后三者关系即为:Need=Max-Allocation。

首先我们来看一道例题

例题
第一题该状态是否安全?
要求是列出安全性算法检查表
首先本题的最终目的是得到一个表,来看一下
简单讲一下安全性算法的简单理解,就是Available中有没有现在可以满足p0-p4其中一个的需求,也就是可用是否大于某一些需求?可以看出Available满足P0 Need,接下来分配给P0,1C和2D(资源默认ABCD),此时P0可以执行,然后并且会返回给Available3C和2D,此时的Available的资源就变成了1554。
在这里插入图片描述以此类推
用相同的方法可以找出序列P0、P3、P1、P2、P4可以依此执行,并不会出现available<need的情况,故安全序列{P0、P3、P1、P2、P4},故系统是安全的。
附上最后的安全性算法检查表
在这里插入图片描述

下面来看第二题
系统发出了request请求,request请求只出现在了银行家算法里,所以用银行家算法里的四步来分别求解

第一步如果request<=Need才可进行第二步,否则出错
第二步如果request<=Available才可进行第三步,否则出错
第三步分配资源给request
available=available-request;
allocation=allocation+request;
need=need-request;

看题目故
①Request2(1,2,2,2)<=Need2(2,3,5,6)
②Request2(1,2,2,2)<=Available(1,5,2,2)
③系统先假定可为P2分配资源,并修改Available,Allocation2和Need2向量:
Available=(0,3,0,0) Allocation2=(2,5,7,6) Need2=(1,1,3,4)
④进行安全性检查,即第一题的检查,此时对所有的进程,条件Need<=Available(0,3,0,0)都不成立,即Available不能满足任何进程的请求,故系统进入不安全状态。此时当进程P2提出请求Request(1,2,2,2)后,系统不能将资源分配给它。

接下来第三题:
系统立即满足进程P2的请求(1,2,2,2)后,并没有马上进入死锁状态。因为,此时上述进程并没有申请新的资源,并进入阻塞状态。只有当上述进程提出新的请求,并导致所有没有执行完的多个进程因得不到资源而阻塞时,系统才进入死锁状态。

猜你喜欢

转载自blog.csdn.net/qq_43277404/article/details/84501963