chapter06_死锁_4_处理死锁的策略(二)死锁检测和恢复

  • 每种类型的资源__只有一个__时的死锁检测

    (1) 画出所有进程、所有资源的__资源分配图

    (2) 检测资源分配图(有向图)中是否出现环路

    (3) 有向图检测环路算法有很多种

  • 每种类型的资源__有多个__时的死锁检测

    (1)
    设有n个进程, m种资源

      E(1*m) = (E1,E2,..., Em)代表每种资源的个数
    
      A(1*m) = (A1,A2,..., Am)代表每种资源可分配部分的个数
    
      C(n*m), Cij代表进程i拥有的j资源的个数
    
      R(n*m), Rij代表进程i还需要的j资源的个数
    

    (2) 向量A ≤ 向量B <–> Ai ≤ Bi (i = 1, 2, …, m)

    (3) 死锁检测算法

    1° 初始时,所有进程都是__未标记__状态

    2° 寻找一个未标记的进程i,满足R矩阵的第i行 Ri ≤ A

    3° 如果找不到,则__出现死锁__; 如果能找到,则标记该进程,且将C矩阵的第i行 Ci 加到 A向量上

    4° 回到2°,直到所有循环次数达到进程总数

    只要剩余了未标记进程,就说明有死锁

  • 检测死锁的__时机__

    (1) 方法一: 发生资源请求时检测

    (2) 方法二: 每隔一段时间检测

  • 从死锁中__恢复__

    (1) 利用抢占恢复

    如果条件允许,可以临时将某个资源从它的占有者转移到另一个进程

    (2) 利用回滚恢复

    周期性的进行__检查点__检查, 记录进程状态、资源状态等信息; 死锁发生时,恢复到上一个检查点的状态

    (3) 通过杀死进程恢复

    先 ps -ef(aux也行) 找进程(可以添加|grep java帮助查找),然后kill 这个进程的PID号

上一篇:chapter06


下一篇:习题解答chapter06