预防死锁的方法以及死锁的检测与解除

3.6 预防死锁的方法

一、预防死锁

二、系统安全状态

三、利用银行家算法避免死锁

预防死锁和避免死锁这两种方法,实质上都是通过施加某些限制条件,来预防发生死锁:
两者的区别主要在于:
  • 预防死锁:
    施加的限制条件比较严格,往往会影响进程的并发执行。
  • 避免死锁:
    施加的限制条件比较宽松,这给进程的运行提供了较为宽松的环境,有利于进程的并发执行。

一、预防死锁

产生死锁的必要条件
  • 1、互斥条件
  • 2、请求和保持条件
  • 3、不剥夺条件
  • 4、环路等待条件
预防死锁的方法是使四个必要条件中的第2,3,4条件之一不能成立,来避免发生死锁。
必要条件1,因为它是由设备的固有条件所决定的,不仅不能改变,还应加以保证。

1、摒弃“请求和保持”条件

系统规定所有进程在开始运行之前,都必须一次性的申请其在整个运行过程中所需的全部资源。此时若系统有足够的资源就分配给该进程,该进程在运行期间不会提出资源要求,从而摒弃了“请求”条件。若系统没有足够的资源分配给它,就让该进程等待。因而也摒弃了“保持”条件,从而避免发生死锁。

  • 优点:算法简单、易于实现且很安全。
  • 缺点:资源浪费严重和进程延迟运行。

2、摒弃“不剥夺”条件

系统规定,进程是逐个地提出对资源的要求的。当一个已经保持了某些资源的进程,提出新的要求不被满足时必须释放它已经保持的所有资源,待以后需要时再重新申请。从而摒弃了“不剥夺”条件。

  • 某一进程已经占有的资源,在运行过程中会被暂时释放掉,认为是被剥夺了。
  • 实现起来比较复杂且付出很大代价。可能会前功尽弃,反复申请和释放等情况,延长了周转时间,增加系统开销。

图片1

与前两种策略比较,资源利用率和系统吞吐量都有较明显的改善。但也存在着严重问题:
  • 1、为资源编号限制新设备的增加;
  • 2、进程使用设备顺序与申请顺序不同,浪费资源
  • 3、限制用户编程自由。

二、系统安全状态

在预防死锁的几种方法中,都施加了较强的限制条件;在避免死锁的方法中,所施加的限制条件较弱,又能获得令人满意的系统性能。
该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可避免发生死锁。

思路:

允许进程动态地申请资源,但在资源分配前,应先计算资源分配的安全性,若此次分配不会导致系统进入不安全状态,则将资源分配给进程,否则,令进程等待。

安全状态

图片2

图片3

1、是否可以找到一个进程推进执行的顺序,从而满足每一个进程资源的最大需求,如果能则系统安全,否则不安全。
  • T0时刻:可用的有3台,可以先分配给进程B2台,然后B可以执行,执行完成以后释放4台,加上可用的1台,再分配给A,A执行完成以后,释放全部资源10台,再拿出9台可以分配给C。
  • 所以系统存在一个合理的进程执行的推进顺序:B-A-C,因此在T0时刻系统是安全的。
2、T0以后,如果C再申请一台,那么剩下可用的还有两台,则这两台可以分配进程B,B执行完以后释放4台,此时A需要5台,C需要6台,进程A和C都不能继续执行,就无法进行分配,这样系统是不安全的。

三、利用银行家算法避免死锁

图片4

图片5

图片6

图片7

3、安全性算法

图片8
图片9

银行家算法例题

图片10

(1)判断T0时刻的安全性

1、初始时work= available,finish = FALSE
2、从进程集合中找到一个能够满足下列条件的进程:
 finish[i] = false, need[i,j] <= work,则 P1,P3满足条件。
 假设让P1先执行,从【3,3,2】中拿出【1,2,2】分配给P1,那么P1可以执行,执行完以后释放资源,
 则work=【2,1,0】+【3,2,2】=【5,3,2】且finish[1] = true。
 从P0,P2,P3,P4中找出满足finish[i] = false, need[i,j] <= work的条件。
 发现P3和P4满足条件,假设让P3先执行。
 则从【5,3,2】中拿出【0,1,1】分配给P3,P3可以执行,执行完以后释放资源。
 则work = 【5,3,2】+【2,1,1】=【7,4,3】,且finish[3] = TRUE。
依据该思路继续执行,直到所有进程全部完成!

图片11

因为所有进程的finish=TRUE,说明系统是处于安全状态的
存在一个安全执行推进的进程序列{P1,P3,P4,P0,P2},所以系统在T0时刻是安全的。

(2)T0时刻P1请求资源发出请求向量Request1(1,0,2),系统能否分配给它?

图片12

此时T0时刻新的资源分配表为

图片13

再利用安全性算法检查此时系统是否安全,如下所示:

图片14

由所进行的安全性检查可知,可以找到一个安全序列{P1,P3,P4,P0,P2},因此系统是安全的,可以立即将P1所申请的资源分配给它。

图片15

图片16
图片17

3.7 死锁的检测与解除

一、死锁的检测
二、死锁的解除

一、死锁的检测

当系统为进程分配资源时,若未采取任何限制性措施,则系统必须提供检测和解除死锁的手段,为此系统必须:
  • 1、保存有关资源的请求和分配信息;
  • 2、提供一种算法,以利用这些信息来检测系统是否已进入死锁状态。
    图片18
方框指向进程是分配资源,进程指向方框是请求资源。

图片19

二、死锁的解除

当发现进程死锁时,便应立即把它们从死锁状态中解脱出来。常采用的方法是:
  • 1、剥夺资源:从其他进程剥夺足够数量的资源给死锁进程以解除死锁状态。
  • 2、撤销进程:最简单的是让全部进程都死掉;温和一点的是按照某种顺序逐个撤销进程,直至有足够的资源可用,使死锁状态消除为止。
  • 21
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loveCC_orange

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值