页数:20页文件大小:192.6 KB来源: 操作系统ppt课件
本课件系统讲解操作系统中的死锁问题。先给出死锁的定义、产生环境与两大原因,说明互斥、不可抢占、部分分配与循环等待四个必要条件;随后介绍破坏部分分配条件的预先静态分配法和破坏循环等待条件的有序资源使用法;接着重点展开死锁避免的银行家算法,用单种资源与多种资源两类实例演示安全性判断;最后讲解资源分配图化简的死锁检测方法与撤消进程的死锁恢复措施。
第七章 死锁
本页还以甲、乙两个进程竞争输入机与打印机的进展路径图说明死锁点:两进程分别占用输入机与打印机后进入危险区,再各自申请对方已占用的资源,便进入禁区形成死锁。
资源的概念
资源的共同性质:一个进程由于请求一个资源而未被满足,从而该进程被阻塞。
定义:一个逻辑资源(简称资源)是指可以引起一个进程进入等待状态的事物。
死锁的必要条件(注意:不是充分条件)
| 死锁的必要条件 | 防止死锁发生的方法 |
|---|---|
| 互斥条件 | 允许多个进程同时访问资源(不现实) |
| 不可抢占条件 | 强迫进程暂时释放资源给其它进程(代价大) |
| 部分分配条件 | “预先静态分配法” |
| 循环等待条件 | “有序资源使用法” |
策略:作业调度时,仅当系统满足作业运行时所需的全部资源时,才把该作业调入内存运行。在作业运行前一次性将其所需的全部资源分配给它,于是在作业运行过程中不再会提出新的资源要求。
该方法破坏“部分分配条件”,实现简单,但资源利用率低,且可能因资源不足使作业长期推迟。
有序资源使用法(破坏循环等待条件)的策略
| 顾客 | 已使用 | 仍要求数 |
|---|---|---|
| Andy | 0 | 6 |
| Barbara | 0 | 5 |
| Marvin | 0 | 4 |
| Susan | 0 | 7 |
| 顾客 | 已使用 | 仍要求数 |
|---|---|---|
| Andy | 1 | 5 |
| Barbara | 1 | 4 |
| Marvin | 2 | 2 |
| Susan | 4 | 3 |
| 顾客 | 已使用 | 仍要求数 |
|---|---|---|
| Andy | 1 | 5 |
| Barbara | 2 | 3 |
| Marvin | 2 | 2 |
| Susan | 4 | 3 |
| 进程 | 最大需求 | 已分配 | 仍需要 |
|---|---|---|---|
| P1 | 10 | 5 | 5 |
| P2 | 4 | 2 | 2 |
| P3 | 9 | 2 | 7 |
T0 时刻系统安全,因为存在安全序列(P2,P1,P3):给 P2 分配 2 个单位资源,P2 完成后释放 4 个单位的资源,则可用资源数为 5 个;给 P1 分配 5 个单位资源,P1 完成后释放 10 个单位资源,则可用资源数为 10 个;给 P3 分配 7 个单位资源,P3 完成后释放 9 个单位资源,则可用资源数为 12 个。
若 T0 时刻 P3 请求分配 1 个单位并分给它,则可用资源剩 2 个单位;分配给 P2 后完成释放 4 个,此后 P1 和 P3 均因得不到足够的资源而等待——死锁!因此该请求不能满足,P3 将因资源请求未满足而阻塞。
系统中有五个进程 {P0,P1,P2,P3,P4} 和三种资源 {A,B,C},每一种资源的数量分别为 10、5、7。T0 时刻的资源分配情况如下:
| 进程 | Max A | Max B | Max C | Allocation A | Allocation B | Allocation C | Need A | Need B | Need C |
|---|---|---|---|---|---|---|---|---|---|
| P0 | 7 | 5 | 3 | 0 | 1 | 0 | 7 | 4 | 3 |
| P1 | 3 | 2 | 2 | 2 | 0 | 0 | 1 | 2 | 2 |
| P2 | 9 | 0 | 2 | 3 | 0 | 2 | 6 | 0 | 0 |
| P3 | 2 | 2 | 2 | 2 | 1 | 1 | 0 | 1 | 1 |
| P4 | 4 | 3 | 3 | 0 | 0 | 2 | 4 | 3 | 1 |
T0 时刻存在安全序列(P1,P3,P4,P2,P0),系统处于安全状态。
P1 请求资源 Request(1,0,2),试探分配后 Available 变为(2,3,0),各进程的 Allocation 与 Need 如下:
| 进程 | Max A | Max B | Max C | Allocation A | Allocation B | Allocation C | Need A | Need B | Need C |
|---|---|---|---|---|---|---|---|---|---|
| P0 | 7 | 5 | 3 | 0 | 1 | 0 | 7 | 4 | 3 |
| P1 | 3 | 2 | 2 | 3 | 0 | 2 | 0 | 2 | 0 |
| P2 | 9 | 0 | 2 | 3 | 0 | 2 | 6 | 0 | 0 |
| P3 | 2 | 2 | 2 | 2 | 1 | 1 | 0 | 1 | 1 |
| P4 | 4 | 3 | 3 | 0 | 0 | 2 | 4 | 3 | 1 |
此时仍存在安全序列(P1,P3,P4,P2,P0),系统处于安全状态,故该请求可以分配。
P0 再请求资源 Request(0,2,0),试探分配后 Available 变为(2,1,0),各进程的 Allocation 与 Need 如下:
| 进程 | Max A | Max B | Max C | Allocation A | Allocation B | Allocation C | Need A | Need B | Need C |
|---|---|---|---|---|---|---|---|---|---|
| P0 | 7 | 5 | 3 | 0 | 3 | 0 | 7 | 2 | 3 |
| P1 | 3 | 2 | 2 | 3 | 0 | 2 | 0 | 2 | 0 |
| P2 | 9 | 0 | 2 | 3 | 0 | 2 | 6 | 0 | 0 |
| P3 | 2 | 2 | 2 | 2 | 1 | 1 | 0 | 1 | 1 |
| P4 | 4 | 3 | 3 | 0 | 0 | 2 | 4 | 3 | 1 |
此时找不到任何安全序列,系统进入不安全状态,故该请求不能满足,P0 必须等待。
资源分配图化简示例(两个进程):本页以图示方式展示 P1、P2 依次被化简为孤立结点的过程,说明该图可完全化简,系统未发生死锁。
资源分配图化简示例(三个进程):本页以图示方式展示 P1、P2、P3 构成的资源分配图无法找到可化简的结点,故该图不可化简,系统中存在死锁。
死锁恢复:强制性地从系统中撤消进程并剥夺它们的资源给剩下的进程使用。
撤消进程的原则
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}