操作系统---死锁的检测和解除

2 篇文章 0 订阅
2 篇文章 0 订阅

内容框架:

引入:之前的死锁预防与避免都是为进程分配资源时施加限制条件或进行检测,不允许死锁发生,而如果为进程分配资源时不采取任何措施(即允许死锁发生),就应提供死锁的检测与解除的方法。

一、死锁检测

检测的要求:为了能检测出死锁,首先肯定要提供一种算法来判断是否进入了死锁状态;而死锁的发生与资源的进程间分配直接相关,因此考虑用某种数据结构来保存资源的请求和分配信息,为算法判断提供参考信息。

这种数据结构采用的就是资源分配图。

(一)资源分配图的介绍

这种图有两类结点:进程结点资源结点。前者用圆圈表示,后者用方框表示一类资源,方框中圆的个数代表此类资源的总个数。有两类边,“进程——>资源”(申请边)表示进程想申请几个资源(每条边代表一个),“资源——>进程”(分配边)表示已为这个进程分配了几个资源(每条边代表一个)

示例:

图中,进程P1已经分得了2个R1类资源,并又申请一个R2类资源;进程P2分得了一个R1资源和一个R2资源,又申请了1个P1类资源。

现在,提供信息的数据结构有了,如何用这个数据结构来检测呢?

(二)检测算法的简单推导分析

由之前的所学内容,若系统剩余资源量>=某进程所需要的,则此进程暂时不会阻塞,可以顺利执行,下图中

P1申请1个R2资源,R2总共2个,已分给P2一个,还剩1个,可以满足P1申请,故P1不会阻塞;P2申请1个R1资源,R1总共3个,已分给P1两个,P2一个,故此时R1无资源,P2申请无法满足而阻塞。另外,考虑到某一进程结束将资源归还后,可能使某阻塞进程被激活,那么这里的P1完成后会激活P2吗?P1结束后,该归还的都归还了,再无“亏欠瓜葛”,相当于P1周围的边全部消除,如

现在再分析P2,知其可被满足,故激活并执行完,消除P2的边。

上例中,最终能消除所有边,就称是可完全简化的,此时一定没有发生死锁(相当于能找到一个安全序列)。而如果最终不能消除所有边,此时就发生了死锁(死锁定理),最终还连着边的那些进程就是处于死锁状态的进程。

由上,可以给出检测方法:

1)在资源分配图中,找出既不阻塞又不是孤点的进程Pi(即找出一条有向边与它相连,且该有向边对应资源的申请数量小于等于系统中已有空闲资源数量)。消去它所有的请求边和分配变,使之称为孤立的结点。
2)进程Pi所释放的资源,可以唤醒某些因等待这些资源而阻塞的进程,原来的阻塞进程可能变为非阻塞进程。根据1)中的方法进行一系列简化后,若能消去途中所有的边,则称该图是可完全简化的。

二、死锁解除

(一)主要方法

1.资源剥夺法。挂起(暂时放到外存上)某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但是应防止被挂起的进程长时间得不到资源而饥饿。

2.撤销进程法(或称终止进程法)。强制撤销部分、甚至全部死锁进程,并剥夺这些进程的资源。这种方式的优点是实现简单,但所付出的代价可能会很大。因为有些进程可能已经运行了很长时间,己经接近结束了,一旦被终止可谓功亏一篑,以后还得从头再来。

3.进程回退法。让一个或多个死锁进程回退到足以避免死锁的地步。这就要求系统要记录进程的历史信息,设置还原点,不容易实现。

(二)牺牲什么样的进程?(对谁动手)

主要考虑以下几个因素:

1.进程优先级

2.已执行时间:选较少的,代价小

3.还要多久完成

4.已使用多少资源:优先牺牲拥有更多资源的进程,因为这样死锁的局面可以尽快解除

5.是交互式还是批处理式:交互式进程与用户交互,用户比较在意,因此优先牺牲批处理式

三、习题巩固

1.解除死锁通常不采用的方法是()
A.终止一个死锁进程    B.终止所有死锁进程
C.从死锁进程处抢夺资源    D.从非死锁进程处抢夺资源

2.采用资源剥夺法可以解除死锁,还可以采用()方法解除死锁
A.执行并行操作     B.撤销进程   C.拒绝分配新资源     D.修改信号量

3.以下有关资源分配图的描述中,正确的是( )。
A.有向边包括进程指向资源类的分配边和资源类指向进程申请边两类
B.矩形框表示进程,其中圆点表示申请同一类资源的各个进程
C.圆圈结点表示资源类
D.资源分配图是一个有向图,用于表示某时刻系统资源与进程之间的状态

4.系统的资源分配图在下列情况下,无法判断是否处于死锁状态的有()
Ⅰ出现了环路   Ⅱ没有环路   Ⅲ每种资源只有一个,并出现环路    Ⅳ每个进程结点至少有一条请求边
A.Ⅰ、Ⅱ、Ⅲ、Ⅳ      B.Ⅰ、Ⅲ、Ⅳ
C.Ⅰ、Ⅳ                   D.以上都不对

【答案】

1.D

解除死锁的方法有,①剥夺资源法:挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程;②撤销进程法:强制撤销部分甚至全部死锁进程并剥夺这些进程的资源。

2.B

资源剥夺法允许一个进程强行剥夺其他进程所占有的系统资源。而撤销进程强行释放一个进程已占有的系统资源,与资源剥夺法同理,都通过破坏死锁的“请求和保持”条件来解除死锁。拒绝分配新资源只能维持死锁的现状,无法解除死锁。

3.D

进程指向资源的有向边称为申请边,资源指向进程的有向边称为分配边,A选项错;矩形框表示资源,其中的圆点表示资源的数目,选项B错;圆圈结点表示进程,选项C错;选项D的说法是正确的。

4.C

出现了环路,只是满足了循环等待的必要条件,而满足必要条件不一定会导致死锁,Ⅰ对;没有环路,破坏了循环等待条件,一定不会发生死锁,Ⅱ错,每种资源只有一个,又出现了环路,这是死锁的充分条件,可以确定是否有死锁,Ⅲ错;即使每个进程至少有一条请求边,若资源足够,则不会发生死锁,但若资源不充足,则有发生死锁的可能,IV对。

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值