操作系统-死锁

1、死锁的定义

在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率,并提高了了系统的处理能力。然而,多进程的并发执行也带来了新的问题——死锁。所谓死锁,是指多个进程竞争资源而造成的一种僵局(互相等待),若无外力,这些进程都无法向前推进。具体例子可以参照哲学家进餐问题

2、死锁产生的原因

(1)系统资源的竞争

通常系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的要求,使得进程在运行过程中,会因争夺资源而陷入僵局只有对不可剥夺的资源的竞争才可能产生死锁,对可剥夺资源的竞争是不会引起死锁的

(2)进程推进顺序非法

进程在运行过程中,请求和释放资源的顺序不当,也同样会导致死锁。例如,并发进程P1、P2分别保持了资源R1、R2,而进程P1申请了资源R2,进程P2申请了R1时,两者都会因为所需资源被占用而阻塞。
信号量使用不当也会造成死锁。具体例子可以参照生产者-消费者问题中交换生产者进程中P(mutex)和P(empty)次序(或者消费者进程中P(mutex)和P(full)的顺序)

(3)死锁产生的必要条件

产生死锁必须要同时满足以下四个条件,只要其中任意一个条件不成立,死锁就不会发生
互斥条件: 进程要求对所分配的资源进行排他性控制,即某一时刻只允许一个进程访问该资源。
不剥夺条件: 某进程所获得的资源在未使用之前,不能被其他进程强行夺走,即只能由自己主动释放。
请求并保持条件: 进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占用,此时请求进程被阻塞,但对自己已经获得的资源保持不放。
循环等待条件: 存在一种进程资源的循环链,链中每个进程已获得的资源同时被链中下一个进程所请求。
疑问: 直观上来看循环等待条件似乎和死锁的定义一样,为什么不是充分必要条件,而是必要条件,其实不然。我们来看一个资源分配图(举例:P0和P1之间的有向边,表示P0等待P1所持有的资源)。
在这里插入图片描述
我们发现上图中的右图虽然满足循环等待链,但是并不存在死锁,原因是:Pn所请求的资源,既可以从P0获得,也可以从PK(不处于循环等待链中)获得,只需要等PK放弃Pn所请求的资源的时候,Pn就可以得到运行,不必等待P0,所以不存在死锁。我们可以得出结论,如果系统中每类资源都只有一个资源,则资源分配图包含圈就是系统出现死锁的充分必要条件。

3、死锁的处理策略

(1)死锁预防(事先预防)

设置某些限制条件,破坏产生死锁的四个必要条件中的一个或几个,以防止发生死锁,这种方法所设限制较多,所以效率比较低。偷个懒,不打字了,直接贴个图~o( =∩ω∩= )m。
在这里插入图片描述

(2)避免死锁(事先预防)

在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而避免死锁。这种方法所施加的限制条件较弱,可以获得较好的系统系统性能。

安全状态:

指系统能按某种进程推进顺序为每一个进程分配其所需的资源,直至满足每一个进程对资源的最大需求,对每个进程都可按其顺序顺利完成。称其推进顺序为安全序列,若无法找到这种安全序列,则称系统处于不安全状态。系统处于不安全状态,并非意味着系统一定会发生死锁,而是可能进入死锁状态,反之,只要系统处于安全状态,系统变可以避免进入死锁状态。

银行家算法:

银行家算法可以检测当前状态是否可以避免死锁,比较重要,将会另外写一篇博客总结。

(3)死锁检测和解除

先介绍一个概念叫做资源分配图,直接从书上截取了一段。
在这里插入图片描述
然后介绍一个东西叫做死锁定理

死锁定理

简化资源分配图可检测系统状态S是否为死锁状态。简化方法如下:
在资源分配图中,如果某个进程的所有请求边,所请求的资源出度小于该种资源的数量,那么这个进程就可以从纠缠的图中得到解脱。删除该进程的分配边和请求边,如果所有按照某种顺序可以删除图中的所有边,则这个图可以完全简化的。S为死锁的条件是:S的资源状态图是不可完全简化的

死锁解除

一旦检测出死锁,就应立即采取相应的措施来解除死锁。死锁解除的主要方法有:
(1)资源掠夺法。挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他死锁进程。但应防止被挂起的的进程长时间得不到资源而处于资源匮乏的状态。
(2)撤销进程法。强制撤销部分甚至全部死锁进程并剥夺这些进程的资源。撤销原则可以按进程优先级和撤销进程代价的高低进行。
(3)进程回退法。让一(或多)个进程回退到足以回避死锁的地步,进程回退时自愿释放资源而非被剥夺。要求系统保持进程的历史信息,设置还原点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值