chapter06_死锁_5_处理死锁的策略(三)死锁避免

  • 避免死锁的算法是__存在的__, 但是__前提__是事先已经获得了进程要获取资源的全部信息

  • (1) 安全状态

    当死锁没有发生时, 即使所有进程突然请求对资源的最大需求, 也仍然存在某种调度次序, 使得每一个进程都可以运行完毕

    (2) 不安全状态

    当死锁没有发生时, 不存在某种调度次序, 使得每一个进程都可以运行完毕

  • 单个资源的银行家算法

    (1) 基本思想

    对每一个资源请求进行__检查__,检查如果答应了请求后是否会进入__不安全状态__,如果会进入不安全状态则__直接拒绝请求__

    (2) 示例

      总资源 E = (10);
    
      初始时进程拥有的资源个数 C = (1,1,0,4)';
    
      每个进程对资源的未满足最大需求 R = (5,4,4,3)';
    
      剩余资源 A= (4);
    

    此时画出资源分配图可知,死锁不会发生

    第一个请求: 进程3请求2个资源

    如果同意请求,则

      C1 = (1,1,2,4)';   R1 = (5,4,2,3)';   A1 = (2)
    

    此时,即便所有进程突然都请求对资源的最大需求,也可以存在一种调度次序 C->B->D->A,使得进程都可以正常运行,所以是安全状态,同意请求

    第二个请求: 进程2请求1个资源

    如果同意请求,则

      C2 = (1,2,2,4)';   R1 = (5,3,2,3)';   A1 = (1)
    

    此时如果进程突然都请求对资源的最大需求,那么所有进程都会阻塞,所以是不安全状态,拒绝请求

  • 多个资源的银行家算法

    (1) 从"多个资源的银行家算法"推广而来,思想是一样的

    (2) 检查一个状态是否安全的算法

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

    1° 查找矩阵R中是否有一行Ri, 满足 Ri≤A, 如果不存在,说明状态不安全

    2° 如果能找到,则将Ci叠加到A,跳转到1°,直到每个进程都查找过一次了

  • 银行家算法虽然正确,但是缺乏实用价值

    1° 很少有进程运行前就得知所需资源的最大值

    2° 进程数量不固定

    3° 可用资源的数目不固定(例如打印机突然坏了)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值