操作系统中的死锁问题

操作系统中的死锁问题
操作系统中的死锁问题

操作系统中的死锁问题

摘要:死锁是指多个进程因为竞争资源而造成的一种僵局,是计算机中经常出现的现象,至今还没有很好的解决方法。死锁产生的条件有 4 个:互斥条件、请求与保持条件、不剥夺条件以及循环等待条件。死锁是计算机故障中常见的问题之一,想要最优化使用计算机操作系统,首要任务就是解决死锁问题。当然,就这种计算机操作系统中的死锁问题而言,其绝不是凭空产生的,相反的,其有着自身的一系列必要条件,而这些必要条件和产生原因实际上又可以为相应应对措施的采取指明突破口。本文主要围绕着计算机操作系统中的死锁问题这一中心主题,从死锁问题的具体内涵出发,通过对其产生原因、必要条件的论述和揭示,最后给出可行的死锁解决策略。

关键词:计算机操作系统;死锁问题;原因;对策

0引言

随着科学技术的不断发展,计算机类型复杂多样,进程、资源种类也各不相同。计算机操作系统是管理计算机各种软硬件资源的软件系统,其中死锁问题是操作系统必须处理的一种资源分配问题。所谓的死锁就是不通状态,而当其具体到计算机操作系统之中时,则表示在一把包括多个进程在内的进程集合体中,每个进程都在等待相应事件的促发,而这些事件却又在等待另一类进程的完成,因此,这样一来进程之间一直处于一种等待的状态之中,无法得到顺利地执行。计算机中的死锁会影响整个操作系统的进程。每个进程都需要相应要求指导,而这些要求指导又需要不同类别进程来提供,死锁会耽误计算机进程的顺利进行。这种状态造成计算机资源的浪费,需要的资源利用不上,不需要的资源无法释放,对操作系统来说有着不利的影响。由此可见,我们应研究计算机操作系统中的死锁问题,科学采用合理的解决方案。

我们知道,操作系统是一台计算机的灵魂,没有操作系统计算机只能是一副空壳,什么功能也无法实现。然而,也正是在这种操作系统重要性的要求之下,人们已经对其越来越为依赖了。当然,这种依赖性如果碰到计算机运行不畅或者死机的情况,用户则会变得异常烦躁,而这种死机以及卡壳现象的发生实际上在很大层面上都是死锁问题导致的。我们都可以清晰认识到的是,就一个计算机系

统而言,其所具有的系统资源是相对有限的,而这种资源在多数情况下又表现出一种独占性的特点,即许多资源无论在什么时刻都只能供一个进程使用,而这一个进程所占用的系统资源又是多方面的。虽然如今的计算机操作系统大部分采用的都是并发处理以及资源共享,但是其在中央处理器上的执行时间是不确定的,这样就必然导致进程在具体执行的之后呈现出一定的不确定性。另外,这些进程实际上又存在着一种竞争的关系,而这样一来就必然导进程发生死锁的现象。事实上,就计算机操作系统的死锁问题而演变,其实际上就是指一个不通的状态,而当期具体到计算机操作系统之中时,其则表示在一把包括多个进程在内的进程集合体中,每个进程都在等待相应的促发,而这些事件却又在等待另一类进程的完成,因此,这样一来进程之间一直处于一种等待的状态之中,无法得到顺利地执行。当然,这种不同的状态也就必然导致了资源空间的极大浪费,不需要占用的资源无法放出,需要的资源又无法得到利用。因此,我们可以发现,单个进程是不会发生死锁问题的,只有两个或者两个以上的进程出现时,死锁才能够产生。1死锁概述

1.1死锁概念

计算机操作系统是管理计算机各种软硬件资源的软件系统,其中死锁问题是操作系统必须处理的一种资源分配问题。通常而言计算机操作系统死锁指的是,由于可分配资源的有限性或者彼此进程通信而引起的一种在多个进程之间产生的阻塞现象。计算机操作系统如果不对其进行强制性的资源回收或者资源重新分配,这种阻塞现象将一直存在下去,影响操作系统进行正常的资源管理。由此可见,计算机操作系统中的死锁问题必须发生多个进程之间,在单进程系统中必然不会产生死锁问题。死锁,顾名思义是一把没有钥匙的锁,指计算机系统、进程陷入一种死循环的状态,常常定义为在系统进程集合中的每个进程都在请求并等待其他进程所占有的资源,导致所有进程都处于等待状态不能运行,形成死循环。在该状态中,没有终止条件能使陷入死循环的进程得以解脱,从而也不能解开环路使其他进程得以释放。由此引发了所有进程都陷入想得到资源却又都得不到资源的局面。例如:想要把磁盘中的文件打印出来,进程会同时访问打印机和磁盘驱动器,并且阻止其它进程访问他们。当系统中只有一个进程时,此进程可任意要求它所需的资源进行工作;当系统中有多个进程时,这些进程共同利用系统资

