操作系统中的死锁问题
来源:用户上传
作者:
摘 要:操作系统的核心是进程管理,在管理进程的时候,如果设计不当就会出现进程堵塞的现象——死锁。进程中的死锁问题是如今计算机发展过程中仍需解决的重要问题,许多研究者都在致力于解决该问题。但迄今为止仍旧没有一个通行的解决方法。该文针对死锁问题进行了探讨,论述了死锁概念、产生原因、必要条件以及处理办法。
关键词:死锁;产生原因;必要条件;处理方法
中图分类号:TP311 文献标志码:A
0 引言
随着科学技术的不断发展,计算机类型复杂多样,进程、资源种类也各不相同。在操作系统中存在很多在任意时刻都只能被一个进程占用的资源。该类资源属于独占性资源,不能同时被2个或2个以上的进程使用,否则会导致进程堵塞,从而使计算机系统崩溃。另外,一个进程常常需要访问各种排他性的资源(磁带机、打印机等),因此死锁在系统中出现的次数更会大大增加。死锁现象的出现给人们工作生活带来了很大困扰。
1 死锁的概念
死锁,顾名思义是一把没有钥匙的锁,指计算机系统、进程陷入一种死循环的状态,常常定义为在系统进程集合中的每个进程都在请求并等待其他进程所占有的资源,导致所有进程都处于等待状态不能运行,形成死循环。在该状态中,没有终止条件能使陷入死循环的进程得以解脱,从而也不能解开环路使其他进程得以释放。由此引发了所有进程都陷入想得到资源却又都得不到资源的局面。如果长期无法改变这种等待状态,那么这种现象被称为“饥饿”。
2 产生死锁的原因
2.1 资源有限,引发资源竞争
系统资源有限,而进程运行又要求占用足够多的资源。当进程所需资源被另一进程所占,另一进程所需资源被其他进程所占,循环往复,这就导致了所有进程都处于一个不能继续执行的状态,此时系统处于死锁状态。
2.2 并发进程的执行次序非法
借助例子阐明,山谷内有仅容一人通过的洞口,大家顺序通过,则可保持通畅,当发生混乱,一群人涌向洞口,则此时就会造成洞口堵塞,导致谁也不能通过,进程也是如此,当其执行顺序不合理时,进程进入死锁区,在死锁点产生死锁。
3 死锁的必要条件
对于可再使用的永久资源来说:1)互斥条件,又称独占条件。有些资源只能同时被一个进程所占用,而其他进程不能访问这些已被占用了的资源。2)请求并保持,也称部分分配条件。当进程等待其他资源时,仍然继续占有已经得到的资源。3)非抢占条件。进程获得的资源未使用完之前,其他进程不能强占,资源只能被占有它的进程自主释放。4)循环环路等待。死锁发生时,系统中存在着一条由至少2个进程组成的环路,在这条环路中的每一个进程都在等待后一个进程所占资源的释放,因此导致环路堵塞,使进程不能再继续运行。
4 处理死锁的办法
死锁会影响计算机的使用效果,必须对其加以解决,来使系统进程可以正常运行。死锁有以下几种处理方法。
4.1 死锁的预防
想要预先防止死锁发生,可以从产生死锁的必要条件入手。
(1)摒弃互斥条件。首先使用虚拟设备技术,破坏了死锁形成的必要条件中的互斥条件。该技术可将一台独占设备虚拟成多台逻辑设备,能够提供给多个进程来使用,提高了系统资源利用效率。虚拟设备技术就用共享设备的空间模拟了独占设备的功能,将独占改为共享。
(2)预分配所有共享资源。进程运行时所需的所有资源一次性申请,并且在所需资源未得到满足之前,不运行该进程,一直等到所需资源均空闲时,再运行该进程。其存在以下不足:进程可能会等待很长的时间,才能满足所请求的资源,但实际上,有的进程仅需要部分资源就可以继续执行下去。其次,被分配的资源可能等候较长时间都不会被进程使用,也不能为其他进程所运行使用,因此就造成了资源浪费。
(3)预防占有保持。针对资源不能被其他进程抢占的条件,可从以下方面解决。等待时释放,当已经占有部分资源的进程再次申请资源时,如果被拒绝则要求其必须释放原先占有的资源。强制剥夺,当进程请求当前正被其他进程占有的资源时,系统可以主动抢占另一个進程的资源帮助该进程运行下去,因此进程在运行过程中,所占有的资源是能够被系统所剥夺的。不过第2种方法只有在2个进程优先级不同时才有效。此外,被剥夺了资源的进程在此之前所完成的工作全部失效,同时,进行的这一系列操作也加大了系统开销,造成了不必要的浪费
(4)预防形成环路。可以采用按序对资源进行分配,给资源分级编号。这就要求所有进程在申请资源时,必须按递增顺序来申请,并且相同级别资源要一次申请完,这就阻止了环路的产生,从而避免了死锁的产生。这种预防方法是低效的,因为它会使进程的执行速度变慢,增加了进程占用资源的时间,并且给系统资源进行分级编号也是很困难的。
4.2 死锁避免
死锁避免也称动态监测。该方法与死锁预防差别较小,死锁预防约束申请资源请求,从而破坏4个必要条件中的一个,但这同时使资源利用率和进程执行率大大降低。而死锁避免则相反,在分配资源的过程中,系统对于申请资源的命令提前进行检测,依据所进行的检查结果选择是否分配其资源。它允许互斥、请求和保持,不可剥夺3个条件,但却保证永远不会到达死锁点,能够执行多个并发程序。
4.3 死锁检测
预防和避免死锁要求代价太高,为提高资源的利用率,我们一般不阻止死锁的产生。而是采用系统定时检测的方式,当检测到发生死锁时,再采取某种措施来解除死锁
(1)检测死锁的时机:进程发生等待时检测、定时进行检测、系统资源利用率下降时检测。
(2)利用资源分配图检测:借助资源分配图,如果发现其中不存在环路,则未出现死锁,如果存在环路,则有可能出现死锁(存在不确定性) (3)死锁定理:当某个状态的资源分配图不能再继续化简时,该状态为死锁。资源分配图简化原则是进程申请的资源如果空闲,则可将请求边改为分配边,并将资源分配给该进程。当进程仅有分配边没有申请边时,可看作该进程在规定时间内完成并释放所占用的资源,可将指向该进程结点的边抹去,从而简化过程。
4.4 死锁复原
一旦检测出死锁就要采取一些措施来使系统重新恢复运行。1)强制抢占,临时将资源从它当前所有者中人工干预转移到需要该资源的另一进程,使另一进程可以运行。当另一进程完成时,原进程可再申请可用资源继续完成工作,由此解决死锁问题。该方法的可行度不强,实行起来较为困难,选择抢夺某个进程的资源时,很大程度上要考虑该进程所拥有的资源是否容易回收。2)死锁进程回退,使其回到还未产生死锁的时候。借助检查点,当系统死锁时,检测所需资源,从较早的检查点开始,使其回到还未产生死锁的状态,并使该进程获得所需资源。其中检查点包括资源状态和存储映像,即那些资源分配给了那个进程,不过该方法可能使系统再次进入死锁。3)终止所有进程。可以先终止死锁环路中的一个进程,如果死锁还未解除,继续撤销其他的进程,直至进程全部撤销或者死锁恢复至系统正常运行。也可选择对环路外的进程进行撤销,使其释放所占有的资源。不过该方法要求所撤销的进程中正好拥有环路中堵塞进程所需要的资源,且最好撤销的是不会有其他影响的进程。
5 结语
死锁问题是任何操作系统中都存在的潜在问题,资源死锁也并不是唯一的死锁。考虑到系统复杂多样和效率代价问题,很难只靠死锁的预防和避免去解决它,大多还是要依靠死锁的恢复和检测,不过,这些都要靠增加计算机工作效率来实现。因此,在未来还需要我们继续对死锁问题进行深入研究,争取早日攻克这一大难题。
参考文献
[1]汤子贏.计算机操作系统[M].西安:西安电子科技大学出版社,1999.
[2]张尧学,史美林.计算机操作系统教程[M].北京:清华大学出版社,2000.
[3]张尧学,宋虹,张高.计算机操作系统教程[M].北京:清华大学出版社,2013.
[4]申雪琴.计算机操作系统中死锁问题的研究[J].计算机与数字工程,2008(7):203-206.
[5]Andrew.S.Tanenbaum著,陈向群,马洪兵等译.现代操作系统[M].北京:机械工业出版社.
[6]孔宪君,王亚东.操作系统的原理与应用[M].北京:高等教育出版社,2008.
转载注明来源:https://www.xzbu.com/8/view-15024535.htm