操作系统——死锁

死锁的四个必要条件:

  1. 互斥条件
  2. 请求和保持
  3. 不剥夺条件
  4. 循环等待条件

互斥条件:资源不能共享,只能被一个进程使用。
请求和保持:发生阻塞时,当前进程持有的资源保持不放。
不可剥夺:当前进程未执行完时,所持有的资源不能被剥夺。
循环等待:进程之间循环等待资源。

解决死锁的四种主要方法:鸵鸟策略、死锁检测与恢复、死锁预防、死锁避免。
鸵鸟策略:
发生死锁时不去管它,因为处理死锁的代价很高,反而不处理它会带来更高的性能。当死锁不易发生或者发生死锁对用户的影响不是很大时采取这种策略。Windows、Linux、Unix会采用这种策略。

死锁的检测与恢复:
涉及死锁检测算法2个:
第一个死锁检测算法:深度搜索进程资源有向图
若进程资源有向图中存在环路,表明发生死锁。检测方式为深度优先搜索,对搜索的节点做标记,若遍历到存在标记的节点,表明该有向图存在环路,会发生死锁。
第二个死锁检测算法:标记法
向量E代表资源总数,向量A代表剩余资源,
矩阵C代表各进程持有资源数,矩阵R代表各进程要请求的资源数。
算法的记忆方式就是RACA,先从R中找到请求资源数小于A的进程,并标记该进程,意味着该进程可以请求到自己所需的资源,之后释放持有资源,将C中该进程持有资源加到原来的A向量中,即完成了释放资源。再重复RACA,直到最后R中存在没有被标记的进程代表会发生死锁,否则不会发生死锁。
死锁恢复算法若干:

  1. 资源剥夺法:剥夺发生死锁的进程锁持有的资源,但不撤销该进程,直到进程解除死锁。
  2. 进程回滚法:设定检查点,让发生死锁的进程回滚,直到解除死锁。要求建立保存检查点、回退及重启机制。
  3. 杀死进程。

死锁预防:
破坏互斥条件:若资源为共享资源,则不会发生死锁。一般情况下,有些资源是不允许共享访问的,比如可写文件、键盘等。当然有些资源时可以共享访问的,例如只读文件和磁盘。因此,破坏互斥条件只适用于一部分资源。当然,操作系统的SPOOLING技术能够让独占设备在逻辑上看起来是被共享。但是很多时候,我们需要使用互斥条件来保证进程的安全。

破坏请求和保持条件:若进程持有一部分资源且申请其他资源时,由于它不会释放自己持有的资源,可能会发生死锁。因此解决方法可以是在程序运行前,将其所需要的全部资源都分配给该进程,但是这种方式会造成资源的浪费,因为它所持有的资源可能需要到运行后期才使用,又或者某些资源的运行时间很短,会导致一些其他期望持有该资源的进程等待,进而可能产生进程饥饿,造成资源的浪费,资源利用率降低。

破坏不可剥夺条件:方案一:当进程持有资源而申请其他资源得不到满足时,强迫其释放所持有的资源,需要时再次申请。方案二:当进程请求的资源被其他进程占有,由操作系统协调剥夺其他进程占有的资源。该种方式需要考虑进程运行时的优先级。
方案一可能会导致前期所做的工作失效;方案二可能会导致被剥夺进程前期所做的工作失效。

破坏循环等待条件:将资源按顺序编号,只能按顺序递增的方式申请资源。不易增加新的设备,进程实际运行的顺序可能和资源编号不一致,导致资源浪费,必须按规定次序申请资源,用户编程麻烦。

死锁避免:
安全状态:简单的口述一下,目前状态已知的条件为占有的资源,要请求的资源,剩余的资源,进程申请资源并释放,最后若能够保证所有进程都执行,那么该状态为安全状态。
银行家算法:银行家算法是死锁避免中最重要的算法。其核心思想就是为进程分配资源并判断分配后是否是安全状态,若是,则分配,否则,不会分配。若能够满足全部进程的资源请求,则不会发生死锁。给每个进程分配资源的过程会产生一条安全序列,就是进程分配资源的顺序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值