死锁检测与解除

死锁检测与解除
1.1死锁检测
    操作系统可定时运行一个“死锁检测”程序,该程序按一定的算法去检测系统中是否存在死锁。检测死锁的实质是确定是否存在“循环等待”条件,检测算法可以确定死锁的存在并识别出与死锁有关的进程和资源,以供系统采取适当的解除死锁措施。
       下面介绍一种死锁检测机制。
        (1)为每个进程和每个资源指定唯一编号。
         (2)设置一张资源分配状态表,每个表目包含“资源号”和占有该资源的“进程号”两项,资源分配表中记录了每个资源正在被哪个进程所占有。

         (3)设置一张进程等待分配表,每个表目包含“进程号”和该进程所等待的“资源号”两项。
         (4)死锁检测算法:当任一进程申请一个已被其他进程占用的资源时,进行死锁检测。检测算法通过反复查找资源分配表和进程等待表,来确定该进程对资源的请求是否导致形成环路,若是,便确定出现死锁。

1.2 死锁解除

        一旦检测到死锁,便要立即设法解除死锁。一般说来,只要让某个进程释放一个或多个资源就可以解除死锁。死锁解除后,释放资源的进程应恢复它原来的状态,才能保证该进程的执行不会出现错误。因此,死锁解除实质上就是如何让释放资源的进程能够继续运行。


死锁解除法可归纳为两大类。

1.剥夺资源
    使用挂起/激活机制挂起一些进程,剥夺它们占有的资源给死锁进程,以解除死锁,待以后条件满足时,再激活被挂起的进程。
    由于死锁是由进程竞争资源而引起的,所以,可以从一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态。剥夺的顺序可以是以花费最小资源数为依据。每次剥夺后,需要再次调用死锁检测算法。资源被剥夺的进程为了再次得到该资源,必须重新提出申请。为了安全地释放资源,该进程就必须返回到分配资源前的某一点。经常使用的方法有如下两种。
   (1)还原算法,即恢复计算结果和状态。
    (2)建立检查点,主要是用来恢复分配前的状态。这种方法对实时系统和长时间运行的数据处理来说是一种常用技术。在实时系统中,经常在某些程序地址处插入检查的程序段,即采用检查点的技术来验证系统的正确性,如果发现故障,可从检查点重新启动。因此,在有些实时系统中,一旦发现死锁,可以在释放某进程的资源后,从检查点重新启动。

2.撤销进程
    撤销死锁进程,将它们占有的资源分配给另一些死锁进程,直到死锁解除为止。
    可以撤销所有死锁进程,或者逐个撤销死锁进程,每撤销一个进程就检测死锁是否继续存在,若已没有死锁,就停止进程的撤销。
如果按照某种顺序逐渐撤销已死锁的进程,直到获得为解除死锁所需要的足够可用的资源为止,那么在极端情况下,这种方法可能造成除一个死锁进程外,其余的死锁进程全部被撤销的局面。
    应该按照什么原则撤销进程?较实用而又简便的方法是撤销那些代价最小的进程,或者使撤销进程的数目最小。以下几点可作为衡量撤销代价的标准。
   (1)进程优先数,即被撤销进程的优先数。
   (2)进程类的外部代价。不同类型的进程可以规定出各自的撤销代价。系统可根据这些规定,撤销代价最小的进程,达到解除死锁的目的。
    (3)运行代价,即重新启动进程并运行到当前撤销点所需要的代价。这一点可由系统记账程序给出。

   撤销法的优点是简单明了,但有时可能不分青红皂白地撤销一些甚至不影响死锁的进程。

   对死锁的处理始终缺少令人满意的完善的解决办法。Howard在1973年曾建议把前面介绍的几种基本方法结合起来,使得系统中各级资源都以最优的方式加以利用。提出这种方法是基于资源可以按层编号,分成不同的级别。在每一级别内部可采用最合适的处理死锁的技术。这样,系统运用这种综合策略将可能不受到死锁的危害。即使出现死锁,由于采用了资源编号技术、死锁也只能出现在某一级别中。而且,在每一级别中,可采用某种基本处理技术。这样一来,操作系统可以缩小死锁危害的范围。按其思想可将系统中的资源分为四级。
         (1)内部资源:由系统使用,如PCB表。
         (2)内存:由用户作业使用。
         (3)作业资源:指可分配的设备和文件。
         (4)对换空间:指每个用户作业在辅助存储器上的空间。
对每一个级别可以采用下述方法。

   (1)内部资源:利用资源编号可以预防死锁,因为在运行时对各种不能确定的申请不必进行选择。 
   (2)内存:可用抢占式进行预防,因为作业始终是可换出内存的,而内存是可抢占的。
   (3)作业资源:可采用死锁避免措施,因为有关资源申请的信息可从作业说明书或作业控制说明中得到。
   (4)对换空间:采用预先分配方式,因为通常知道最大存储需求量。
   这一思想说明了可以借助不同的基本技术综合处理死锁。
   总之,死锁是一种人们不希望发生的状况,它对计算机系统的正常运行有较大的损害,但它又是一种随机的,不可避免的状况。当然,还有一种最简单的方法来处理死锁,即对死锁视而不见。每个人对死锁的看法都是不同的。数学家认为应该彻底防止死锁的产生,不论代价有多大:工程师想要了解死锁发生的频率、系统因各种原因崩溃的频率以及死锁的严重程度,如果死镜每5年产生一次,而每个月系统都会因硬件故障,编译器出错误或者操作系统故障而崩溃一次,那么大多数的工程师都不会不惜一切代价地去清除死锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

严同学正在努力

老板发财!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值