死锁与饥饿

概念

一组进程的永久阻塞,或者是竞争系统资源,或者是通信顺序不当;到目前都没有有效的方法解决,只能尽量减少和规避。

单进程死锁

产生条件
必要条件

  • 资源的互斥使用;
  • 保持并等待;
  • 不可剥夺;

充要条件

  • 环路等待(前三个条件产生的结果,必然会引起死锁);

解决死锁

分析之后都不适用==

  • 预防死锁:
    • 间接方法:禁止前三个条件发生,
      1. 互斥是资源的固有属性不能禁止;
      2. 禁止保持并等待:要求进程一次性地申请其所需的全部资源,若系统中没有足够资源可分配则阻塞;不能实现的原因:创建进程的时候无法知道它运行所需的全部资源;就算知道,可能某类资源也正在被使用,使得该进程无法推进;就算资源可以被全部使用,但是运行期间也不一定会被全部使用(例如if else语句);所以效率很低。
      3. 禁止不剥夺条件;若一个进程占用了某种资源,又要申请其他资源,则不能立即分配给它,必须让它首先释放出已占用的资源,然后重新申请;若一个进程申请的资源被另一个进程占用,OS可以剥夺低优先级权进程的资源分配给高优先权的进程。
    • 直接方法:禁止环路等待条件,可以将系统的所有资源按类型不同进行线性排队,并赋予不同的序号,进程对某类资源的申请只能按照序列号递增的方式进行。

避免死锁

关键在于为进程分配资源之前,首先通过计算,判断此次分配时都会导致死锁,只有不会导致死锁的分配才可实行;

银行家算法

条件

  • 预先必须申请每个进程西药的资源总量;
  • 进程之间相互独立,其执行顺序取决于系统安全,而非进程的同步要求;
  • 系统必须提供固定数量的资源分配;
  • 若进程占有资源,则不能让其退出系统;

检测死锁

检测死锁不同于预防死锁,不限制资源访问方式和资源申请;OS周期性的执行死锁检测例程,检测系统是否出现环路等待;

解除策略

  • 中断所有死锁进程;
  • 对一些进程来说,设置一些监测点checkpoint,从这些点上重新运行;
  • 逐步解除一些死锁进程;
  • 逐步剥夺进程一些资源;

选择解除进程要求

  • 目前处理机花费时间执行最少的;
  • 产出较少的进程;
  • 剩余时间最长的;
  • 资源已分配最少的;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值