操作系统【死锁】

死锁产生的必要条件

必须同时满足以下4个条件才会产生死锁
1. 互斥条件:在一段时间内某资源仅为一个进程所占有,此时若其他进程请求该资源只能等待。
2. 不可剥夺条件:进程所获得的资源在未使用完之前,不能被其他进程强行夺走,只能主动释放。
3. 请求并保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持并不放。
4. 循环等待条件:存在一种进程资源的循环等待链,链中每个进程已经获得的资源同时被链中下一个进程所请求。

死锁预防

防止死锁的发生只需要破坏死锁产生的4个必要条件之一即可。

  • 破坏互斥条件

若允许系统资源能够共享,自然不会发生死锁。But,有些资根本不能同时访问。

  • 破坏不可剥夺条件

当一个已保持了某些不可剥夺资源的进程请求新的资源而得不到满足时,必须释放已保持的所有资源,待有需要时再重新申请。
释放已申请的资源可能造成前一阶段的工作实效,且反复申请和释放资源增加系统开销。该方法用于状态易保存和恢复的资源,如 CPU。

  • 破坏请求并保持条件

进程在运行前一次性申请完它所需要的全部资源。该方法严重浪费系统资源,有些资源仅在运行初期或快结束时使用。还会导致饥饿现象,个别资源长期被其他进程占用时。

  • 破坏循环等待条件

顺序资源分配法,首先给系统中的资源编号,规定按照编号递增的顺序请求资源。该方法要求编号必须稳定,限制了新类型设备的增加。

死锁避免

银行家算法

银行家算法步骤:

1. 检查此次申请是否超过了之前申明的资源最大需求数。
2. 检查此时系统剩余的可用资源是否还能满足这次请求。
3. 试探地分配,更改各数据结构。
4. 用安全性算法检查此次分配是否会导致系统进入不安全状态。

安全性算法步骤:

检查当前的剩余可用资源是否能满足某个进程的最大需求,如果可以,就把该进程加入安全序列,并把该进程持有的资源全部回收。不断重复这种操作,看最终是否能把所有进程加入安全序列。

死锁检测与解除

死锁检测算法

在资源分配图中,依次消除与不阻塞进程相连的边,直至无边可消。若最终图中存在边,则表示出现死锁。

死锁的解除

资源剥夺法:挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他死锁的进程。
撤销进程法:强制撤销部分甚至全部死锁进程并剥夺其资源。
进程回退法:让某几个进程回退到足以回避死锁的地步,进程回退时自愿释放自愿而非被剥夺。要求系统保持进程的历史信息,设置还原点。
如何决定让哪个进程牺牲
1. 按照进程优先级,让进程优先级低的牺牲。
2. 已执行时间,让已执行时间短的牺牲。
3. 还要多久完成,让需要时间长的牺牲。
4. 进程已经使用多少资源,让使用资源多的进程牺牲,可以尽快解除死锁局面。
5. 进程是交互式的还是批处理式的,优先牺牲批处理式的进程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值