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号

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值