3.6 预防死锁
1. 破坏“请求和保持”条件
所有进程在开始运行之前,必须一次性地申请其在整个运行过程中所需的全部资源。
- 优点:简单、易行且安全
- 缺点:①资源被严重浪费 ②使进程经常会发生饥饿现象
2. 破坏“不可抢占”条件
允许进程先运行,提出新的资源请求而不能得到满足时,必须释放已经保持的所有资源,待以后需要时重新申请。
实现比较复杂,且需付出很大代价,可能会造成进程前一阶段工作的失效,反复申请和释放资源。
3. 破坏“循环等待”条件
对系统所有资源类型进行线性排序,并赋予不同的序号,每个进程必须按序号递增的顺序请求资源。在采用这种策略后所形成的资源分配图中,不可能再出现环路。
与前两种策略比较,其资源利用率和系统吞吐量都有较明显的改善,但也存在以下问题:
3. 为系统中各类资源所规定的序号,限制了新类型设备的增加;
4. 作业使用各类资源的顺序与系统规定的顺序不同;
5. 会限制用户编程自由。
3.7 避免死锁
1. 安全状态:是指系统能按某种进程推进顺序(P1,P2,…,Pn)为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。
(P1,P2,…,Pn)为安全序列。
6. 最终释放的总资源为所有资源总和,可检查是否计算出错。
7. 并非所有不安全状态都必然会转为死锁状态,不安全状态一旦出错才有可能转为死锁状态。
8. 只要系统处于安全状态,系统便不会进入死锁状态。
2.利用银行家算法避免死锁
-
数据结构:
①可利用资源向量Available
②最大需求矩阵Max
③分配矩阵Allocation
④需求矩阵Need -
银行家算法:
设Request是进程Pi的请求向量,如果Request[j] = K,表示进程Pi需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤进行检查:
版权声明:本文为CheneyKKE原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。