操作系统原理读书笔记之死锁

出现死锁的原因

对资源的争夺会导致死锁,造成资源争夺有多方面的原因,比如资源本身数量有限、错误的使用锁和信号量控制
有以下四个必要条件
  1. 互斥使用(资源独占):一个资源在某一时间点只能给一个进程使用
  2. 占有资源且等待:在保持对原有资源占有的情况下,去申请新的资源
  3. 不可抢占:资源的申请者不能强行从资源占有者手中夺取资源,只能由资源占有者资源释放
  4. 循环等待:存在一个进程等待队列{P1,P2,...,Pn},其中P(n+1)等待Pn所占有的资源,Pn又等待P1占有的资源,形成一个环路


解决死锁的方法

1、不考虑此问题,对死锁置之不理,也叫鸵鸟算法
2、不让死锁发生
静态上对死锁预防,设计合适的资源分配算法,不让死锁发生
动态上,以不让死锁发生为目标,跟踪并评估资源分配过程,根据评估结果决策是否分配
3、让死锁发生,但是同时有死锁检测与解除的解决方案

死锁预防

从死锁产生的四个必要条件下手,破解其中一个必要条件,那么死锁就一定不会发生
  1. 把独占资源变为共享资源,进程访问某一资源不是通过直接访问方式,而是通过间接访问方式,例如访问守护进程、请求入队排序等待等
  2. 两种方案:
    1)在每个进程在运行前必须一次性申请他所需要的所有资源,且仅当该进程所要资源均可满足时才给予一次性分配。但是这样会带来资源利用率低、饥饿现象的发生
    2)一个进程在申请新资源却不能立即得到满足而变为等待状态之前,必须释放已占有的全部资源,若需要再重新申请
  3. 当一个进行申请的资源被其他进程占用时,可以通过操作系统抢占这一资源,以进程优先级为参照决定是否抢占
  4. 把系统中所有资源编号,在申请资源时必须严格按照资源编号递增的次序进行,否则操作系统不予分配资源,通常,频繁使用的资源编号较小

死锁避免

在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统发生死锁或可能发生死锁则不予分配


死锁检测与解除

检测时机:
  • 当进程由于资源请求不满足而等待时检测死锁,缺点是系统开销大
  • 定时检测
  • 系统资源利用率下降时检测死锁
解除方法:
  • 撤销所有死锁进程,缺点是kill进程造成的损失比较大
  • 进程回退再启动,系统为进程记录运行过程中的中间节点状态,假如发生死锁,将进程回退到过去某一状态,再向下运行。但是系统记录中间节点带来了较大开销
  • 改进第一种方案,按照某种原则逐一撤销死锁进程
  • 按照某种原则逐一抢占资源,直到死锁解除
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值