源,提高系统处理能力,但也有可能发生死锁现象。简言之,死锁问题,就是一种资源等待与资源释放之间产生的矛盾,由于存在系统资源的持续占用必然引起资源空间严重浪费,常见的用户等待以及死机现象都可能是由于死锁问题导致的,因此处理好死锁问题无论从计算操作系统资源有序合理分配方面还是良好用户体验方面都是必须解决重要问题。下文则具体从死锁必要条件、产生原因以及死锁解决措施等方面进行探讨。

1.2死锁的必要条件

1.互斥

一个资源只能被一个进程应用。又称独占条件。有些资源只能同时被一个进程所占用,而其他进程不能访问这些已被占用了的资源。

2.不可剥夺

只有占有这个资源的进程可以释放它,其它进程不可剥夺。

3.循环等待

死锁发生时,系统中存在着一条由至少 2 个进程组成的环路,在这条环路中的每一个进程都在等待后一个进程所占资源的释放,因此导致环路堵塞,使进程不能再继续运行。

4.请求和保持

保持原占用资源,再请求新资源。也称部分分配条件,当进程等待其他资源时,仍然继续占有已经得到的资源。

这 4 个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

1.3死锁产生的原因

计算机操作系统死锁问题的形成机制事实上,就计算机操作系统的死锁问题而言,其虽然是如今给人类操作系统以及各个操作系统版本在实际的使用过程中经常出现的一类问题,并对用户的实际运用造成了一定的影响,而这种影响是不能凭空产生的,因为这种操作系统死锁问题有着一定的的形成机制。一般来说,造成计算机操作系统死锁的原因主要包括如下两个方面:

1.资源有限,引发资源竞争

系统资源有限,而进程运行又要求占用足够多的资源。当进程所需资源被另

一进程所占,另一进程所需资源被其他进程所占,循环往复,这就导致了所有进程都处于一个不能继续执行的状态,此时系统处于死锁状态。

2.并发进程的执行次序非法

是进程在进行顺序的安排上是非法的,这样一种非法的顺序也就必然导致计算操作系统出现混乱以及卡壳的现象。

一般来说,计算机操作系统中的资源可以大致分为可剥夺性资源以及不可剥夺性资源,而就前者而言,当某一进程向系统请求要占用这一资源时,其完全可以为代替原先占用的那个进程,但是这种进程实际上又需要依赖相应的进程优先实现。即优先级高的可以剥夺优先级低的,反之则不成立。而包括打印机以及磁带机在内的后者则不可能实现这一剥夺行为,而且也正是这种不可剥夺性,使得其死锁发生的概率大大增加。当然,包括信号量使用不当以及程序设计不合理等在内的因素也会直接导致计算机操作系统死锁问题的发生。例如,进程与进程之间都在互相等待双方传来的消息,而这种消息如果使用不当则会使得相关进程不能顺利地向前推进,从而陷入一种死锁状态。不过,死锁若要产生,其就必须就要符合多个条件,即每一个资源只能被一个进程使用、进程在取得资源后不能强行剥夺以及两个或两个以上进程之间形成一种循环式的等待资源关系。

2处理死锁的办法

当然,当我们意识到计算机操作系统中死锁问题重要性之时,我们总不能听之任之,让其一直持续下去,相反的,我们总会在充分发现其具体内涵及形成机制之后,对其发生的构成要素进行破坏和抑制,干扰其具体形成过程,才能真正意义上将这种死锁问题的发生概率以及发生率及其所造成的影响控制在最小范围之内。笔者在总结自身工作经验的过程中发现,常用的处理死锁的办法主要包括死锁的预防、死锁的避免、死锁的检测、死锁的复原。

2.1 死锁的预防

想要预先防止死锁发生,可以从产生死锁的必要条件入手。

