您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 浅谈计算机操作系统中死锁题
浅谈计算机操作系统中死锁题学院专业14xxxxxxxx一、死锁的基本理论(一)死锁的基本概念死锁,从字面意思看,就是一个不通的状态,而当其具体到计算机操作系统之中时,其则表示在一把包括多个进程在内的进程集合体中,每个进程都在等待相应事件的促发,而这些事件却又在等待另一类进程的完成,因此,这样一来进程之间一直处于一种等待的状态之中,无法得到顺利地执行。当然,这种不同的状态也就必然导致了资源空间的极大浪费,不需要占用的资源无法放出,需要的资源又无法得到利用,这对于计算机操作系统的运行来说,无疑是个不好的消息。因此,我们在进行实际的计算机操作系统设计和运行时,总是需要将其产生原因及形成机制有一个完整的认识,并及时地采用相关措施加以应对。(二)死锁的现象及其原因分析死锁是指在一个进程集合中,每个进程都在等待一些事件的发生,而这些事件又紧紧被同组中的另一些进程所触发,没有一个进程能够顺利运行下去,所有进程都永远相互等待。或者说,死锁现象是一个进程在等待另一个进程释放它所占有的资源,但另一个进程也不能获得其需要的资源,但另一个进程也不能获得其需要的自二、计算机操作系统死锁问题的形成机制事实上,就计算机操作系统的死锁问题而言,其虽然是如今给人类操作系统以及各个操作系统版本在实际的使用过程中经常出现的一类问题,并对用户的实际运用造成了一定的影响,而这种影响是不能凭空产生的,因为这种操作系统死锁问题有着一定的的形成机制。一般来说,造成计算机操作系统死锁的原因主要包括有两个方面,一方面是多个进程在系统资源使用上的竞争,即系统中所具有的共享资源并不能满足相关进程的需要,从而出现争夺的现象,而这种资源又可以具体分为硬件资源以及包括数据在内的软件资源。另一方面则是进程在进行顺序的安排上是非法的,这样一种非法的顺序也就必然导致计算操作系统出现混乱以及卡壳的现象。一般来说,计算机操作系统中的资源可以大致分为可剥夺性资源以及不可剥夺性资源,而就前者而言,当某一进程向系统请求要占用这一资源时,其完全可以为代替原先占用的那个进程,但是这种进程实际上又需要依赖相应的进程优先实现。即优先级高的可以剥夺优先级低的,反之则不成立。而包括打印机以及磁带机在内的后者则不可能实现这一剥夺行为,而且也正是这种不可剥夺性,使得其死锁发生的概率大大增加。当然,包括信号量使用不当以及程序设计不合理等在内的因素也会直接导致计算机操作系统死锁问题的发生。例如,进程与进程之间都在互相等待双方传来的消息,而这种消息如果使用不当则会使得相关进程不能顺利地向前推进,从而陷入一种死锁状态。不过,死锁若要产生,其就必须就要符合多个条件,即每一个资源只能被一个进程使用、进程在取得资源后不能强行剥夺以及两个或两个以上进程之间形成一种循环式的等待资源关系。三、死锁产生的条件(一)进程数条件1.参与死锁的进程最少是两个;2.参与死锁的进程至少有两个已经占有资源;3.参与死锁的所有进程都在等待资源;4.参与死锁的进程是当前系统中所有进程的子集。(二)必要条件1.互斥条件:至少有一个资源必须处于非共享模式(即一次只有一个进程使用)。如果另一个进程申请该资源,那么申请进程必须延迟直到该资源释放为止,涉及的资源是非共享的。2.不剥夺条件:资源不能被抢占(即只在进程完成其任务之后,才会释放其资源)。不能强行剥夺进程拥有的资源。3.请求和保持条件:一个进程必须占有至少一个资源,并等待另一资源,而该资源为其他进程占有进程在等待一新资源时继续占有已分配的资源。4.环路等待条件:有一组进程{P0,P1,...,Pn},P0等待的资源为P1所占有,P1等待的资源为P2所占有,Pn-1等待的资源为Pn所占有,Pn等待的资源为P0所占有,形成一个循环链。四个条件必须同时满足才会出现死锁,或者说只要使上述四个必要条件中的某一个不满足,则死锁就可以解除。四、计算机操作系统死锁问题的解决策略当然,当我们意识到计算机操作系统中死锁问题重要性之时,我们总不能听之任之,让其一直持续下去,相反的,我们总会在充分发现其具体内涵及形成机制之后,对其发生的构成要素进行破坏和抑制,干扰其具体形成过程,才能真正意义上将这种死锁问题的发生概率以及发生率及其所造成的影响控制在最小范围之内。笔者在总结自身工作经验的过程中发现,常用的死锁问题解决策略主要表现在以下几个方面:(一)死锁预防通常的处理方式有以下三种:1.打破不剥夺条件:强迫那些请求新资源而没有立即得到满足的进程暂时释放它已保持的其它资源。这种方法实现起来非常复杂,通常适用于CPU和主存,缺点是反复地申请和释放资源,降低了整个系统的吞吐量;2.打破部分分配条件:对某进程所要求的资源一次性地分配完毕缺点是致使系统资源的严重浪费,可能有进程已占有的资源而很少使用;3.打破环路等待条件:为系统中每类资源规定一个唯一的序号,而且要求每个进程都要严格按照递增的顺序请求资源。它基于动态分配的思想,所以资源利用率比前面一种方法要高。但同时也有其缺点:一是各资源的序号不宜经常变动,二是如果进程实际需要的资源顺序与排定的资源序号不同时,也会造成资源的浪费。(二)死锁的检测这种方法并不需要事先采用任何限制性措施,也不用检查系统是否已经进入不安全状态,允许系统在运行过程中发生死锁。但可通过系统设置的检测机构---锁监视器线程,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当措施,从系统中将已发生的死锁清除。死锁的检测也可以用称为系统资源分配图的有向图进行更精确地检测。这种图有一个结点的集合V和一个边的集合E组成。如果图没有环,那么系统就没有进程死锁。如果图有环,那么可能存在死锁。死锁状态的充分条件是当且仅当该状态的进程资源分配图是不可完全化简的。资源分配图的化简过程如下:1.找一个非孤立点进程结点且只有分配边,去掉分配边,将其变为孤立结点。2.把相应的资源分配给一个等待该资源的进程,即将某进程的申请边变为分配边。3.如果进程资源分配图中有环路,且涉及的资源类中有多个资源,则环路的存在只有产生死锁的必要条件而不是充分条件。如果能在进程资源分配图中消去此进程的所有请求边和分配边,成为孤立点。经一系列化简,使所有进程成为孤立结点。(三)死锁的预防死锁的预防是一种较简单和直观的事先预防的方法。通过设置某些限制条件,以破坏产生死锁的四个必要条件中的一个或几个来防止死锁的发生。1.破坏第一个条件。使资源可同时访问而不是互斥使用,这是个简单的方法,磁盘可用这种方法管理,但有许多资源往往是不能同时访问,所以这种做法许多场合行不通。2.破坏第二个条件。采用剥夺式调度方法可破坏第二个条件,但只适用于对存储资源和处理器资源的分配。当进程已经拥有一些资源,再去申请其他资源未获得成功时,如果主动释放资源(一种剥夺式),然后采取等待,待所需资源都空闲时,再一起向系统提出申请,也能防止死锁。此方法可以用AND型的信号量来实现。3.破坏第三个条件或第四个条件。许多防止死锁的办法施加于资源的限制条件太严格,会造成资源利用率和吞吐率低。两种比较实用的预防死锁的方法,它们能破坏第三个条件或第四个条件:执行前一次性申请全部资源,没有占有资源时才能分配资源。确保占有并等待条件不会在系统内出现,必须保证当一个进程申请一个资源时,它不能占有其他资源。一种可以使用的协议是每个进程在执行前申请并获得所有资源。另外一种协议允许进程在没有资源时才可申请资源;确保“非抢占”,为了确保这一条件不成立,可使用如下协议:如果一个进程占有资源并申请另一个不能立即分配的资源,那么其现已分配的资源都被抢占;确保“循环等待”,确保此条件不成立的方法是对所有资源类型进行完全排序,且要求每个进程按递增顺序来申请资源。(四)死锁的解除如果死锁发生会浪费大量系统资源,甚至导致系统崩溃。所以发生率死锁必须给予解除。可采用以下几种简单方法。1.立即结束所有进程的执行,并重新启动操作系统。方法简单,但以前工作全部作废,损失可能很大。2.撤销陷于死锁的所有进程,解除死锁继续执行。3.逐个陷于死锁的进程,回收其资源,直至死锁解除。4.剥夺陷于死锁的进程占有的资源,但并不撤销它,直至死锁解除。5.根据系统保存的checkpoint,让所有进程回退,直至足以解除死锁。6.当检测到死锁时,如果存在某些未卷入死锁的进程,而这些进程随着建立一些新的抑制进程能执行到结束,则它们可能释放足够的资源来解除死锁。(五)结束语经过上文的分析和介绍,我们对计算机操作系统死锁问题的内涵、形成机制、产生条件以及常用的解决策略等几个方面的内容有了一定的了解,从中我们可以深刻地认识到,就这种极大浪费系统资源并降低系统整体运行效率的死锁问题来说,其能否在计算机操作系统的实际运行中得到完善的解决显得尤为重要和必要。当然,正如我们在上文中说的那样,由于计算机操作系统自身、因素以及外在的人为操作因素等方面因素的影响,计算机操作系统的死锁问题经常发生,而这种发生实际上又是在多个必要条件均出现时才会出现,这样一来,我们便能够及时地把握这种形成机制,及时地采用相关的解决策略,从而完善地解决这一问题。
本文标题:浅谈计算机操作系统中死锁题
链接地址:https://www.777doc.com/doc-2082760 .html