操作系统基础(六)死锁的产生及解除

一、什么是死锁

死锁是指多个进程竞争有限数量的资源,并且互相等待其他进程占有的资源才能运行,导致进程循环等待再也无法改变状态。

二、产生死锁的四个条件

如果系统中以下四个条件同时成立,那么就能引起死锁:

  • 互斥:资源必须处于非共享模式,即一次只有一个进程可以使用。如果另一进程申请该资源,那么必须等待直到该资源被释放为止。
  • 占有并等待:一个进程至少应该占有一个资源,并等待另一资源,而该资源被其他进程所占有。
  • 非抢占:资源不能被抢占。只能在持有资源的进程完成任务后,该资源才会被释放。
  • 循环等待:有一组等待进程 {P0, P1,..., Pn}P0 等待的资源被 P1 占有,P1 等待的资源被 P2 占有,…,Pn-1 等待的资源被 Pn 占有,Pn 等待的资源被 P0 占有。

注意,只有四个条件同时成立时,死锁才会出现。

三、死锁检测与解除

一个简单的死锁检测算法
给每个进程、每个资源指定唯一编号;设置一张资源分配表记录各进程与其占用资源之间的关系;设置一张进程等待表记录各进程与要申请资源之间的关系。从资源等待表出发,看有没有形成等待的环路。即可以利用资源分配图的思想来检测是否有死锁发生。

死锁避免
死锁避免的重要是以最小的代价恢复系统的运行,具体的死锁解除的方法有几个:(1)撤消所有死锁进程,代价较大;(2)进程回退(Roll back)再启动,进程在执行过程中,系统会为进程记录一些中间节点,当出现死锁的时候进行回退再一起重新运行,由于需要记录每个进程的现场,所以系统代价也比较大;(3)按照某种原则逐一撤消死锁进程,直到没有死锁;(4)按照某种原则逐一抢占资源(资源被抢占的进程必须回退到之前的对应状态),直到没有死锁。

进一步可通过银行家算法和哲学家就餐问题来了解死锁的避免。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值