(1)摒弃互斥条件。首先使用虚拟设备技术,破坏了死锁形成的必要条件中的互斥条件。该技术可将一台独占设备虚拟成多台逻辑设备,能够提供给多个进程来使用,提高了系统资源利用效率。虚拟设备技术就用共享设备的空间模拟了独占设备的功能,将独占改为共享。

(2)预分配所有共享资源。进程运行时所需的所有资源一次性申请,并且在所需资源未得到满足之前,不运行该进程,一直等到所需资源均空闲时,再运行该进程。其存在以下不足:进程可能会等待很长的时间,才能满足所请求的资源,但实际上,有的进程仅需要部分资源就可以继续执行下去。其次,被分配的资源可能等候较长时间都不会被进程使用,也不能为其他进程所运行使用,因此就造成了资源浪费。以下有两种方法:1)一个进程在占用其它资源,还要继续申请资源被拒绝时,那么该进程就必须释放原本所占用的资源,以后需要资源可以再次申请。简单来讲就是,已占用资源的进程在运行时,会将原本占用的资源释放,也就是说权利被剥夺,因此破坏了不可剥夺的条件。2)一个进程正在申请的资源被其它进程占用时,可以利用操作系统去抢占资源,这种方法要建立在不同优先级别的两个进程上,如果两个进程的优先级别相同,就不能防止死锁。优点:方便保留状态和恢复资源。缺点:恢复代价较高,实现起来比较困难,容易导致循环的重启和不必要的抢占。

(3)破坏保持和请求条件

一个进程在申请利用某个资源时,便不能在占用其它的资源,这是一种静态分配的方法。在进程工作之前,让它一次性的申请出所有需要应用的资源,如果系统资源充足,就可以把进程所需的所有资源分配给它,所以在进程工作中就不会在提出应用资源的申请,这样就破坏了请求等待条件。如果系统资源分配过程中,有一种资源无法满足进程的需求,那么就不分配给它任何资源,让它一直等待,以此破坏保持条件,避免死锁现象的发生。

(4)预防形成环路。可以采用按序对资源进行分配,给资源分级编号。这就要求所有进程在申请资源时,必须按递增顺序来申请,并且相同级别资源要一次申请完,这就阻止了环路的产生,从而避免了死锁的产生。这种预防方法是低效的,因为它会使进程的执行速度变慢,增加了进程占用资源的时间,并且给系统资源进行分级编号也是很困难的。

2.2 死锁避免

死锁避免也称动态监测。该方法与死锁预防差别较小,死锁预防约束申请资源请求,从而破坏 4 个必要条件中的一个,但这同时使资源利用率和进程执行率大大降低。而死锁避免则相反,在分配资源的过程中,系统对于申请资源的命

令提前进行检测,依据所进行的检查结果选择是否分配其资源。它允许互斥、请求和保持,不可剥夺 3 个条件,但却保证永远不会到达死锁点,能够执行多个并发程序。指在资源的动态分配过程中,通过合理的调节各并发进程的资源分配和推进顺序,防止系统进入不安全状态,从而避免死锁的发生。目前,在较多系统中采用此方法来避免死锁的发生。该方法存在的问题是需要预先安排进程的推进顺序。

银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。

在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。

银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。

2.3 死锁检测

预防和避免死锁要求代价太高,为提高资源的利用率,我们一般不阻止死锁的产生。而是采用系统定时检测的方式,当检测到发生死锁时,再采取某种措施来解除死锁。不采用任何限制性措施,运行系统发生死锁。死锁发生后,通过系统设置的检测机构,及时的检测出死锁的发生,精确的确定与死锁相关的进程和资源情况。

(1)检测死锁的时机:进程发生等待时检测、定时进行检测、系统资源利用率下降时检测。

(2)利用资源分配图检测:借助资源分配图,如果发现其中不存在环路,则未出现死锁,如果存在环路,则有可能出现死锁(存在不确定性)(3)死锁定理:当某个状态的资源分配图不能再继续化简时,该状态为死

锁。资源分配图简化原则是进程申请的资源如果空闲,则可将请求边改为分配边,并将资源分配给该进程。当进程仅有分配边没有申请边时,可看作该进程在规定时间内完成并释放所占用的资源,可将指向该进程结点的边抹去,从而简化过程。

2.4 死锁复原

