什么是死锁? 产生死锁的必要条件?怎样预防和避免死锁?

1. 什么是死锁?

多个进程 在运行过程中 因为争夺资源 而造成的一种僵局, 当进程处于这种僵持状态的时候, 若无外力作用, 它们将永远无法向前推进. 这种状态就称为死锁

2. 产生死锁的必要条件

产生死锁总共有 4 个必要条件:

  • 资源互斥: 当一个资源被一个进程使用时候, 其他继承不能使用该资源
  • 资源不可剥夺: 进程已持有的资源在使用完之前是不可被剥夺的, 只能在使用完后由自己释放
  • 请求和保持: 当进程在请求其他资源的时候, 对自己已持有的资源保持不放
  • 循环等待: 即存在一个等待队列: 例如: A 占有 B 的资源, B 占有 C 的资源, C 占有 A 的资源, 这样就形成了一个等待环路

当以上 4 个条件同时成立的时候, 就会产生死锁

3. 预防死锁的方法

  • 资源一次性分配(破坏请求条件): 一次性分配所有的资源, 这样就不会再有请求了
  • (破坏保持条件): 一个进程只要有一个资源得不到分配, 就也不给这个进程分配其他资源
  • 可剥夺资源(破坏不可剥夺性): 一个进程即使获得了部分资源, 但是如果得不到其他资源, 就需要释放掉已有的资源
  • 资源有序分配(破坏循环等待): 系统为每类资源分配一个编号, 每一个进程按照编号以递增的顺序请求资源, 释放则相反

4. 避免死锁的方法

预防死锁的四种方法, 都会严重的影响系统性能. 因此可以尽可能去避免死锁的产生.

在避免死锁的策略中, 允许进程动态地申请资源. 所以, 系统在进行资源分配的时候, 会预先计算资源分配的安全性, 如果此次资源分配不会导致系统进入不安全的状态, 就将资源分配给进程, 否则, 进程等待

避免死锁的方法中最经典和最重要的就是: 银行家算法
原理:
将操作系统视为一个银行家, 将操作系统所管理的资源视为银行家的资金, 进程申请资源就视为用户向银行家贷款

  • 当一个顾客对资金的最大需求量不超过银行家现有的资金时, 就可以接纳该顾客
  • 顾客可以分期贷款, 但是贷款的总额不可以超过最大需求量
  • 当银行家现有资金不能满足用户尚需的贷款金额时, 可以推迟支付贷款, 但是使顾客在有限的时间内拿到贷款
  • 当顾客得到所有所需资金后, 一定可以在有限时间内归还所有的资金

5. 解除死锁的方法

  1. 剥夺资源: 从其他进程剥夺足够数量的资源给死锁, 用以解除死锁状态
  2. 撤销进程: 撤销系统中一个或者多个死锁进程
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值