chapter06_死锁_6_处理死锁的策略(四)死锁预防

  • 死锁避免__几乎不可能实现,因为不可能知道未来的请求信息。但是可以进行__死锁预防

  • 资源死锁的__4个必要条件__

    (1) 互斥条件

    资源要么已经分配给了唯一的进程,要么就是可用的未分配状态

    (2) 占有和等待条件

    已经占有了某个资源的进程,可以继续请求新的资源

    (3) 不可抢占条件

    已经分配给某个进程的资源, 不能被其他进程强制性抢占, 只能被占有它的进程显式释放

    (4) 环路等待条件

    死锁发生时, 系统一定由有两个或两个以上的进程组成的一条环路, 该环路中每个进程都在等待着下一个进程所占有的资源

    只要破坏了其中一个条件,死锁便不会发生

  • 破坏互斥条件

    (1) 如果资源不被一个进程独占,则死锁一定不会发生

    (2) 有些资源物理上只能被独占,但是可以在这种资源前面__加入一层虚拟资源__

    (3) 示例

    打印机属于不可抢占资源,只能有一个进程占有;

    这时可以引入"假脱机打印机",作用是若干个进程都可以占有"假脱机打印机",而"假脱机打印机"只会请求"打印机"资源,不会请求其他资源;

    这样,不同进程不会因为请求打印机而死锁(因为它们请求的"假脱机打印机"属于可抢占资源); "假脱机打印机"也不会死锁,因为它不会等待其他资源,只会请求打印机。

    但是, 可能诱发的问题是两个进程都占据了假脱机打印机一半的磁盘空间,在请求磁盘的另一半空间, 而假脱机打印机只会在文件完整时才申请打印机打印,此时会在磁盘上造成死锁

    但是,一般假脱机打印机的磁盘空间足够大,不会诱发上面的问题

  • 破坏占有和等待条件

    (1) 只要禁止已持有资源的进程等待其他资源,就不会有死锁

    (2) 操作

    当一个进程请求资源时, 暂时释放__它占有的所有资源,然后再旧资源和新资源__一并申请

  • 破坏不可抢占条件

    (1) 类似于"破坏互斥条件"中的假脱机打印机示例

    (2) 不是所有的资源都可以进行类似的虚拟化操作, 例如数据库中的表

  • 破坏环路等待条件

    (1) 方法一

    操作: 让每一个进程在任意时刻__只能占有一个资源__

    问题: 资源大时不靠谱

    (2) 方法二

    操作: 将所有的资源统一编号, 任意时刻进程只能按资源编号的升序请求资源

    问题: 资源数目过多时难以找到一种合适的方式编号

    (3) 方法三

    操作: 将所有的资源统一编号,任意时刻进程只能申请比当前所占有资源序号高的资源

    问题: 资源数目过多时难以找到一种合适的方式编号

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值