(5.3)死锁之死锁的预防策略

1.死锁的必要条件

  • 互斥条件
    进程互斥使用资源,资源具有独占性

  • 不剥夺条件
    进程在访问资源前不能被其它进程强行剥夺

  • 部分分配条件
    区别于全部分配, 进程边申请资源,临时需要临时分配

  • 环路条件
    多个进程构成环路:环中每个进程已占用的资源被前一进程申请,而自己所申请的资源又被环中后一进程占用着
    在这里插入图片描述
    若限定最多4人同时吃饭,就可以避免死锁
    因为:4个人,有5只筷子,有个人就有一双筷子可以吃饭
    在这里插入图片描述

2.解决死锁的策略

  • 预防死锁

  • 避免死锁

  • 检测死锁

  • 恢复死锁

  • (1)预防死锁
    通过设置某些限制条件,破坏死锁4个必要条件中的一个或多个, 来防止死锁
    缺点:较易实现,但是由于限制太严格,导致资源利用率和吞吐量降低
    在这里插入图片描述

  • 预先静态分配法
    目的:破坏部分分配条件;
    策略:进程运行前将所需资源一次性全部分配给他。 因此,进程在运行过程中不再提出资源请求,从而避免出现阻塞或者死锁;
    特点:执行可能被延迟:所需资源不能全部满足时;应用开销增大:运行前估算资源需求;资源利用率低:资源被占而不用
    改进: 资源分配的单位由进程改为程序步;

  • 有序资源分配法
    目的:破坏环路条件,使得环路无法构成;
    策略: 系统中的每个资源分配一个唯一的序号;进程每次申请资源时,只能申请序号更大的资源!!
    在这里插入图片描述
    特点:按有序资源分配法分配资源,并发进程不会死锁;
    资源分配策略: 分配资源时,检查资源序号是否符合 递增 规定;
    在这里插入图片描述

  • (2)避免死锁
    不事先采取限制 去破坏产生死锁的条件,而是在资源分配过程中,用某种方法去评估若分配资源是否会让系统进入死锁状态, 若是,则拒绝此次分配资源,从而避免死锁的发生
    方法:银行家算法;
    缺点:只需要较弱的限制条件,可获得较高的资源利用率和系统吞吐量。 实现较难。

  • (3)检测和恢复死锁
    允许死锁发生,但是可通过监测机制及时监测出死锁状态,并精确确定与死锁有关的进程和资源,然后采取适当措施,将系统中已发生的死锁清除,将进程从死锁送状态中解脱出来。
    缺点:监测方法复杂,实现难度大;挥发方法靠人工,撤销一些进程,回收资源再分配;

3.Windows,Linux采用了何种的死锁解决方案?

  • 采用鸵鸟策略
    现代操作系统没有解决死锁问题,而是留给用户来解决;
    就像鸵鸟一样,遇到问题,就把头插入土里
    在这里插入图片描述
发布了582 篇原创文章 · 获赞 143 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/u011436427/article/details/104546389