解决死锁——银行家算法透析

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
避免死锁算法中最有代表性的算法是Dijkstra E.W 于1968年提出的银行家算法:

下面我们将从例题中一点一点的分析:
在这里插入图片描述

解题:
第一步:求出初始剩余资源数

图中有四种资源,分别是 A、B、C、D。题中只是给出了每个资源的总数量,没有给出剩余资源数(一般题中会给出),那么我们将它求出,每个资源总数减去每个资源已被分配资源数就得到各自资源的剩余资源数。

这里得出的是:
A 资源已被分配2,
B资源已被分配6,
C资源已被分配12,
D资源已被分配12。

那么总数量减去已被分配的得出:
A资源 3-2=1
B资源 12-6=6
C资源 14-12=2
D资源 14-12=2

最后得到初始剩余资源数 (1,6,2,2)
第二步:求出各个进程的需求资源数量
在这里插入图片描述

第三步:比较

我们先检查A选项

P1 P4 P5 P2 P3

第一个是 进程P1
我们可以在第二步看出
进程P1需求的资源数量为 (0,0,1,2)
那么初始初始剩余资源数 (1,6,2,2) 每个值大于 (0,0,1,2),那么P1是安全序列。

第二个是 进程P4
我们将上一个进程的剩余资源数 (1,6,2,2) 加上上一个进程的已分配资源数量 (0,0,3,2) 得出剩余资源量 (1,6,5,4)
将剩余资源量 (1,6,5,4) 与P4需求资源量 (0,6,5,2) 相比较,每个值都大于。那么P4是安全序列

第三个是 进程P5
我们将上一个进程的 剩余资源量 **(1,6,5,4)**加上上一个进程的已分配资源数量 **(0,3,3,2)**得出剩余资源数
(1,9,8,6)
将剩余资源数 (1,9,8,6) 与P5需求资源量 (0,6,5,6) 相比较,每个值都大于。那么P5是安全序列

第四个是进程P2
我们将上一个进程的 剩余资源量 **(1,9,8,6)**加上上一个进程的已分配资源数量 **(0,0,1,4)**得出剩余资源数
(1,9,9,10)
将剩余资源数 **(1,9,9,10)**与P2需求资源量 (1,7,5,0) 相比较,每个值都大于。那么P2是安全序列

最后一个是进程P3
我们将上一个进程的 剩余资源量 **(1,9,9,10)**加上上一个进程的已分配资源数量 **(1,0,0,0)**得出剩余资源数
(2,9,9,10)
将剩余资源数 **(2,9,9,10)**与P3需求资源量 (2,3,5,6) 相比较,每个值都大于。那么P3是安全序列

那么A选项正确

按照这个思路,B选项也正确,B选项只是将进程P5跟P2调换了位置。

其余不正确。

总结:

剩余的资源数大于或者等于进程需求的资源数才是安全序列。

剩余的资源数: 剩余资源数量=资源的数量-已分配资源数量
需求资源数: 最大资源需求量-已分配资源数量








作者:Vam的金豆之路

主要领域:前端开发

我的微信:maomin9761

微信公众号:前端历劫之路