操作系统——死锁

    本文我们学习一下死锁问题。

    死锁概念:由于竞争资源或者通信关系,两个或更多线程在执行中出现,永远相互等待只能由其他进程引发的事件。

    举个例子:

   

    在上图中我们假设桥梁的每一段都是一个资源,当两辆车同时行驶到桥梁中央时,由于桥段比较窄,所以只允许一辆车通过。但是由于双方都想要占用这一段资源,因此谁也不让谁,都在等着对方,而这种等待是没有结果的,这时候就可能会出现死锁了。

    理解了死锁的概念,我们就来看看出现死锁的必要条件:

    1.互斥:任何时刻只能有一个进程使用一个资源实例

    2.持有并等待:进程保持至少一个资源,并正在等待获取其他进程持有的资源

    3.非抢占:资源只能在进程使用后自愿释放

    4.循环等待:存在等待进程集合{P0,P1,...,PN} ,P0正在等待P1所占用的资源,P1 正在等待P2占用的资源,...PN-1在等待PN所占用资源,PN正在等待P0所占用的资源。

    既然有死锁,就有死锁处理的方法。死锁的处理方法主要有四种:1.死锁预防:确保系统永远不会进入死锁状态;2.死锁避免:在使用前进行判断,只允许不会出现死锁的进程请求资源;3.死锁检测和恢复:在检测到运行系统进入死锁状态后,进行恢复;4.由应用进程处理死锁:通常操作系统忽略死锁,大多数操作系统(包括UNIX)的做法。

    下面,我们就来详细讲解这几种处理方式:

    死锁预防:限制申请方式

    预防是采用某种策略,限制并发进程对资源的请求,使系统在任何时刻都不满足死锁的必要条件

  •     互斥:把互斥的共享资源封装成可同时访问
  •     持有并等待:进程请求资源时,要求它不持有任何其他资源;仅允许进程在开始执行时,一次请求所有需要的资源
  •     非抢占:如进程请求不能立即分配的资源,则释放已占有资源;只在能够同时获得所有需要资源时,才执行分配操作
  •     循环等待:对资源排序,要求进程按顺序请求资源

    死锁避免

    利用额外的先验信息,在分配资源时判断是否会出现死锁,只在不会死锁时分配资源。

  •     要求进程声明需要资源的最大数目
  •     限定提供与分配的资源数量,确保满足进程的最大需求
  •     动态检查的资源分配状态,确保不会出现环形等待

    死锁检测和恢复

    允许系统进入死锁状态,但是需要维护系统的资源分配图,定期检测图中是否存在死锁,出现死锁时,用死锁恢复机制进行恢复。

    死锁恢复:  终止所有的死锁进程,一次只终止一个进程直到死锁消除。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值