第三章 处理机调度与死锁(二)

  • Post author:
  • Post category:其他




3.6 预防死锁



1. 破坏“请求和保持”条件

所有进程在开始运行之前,必须一次性地申请其在整个运行过程中所需的全部资源。

  1. 优点:简单、易行且安全
  2. 缺点:①资源被严重浪费 ②使进程经常会发生饥饿现象



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 版权协议,转载请附上原文出处链接和本声明。