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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

【摘要】经济飞速发展,计算机的应用越来越广,而作为计算机的入口,操作系统

的研究越来越重要。而死锁问题是我们一直不断致力于的重要课题。死锁是多个进程为竞争系统资源或彼此间通信而引起的永久性的阻塞现象.本文主要讨论死锁的基本概念,然后讨论解决死锁的3种途径:死锁预防,死锁检测,死锁避免.

【关键字】死锁;死锁条件;死锁处理

一引言

在计算机系统中,系统资源是有限的,但是在往往涉及到进程对有限资源的占有问题,在早期的系统中,由于系统结构,规模以及系统资源分配等问题都相对简单,使随着计算机急速的不断发展,软件系统变得庞大复杂,系统资源的种类日益增多,而且许多资源是独占资源,有由于进程之间的相互通信等,使得系统出现死锁现象大大增加。死锁的出现,是系统无法正常运行,给系统带来了极大的危害。为此,关于死锁问题的研究已成为操作系统理论的重要课题之一。本文就操作系统的死锁相关问题进行讨论。

二死锁的概叙

死锁是进程死锁的简称,是由Dijkstra于1965年研究银行家算法时首先提出来的。它是计算机操作系统乃至并发程序设计中最难处理的问题之一。实际上,死锁问题不仅在计算机系统中存在,在我们日常生活中它也广泛存在。

1.什么是死锁

所谓死锁,是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产生了一种特殊现象死锁。

2.产生死锁的条件

计算机要能产生死锁问题必需满足如下的四个条件,缺一不可。

〈1〉互斥条件。即某个资源在一段时间内只能由一个进程占有,不能同时被两个或

两个以上的进程占有。这种独占资源如CD-ROM驱动器,打印机等等,必须在占有该资源的进程主动释放它之后,其它进程才能占有该资源。这是由资源本身的属性所决定的。如独木桥就是一种独占资源,两方的人不能同时过桥。

〈2〉不可抢占条件。进程所获得的资源在未使用完毕之前,资源申请者不能强行地从资源占有者手中夺取资源,而只能由该资源的占有者进程自行释放。如过独木桥的人不能强迫对方后退,也不能非法地将对方推下桥,必须是桥上的人自己过桥后空出桥面(即主动释放占有资源),对方的人才能过桥。

〈3〉占有且申请条件。进程至少已经占有一个资源,但又申请新的资源;由于该资源已被另外进程占有,此时该进程阻塞;但是,它在等待新资源之时,仍继续占用已占有的资源。还以过独木桥为例,甲乙两人在桥上相遇。甲走过一段桥面(即占有了一些资源),还需要走其余的桥面(申请新的资源),但那部分桥面被乙占有(乙走过一段桥面)。甲过不去,前进不能,又不后退;乙也处于同样的状况。

〈4〉循环等待条件。存在一个进程等待序列{P1,P2,...,Pn},其中P1等待P2所占有的某一资源,P2等待P3所占有的某一源,......,而Pn等待P1所占有的的某一资源,形成一个进程循环等待环。就像前面的过独木桥问题,甲等待乙占有的桥面,而乙又等待甲占有的桥面,从而彼此循环等待。

三.死锁的处理

前面介绍了死锁发生时的四个必要条件,只要破坏这四个必要条件中的任意一个条件,死锁就不会发生。这就为解决死锁问题提供了可能。一般地,解决死锁的方法分为死锁的预防,避免,检测与恢复三种。将在下面分别加以介绍

1死锁预防

(1)破坏”不可剥夺”条件

在允许进程动态申请资源的前提下规定,一个进程在申请新资源的要求不能立即得到满足时,便处于等待状态,而一个处于等待状态的进程的全部资源可以被剥夺.就是说,这些资源隐形的释放了,被剥夺的资源重新加入到资源表中,仅当该进程重新获得它原有的资源以及得到新申请的资源时,才能重新启动执行.具体实施方案有两个.

方案一:若一个进程已占用了某些资源,又要申请一个新的资源,在申请新的资源时,不能立即得到满足,在变为等待状态之前,该进程必须释放已占有的所有资源.

方案二:若一个进程申请某些资源,首先系统应检查这些资源是否可用,如果可用,就分配给该进程.否则,系统检查这些资源是否分配给另外某个等待进程.若是,则系统将剥夺所需资源,分配给这个进程.如果资源没有被等待进程占有,那么,该进程必须等待.在等待过程中,其资源也有可能被剥夺.

(2)破坏”请求和保持”条件

第一种发放是每个进程必须在开始执行前就申请它所需要的全部资源,仅当系统能满足进程的资源申请要求且把资源一次性分配给进程后,该进程才能开始执行.这是静态分配资源策略,而资源的动态分配是指进程需要使用资源时才提出申请,系统在进行分配.静态分配资源策略的优点是简单,安全,容易实施;但其缺点是言重浪费系统资源,会造成一些资源在很长时间内得不到使用,降低资源利用率.

第二种方法是仅当进程没有占用资源时才允许它去申请资源,如果进程已经占用了某些资源而又要在申请资源,则它应先归还所占的资源后再申请新资源.这种方法也存在着资源利用率低的缺点.

(3)破坏“循环等待”条件

采用资源有序分配策略,其基本思想是将系统中所有资源顺序编号,一般原则是,较为紧缺,稀少的资源的编号较大.进程申请资源时,必须严格按照资源编号的顺序进行,否则系统不予分配.即一个进程只有得到编号小的资源,才能申请编号较大的资源;释放资源时,应按编号递减的次序进行.

例如,设扫描仪,打印机,磁带机,磁盘的编号依次为 1.2..4.5.这样所有进程对资源的申请,严格的按编号递增的次序提出.

可以证明,采用资源有序分配策略,不会出现进程的循环等待,即破坏了循环等待条件.

下面我们以解决经典的进程同步问题-------------哲学家就餐问题来考查如何利用资源有序分配法防止死锁.

有5个哲学家以思考,用餐交替进行的方式生活,它们坐在一张圆桌边,桌子上有5个盘子

相关文档
最新文档