死锁
1. 资源
在计算机系统中有一些对象,当两个或多个进程同时使用时会造成系统瘫痪,操作系统需要具有对这种对象排他访问的能力。我们把这些需要排他使用的对象称为资源。一些类型的资源会有若干个相同的实例,其中任何一个都可以来满足对资源的请求。简单来说,资源就是随着时间的推移,必须能获得、使用及释放的任何东西。
资源分为可抢占资源和不可抢占资源:
- 可抢占资源:可以从拥有它的进程中抢占而不会产生任何副作用。
- 不可抢占资源:在不引起相关的计算失败的情况下,无法把它从占有它进程处抢占过来。
死锁和不可抢占资源有关,有关可抢占资源的潜在死锁通常可以通过在进程之间重新分配资源而化解。
2. 死锁概述
如果一个进程集合中的每个进程都在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁的。
大多数情况下,每个进程都在等待一个资源,而该资源又在被其他等待资源的进程占有,由于这个等待的进程集合中的任何一个进程都无法释放资源,就会造成死锁,这种类型的死锁称为资源死锁。
3. 资源死锁的条件
资源死锁有四个必要条件:
- 互斥条件:每个资源要么已经分配给一个进程,要么可以被使用。
- 占有和等待条件:已经得到了某个资源的进程可以再请求新的资源。
- 不可抢占条件:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。
- 环路等待条件:死锁发生时,系统中一定有由两个或两个以上的进程组成的一条的环路,该环路中的每个进程都在等待着下一个进程所占有的资源。
死锁发生时,上述四个条件一定要同时满足,只要有一个条件不成立,死锁就不会发生。
4. 处理死锁的策略
有四种处理死锁的策略:
4.1 鸵鸟算法
忽略该问题,假装根本没有问题发生。如果死锁发生的频率很低,甚至超过了硬件故障或操作系统故障的频率,那么该方法或许可以考虑。
4.2 死锁检测和死锁恢复
系统不试图阻止死锁的产生,而是允许死锁发生,当检测到死锁发生时,采取措施进行恢复。
死锁检测有两种方法:
- 资源分配图:适用于每种类型一个资源的死锁检测。
- 矩阵检测法:适用于每种类型多个资源的死锁检测。
死锁恢复的方法:
- 资源抢占恢复:时所发生时,将某个资源变为可抢占资源。在不通知原进程的情况下,将某一资源从一个进程强行取走给另一个进程使用,接着又送回,这种做法是否可行主要取决于资源本身的特性。
- 利用回滚恢复:周期性的将文件状态写入检查点,当发生死锁时,可以对检查点进行检查并恢复。但是死锁发生时到检查点之间的工作会全部丢失。
- 杀死进程恢复:缺点是有些进程第一运行会影响第二次运行的结果。
4.3 死锁避免
在该方法中需要定义一种状态:如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。在分配资源前对状态进行检查可以避免死锁的发生。银行家算法就是著名的死锁避免算法,但一般情况下,该方法缺乏实际价值,因为很难在进程运行前就知道对每种资源需求的最大值。
4.4 死锁预防
破坏四个死锁必要条件的任意一个。
- 破坏互斥条件:很难实现,有可能造成资源混乱。
- 破坏占有和等待条件:规定所有进程请求资源时,要么获得全部资源,要么不进行分配。与银行家算法一样缺点是很难在进程运行前直到需要多少资源。
- 破坏不可抢占条件:与资源特性有关,有些资源的抢占不可行。
- 破坏环路等待条件:将资源编号,所有请求必须按照资源编号顺序进程申请。
参考书目:现代操作系统第三版
1723



被折叠的 条评论
为什么被折叠?



