死锁(Deadlock)
- 死锁的定义:如果一组进程中的每一个进程都在等待仅由该进程中的其他进程才能引起的时间,该组进程是死锁的。
死锁产生的原因:通常是源于多个进程对资源的竞争,对不可抢占资源和可消耗资源进行竞争时会引起死锁。
- 产生死锁的四个必要条件,缺少任意一个条件,死锁就不会产生。
- 互斥条件 即在一段时间内,某资源在只能被一个进程占用。如果此时还有其他进程请求该资源,则请求进程只能等待该使用完后释放资源。
- 请求和保持条件 进程已经保持了至少一个资源,同时提出了新的资源请求,而该资源又已经被其他资源占用,此时进程被阻塞,且对自己已占有的资源保持不放。
- 不可抢占条件 进程已经保持了至少一个资源,同时提出了新的资源请求,而该资源又已经被其他资源占用,此时进程被阻塞,且对自己已占有的资源保持不放。
- 循环和等待条件 进程已获得的资源在为使用完之前不能被强占,只能在进程使用完吼自己释放
当发生死锁时,必定存在一个“进程—资源”的循环链,A0占用A1的资源、A1占用A2的资源、…、An占用A0的资源
- 处理死锁的方法
- 预防死锁
通过破坏产生死锁的四个必要条件中的一个或几个。(互斥条件是非共享设备所必须的,不仅不能改变,还应加以保证,因此主要是破坏产生死锁的请求和保持条件、不可抢占条件、循环和等待条件)
-
- 破坏“请求和保持”条件
第一种协议:规定所有进程在开始运行之前,必须一次性地申请其在整个运行过程中所需的所有资源。
缺点:(1)资源被严重浪费,严重地恶化资源利用率;
(2)使进程经常发生饥饿现象。
第二种协议:允许一个进程只获得运行初期所需的资源后,便开始运行。
-
- 破坏“不可抢占”条件
当一个已经保持某些不可抢占资源的基础,提出新的资源请求而不能得到满足时,它必须释放已经保持的所以资源,待以后需要时再重新申请。
缺点:可能因为反复的申请和释放资源导致进程的执行被无限推迟,延长周转时间,增加系统开销,降低系统吞吐量。
-
- 破坏“循环等待”条件(输出设备>运算设备>输入设备)
对系统所有资源类型进行线性排序,并赋予不同的序号
磁盘驱动器、 硬盘驱动器、 打印机
分别赋予 1 5 9
某进程已申请到高序号进程资源,若想申请低序号资源时,它必须释放所有相同序号和更高序号的资源,才能申请序号低的资源。
与前两种策略相比,资源利用率和系统吞吐量有较明显的提升。
缺点:(1)限制新类型设备的增加;
(2)作业使用各类资源的顺序与系统规定的顺序不同
(3)限制用户简单、自主地编程
2.避免死锁
在资源动态分配过程中,防止系统进入不安全状态(安全状态指系统能按某种进程推进顺序(P1、P2、…、Pn)为每个进程Pi分配其所需资源,此时称(P1、P2、…、Pn)为安全序列,),以避免发生死锁。
最大需要资源 | 已占用资源 | 空闲资源 | |
P1 | 12 | 5 | 3 |
P2 | 3 | 2 | |
P3 | 7 | 4 |
此时安全序列是(P2,P3,P1),T0时刻分配1个空闲资源给P2(2+1),当P2完成时释放3个资源,再将这些资源提供给P3(4+3),待P3完成时有7+2个空闲资源,分配给P1(5+7),所有进程都能顺利完成。
不安全序可以有:T0时刻分配3个资源给P1,此时其他两个进程永远也得不到满足,即无法找到一个安全序列。
银行家算法
3.检测死锁
资源分配图
死锁定理
4.解除死锁
————参考《计算机操作系统(第四版)》