计算机操作系统(复习)死锁与饥饿

基本概念:

死锁:进程间因循环等待资源出现的永久性阻塞现象

可抢占性资源:可以从拥有它的进程中剥夺而不会产生任何不良影响的资源(竞争可抢占性资源不会引起死锁问题)

不可抢占性资源:拥有它的进程在主动释放前,不能被其他进程或系统强行剥夺,否则会引起相关计算失效的资源

资源分配图:刻画进程请求和占有资源的一个有效工具。(圆圈:进程节点;方框:资源节点;方框中的圆点:资源实例;圆圈到方框的边:资源请求边)

产生死锁的原因:

  1. 竞争资源(系统提供的资源数目<并发进程所要求的该类资源数)
  2. 进程推进顺序不当(请求和释放资源的顺序不当)

产生死锁的必要条件:

  1. 互斥条件:资源在一段时间内只能由一个进程占有
  2. 请求且保持条件/占有且等待条件:进程在占有一个资源时,提出新的资源请求,但被阻塞,因此它“吃着碗里的,看着锅里的”
  3. 不可抢占条件
  4. 循环等待条件:存在一个封闭的进程-资源链

处理死锁的方法:

  1. 预防死锁:简单、直观、事先预防,通过设置某些限制条件,破坏产生的必要条件来预防
  2. 避免死锁:事先预防,在资源的动态分配过程中,用某种方法防止系统进入不安全状态
  3. 检测和解除死锁:设法发现并解除
  4. 忽略死锁:当处理死锁的代价高昂且发生死锁的概率极低时

预防死锁:

破坏条件2: 要求进程一次性申请到运行所需的全部资源才开始执行(效率不高且影响了系统的并发度)

破坏条件3: 规定一个已经占有了某些资源的进程,再申请资源而得不到满足时,必须释放它已获得的所有资源(复杂、代价大、增加系统开销、降低系统吞吐量)

破坏条件4: 将系统中的资源按类型编号,所有进程必须按照资源序号递增的顺序申请资源,低序号:常用的、普通的;高序号:数量少、贵重资源(不利于新设备类型的增加)

避免死锁:

死锁避免是一种动态机制,它并不限制进程对资源的申请命令,而是把系统的状态分为安全状态(系统能按某种进程推进顺行,为每个进程分配所需资源,直至满足每个进程对资源的最大需求,使每个进程都顺利完成)和不安全状态,对进程所发出的每个资源清求都实行动志检查, 确保系统的终都受正安全状态,避免发生死锁。

不安全状态未必产生死锁

银行家算法

  • resource:系统中每类资源的总数目
  • available:系统中每类资源的可用数目
  • max:每个进程对每类资源的最大需求数目
  • allocation:已分配给每个进程的资源数目
  • need:每个进程尚需的各类资源数目
  • work:系统可提供给进程继续运行所需的各类资源数目,初值与available相同
  • finish:系统是否有足够资源分配给进程(bool类型)

例1: 假设系统中有四个进程{P1, P2,P3,P4}和三类资源{A,B,C},三类资源的数量分别为9、3、6。若To时刻资源分配情况如下表所示,试回答:
(1)该系统是否处于安全状态?
(2)若进程P1提出请求Request1[2,2, 1],系统能否将资源分配给它?
(3)若进程P2提出请求Request2[1, 0, 1], 系统能否将资源分配给它?
(4)若进程P3提出请求Request3[1, 0, 1], 系统能够将资源分配给它?

T0时刻资源分配情况:

T0时刻系统的状态: 

 

need = max - allocation

available = 总资源数-各进程的allocation之和

eg: P1所需的A资源数 = 3-1 = 2

A资源的可用数目 = 9(题目中给的)- (1+2+5)= 1

(1) T0时刻的安全序列:

所以,T0时刻是安全的,存在安全序列{P3,P1,P2,P4}

work 初值 = available (查上一张表)

每当进程完成,释放已分配的资源,work数便增加

(2)进程P1发出资源请求Request[2. 2, 1]后,系统按银行家算法进行检查:
①Request1[2,2, 1]≤Need1[2, 2, 2]:
②Request1[2,2, 1]> Available[1, 1, 2],即系统没有足够的可用资源供其使用。因此,进程P1的资源请求无法满足,故进程P1产生阻塞。

(3)进程P2发出资源请求Request2[1, 0, 1]后,系统按银行家算法进行检查:
①Request2[1, 0, 1]≤Need2[1, 0, 3];
②Request2[1, 0, 1]≤Available[1, 1, 2];
③系统假设满足进程P2的请求,为其分配所需资源,修改后的状态数据如下表所示:

④在进行安全性算法检查时发现,可用资源Available[0,1, 1]已不能满足任何进程的需要,故系统进入不安全状态。因此,进程P2的资源请求无法满足,故进程P2产生阻塞。

(4)进程P3发出资源请求Request3[1, 0, 1]后,系统按银行家算法进行检查:
 ①Request3[1, 0, 1]≤Need3[1, 0, 2];
②Request3[1, 0, 1]<Available[I, 1, 2];
③系统假设满足进程P3的请求,为其分配所需资源,修改的数据结构可表示为:
Available = [1, 1,2] - [1,0, 1] = [0,1, 1]
Need3 = [1, 0, 2] - [1,0, 1] = [0,0, 1]
Allocation3 = [5, 1,1] + [1,0, 1] = [6, 1,2]
④利用安全性算法检查系统是否处于安全状态,如下表所示:

 

由安全性算法检查结果得知,可以找到一个安全序列{ P3, PI, P2, P4}。因此,系统处于安全状态。所以,可以将进程P3所请求的资源分配给它。

习题

例1: 设系统中有5个进程P1、P2、P3、 P4和P5,有3种类型的资源A、B和C,其中资源A的数量是17,资源B的数量是5,资源C的数量是20。T0时刻,系统状态如下表所示。 

(1) T0时刻系统是否处于安全状态,为什么?

(2) T0时刻,进程P2提出资源请求[0,3,4],是否实施资源分配,为什么?

(3) T0时刻,进程P4提出资源请求[2, 0, 1], 是否实施资源分配,为什么? 

 

 

 参考:《计算机操作系统》电子工业出版社

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Cancri e

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

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

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

打赏作者

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

抵扣说明:

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

余额充值