一旦检测出死锁就要采取一些措施来使系统重新恢复运行:

(1)强制抢占,临时将资源从它当前所有者中人工干预转移到需要该资源的另一进程,使另一进程可以运行。当另一进程完成时,原进程可再申请可用资源继续完成工作,由此解决死锁问题。该方法的可行度不强,实行起来较为困难,选择抢夺某个进程的资源时,很大程度上要考虑该进程所拥有的资源是否容易回收。

(2)死锁进程回退,使其回到还未产生死锁的时候。借助检查点,当系统死锁时,检测所需资源,从较早的检查点开始,使其回到还未产生死锁的状态,并使该进程获得所需资源。其中检查点包括资源状态和存储映像,即那些资源分配给了那个进程,不过该方法可能使系统再次进入死锁。

(3)终止所有进程。可以先终止死锁环路中的一个进程,如果死锁还未解除,继续撤销其他的进程,直至进程全部撤销或者死锁恢复至系统正常运行。也可选择对环路外的进程进行撤销,使其释放所占有的资源。不过该方法要求所撤销的进程中正好拥有环路中堵塞进程所需要的资源,且最好撤销的是不会有其他影响的进程。

死锁检测与恢复与死锁预防相比,具有积极主动的一面。死锁预防是通过一定的限制约束策略,来防止造成死锁产生的四个冲要条件中的任一个的出现来实现避免死锁的。而死锁的检测是:只要有可能,就向申请资源的进程进行分配资源。操作系统会周期性的去检测是否存在“环链等待”的出现。如果发现存在“环链等待”,即出现了死锁,则会采取一定的措施来消除死锁。常用的实施方法是撤消或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态以继续运行。需要特别说明的是:死锁检测与恢复并不能防止死锁的发生,它只是确定系统中是否存在死锁,然后再予以恢复。

3总结

总之, 死锁是一种人们不希望发生的, 它对计算机系统正常运行有较大的损

害, 但它又是一种随机的、不可避免的现象。对死锁问题人们进行了大量的研究工作, 但至今还没有一种令人满意的、完善的解决方法, 现有的各种解决方法都是以不同程度在牺牲系统效率为代价的。死锁问题是任何操作系统中都存在的潜在问题,资源死锁也并不是唯一的死锁。考虑到系统复杂多样和效率代价问题,很难只靠死锁的预防和避免去解决它,大多还是要依靠死锁的恢复和检测,不过,这些都要靠增加计算机工作效率来实现。因此,在未来还需要我们继续对死锁问题进行深入研究,争取早日攻克这一大难题。

参考文献

[1]杨珊.哲学家就餐问题的实验课程思路拓展[J].实验科学与技

术,2018,16(02):191-194.

[2]黄正鹏.计算机操作系统中死锁问题研究[J].电脑知识与技

术,2016,12(20):34-35.

[3]周南凤.探究计算机操作系统中死锁问题[J].信息与电脑(理论

版),2015(13):69-70.

[4]张伟杰.计算机操作系统中死锁问题研究[J].计算机光盘软件与应

用,2014,17(18):81+83.

[5]鲍治国,李笑雪.《操作系统原理》课程教学研究[J].科技信息,2014(07):118.

[6]Coffman E G, Elphick M, Shoshani A. System deadlocks[J]. ACM Computing

Surveys (CSUR), 1971, 3(2): 67-78.

[7]Holt R C. Comments on prevention of system deadlocks[J]. Communications of

the ACM, 1971, 14(1): 36-38.

[8]Engler D, Ashcraft K. RacerX: effective, static detection of race conditions and

deadlocks[J]. ACM SIGOPS operating systems review, 2003, 37(5): 237-252. [9]Van Den Berg T W. Detection and resolution of resource deadlocks in a

distributed data processing system: U.S. Patent 5,459,871[P]. 1995-10-17.

[10]D imitoglou G. Deadlocks and methods for their detection, prevention and

recovery in modern operating systems[J]. Operating systems review, 1998, 32(3): 51-54.

[11]D imitoglou G. Deadlocks and methods for their detection, prevention and

recovery in modern operating systems[J]. Operating systems review, 1998, 32(3): 51-54.

[12]T oader F. Method and apparatus for detecting deadlocks: U.S. Patent

7,774,783[P]. 2010-8-10.

相关主题
相关文档
最新文档