2.4 死锁资源数计算
本课核心知识点整理
本节导学
死锁是并发进程资源竞争的极端结果:两个或多个进程相互等待对方占有的资源,谁都无法继续运行。字幕里用“拼积木差最后一块”的例子解释:每个人手里都拿着一部分资源,又都等别人手里的资源,如果大家都不放手、资源也不能被抢走,就会卡住。
本节有两个考点:一是死锁四个必要条件;二是同类资源数量的计算。资源数公式不要机械背,要从“最悲观分配”推出来。
死锁四个必要条件
| 条件 | 本节的理解 |
|---|---|
| 互斥 | 资源同一时刻只能一个进程用 |
| 保持和等待 | 进程占着已有资源,还继续等待新资源 |
| 不剥夺 | 已分配资源不能被强行拿走 |
| 环路等待 | 进程之间形成闭环等待 |
形成死锁时这四个条件必然同时具备;破坏任意一个条件都可以预防死锁。反过来,题目若只是说四个条件具备,要理解为系统进入“可能发生死锁”的风险状态,是否已经死锁还要看具体资源分配图或等待关系。
互斥的反面是共享。如果一个资源可以任意共享,例如空气,就不会因为排队独占而死锁。保持和等待表示进程拿着已有资源不放,同时继续等待新资源。不剥夺表示系统不能强行把已分配资源抢回来。环路等待表示等待关系形成闭环,例如 P1 等 P2 的资源,P2 又等 P1 的资源。
最悲观分配模型
若有 m 个进程,每个最多需要 w 个同类资源,最悲观情况是每个进程都已经拿到 w-1 个资源,但都还差 1 个。
此时可能死锁的资源数是:
只要再多 1 个资源,就一定能让至少一个进程完成并释放资源,所以不可能死锁的下界是:
注意题目问的是“可能发生死锁”,还是“不会发生死锁”。公式本身不难,难点在审题。
公式为什么成立
假设有 5 个进程,每个最多需要 4 个同类资源。最危险的分配方式是每个进程都拿到 3 个资源,都还差 1 个才能完成。此时系统一共分出:
如果系统只有 15 个资源,就可能出现所有进程都差最后一个资源的僵局。只要资源总数达到 16,就一定能让某个进程拿到第 4 个资源并完成;它完成后释放 4 个资源,又能让其他进程继续完成,死锁链条被打破。
审题路线
- 问“保证不发生死锁至少需要多少资源”,用
。 - 问“最多多少资源仍可能死锁”,用
。 - 问“四个必要条件”,按互斥、保持和等待、不剥夺、环路等待判断。
- 问“如何预防死锁”,破坏任一必要条件即可。
- 不要把“死锁”与“饥饿”混淆:死锁是互相等待形成僵局,饥饿是某些进程长期得不到资源或 CPU。
例题
单选
死锁形成的必要条件之一是资源具有:
单选
m 个进程每个最多需要 w 个同类资源,保证不发生死锁的资源数下界是:
单选
死锁资源数计算题最重要的审题点是:
自查要点
- 死锁四个必要条件分别是什么?
- 为什么最悲观情况是每个进程都差一个资源?
m*(w-1)和m*(w-1)+1分别对应什么问题?