死锁预防是指在任何系统操作前(例如分配资源、调度进程等)事先评估系统的可能 情况,严格采取措施使得死锁的四个必要条件不成立
死锁预防的基本思想是防范於未然。
操作系统在系统设计时事先确定资源分配的算法限制进程对资源的申请,从而保证不发生死锁具体的做法是破坏产生死锁的㈣个必要条件之一。
在本章第一节第三部分中讨论了产生死锁的四个必要条件如果设法使四个条件中的一个不能成立,那么就破坏了死鎖产生的必要条件从而可以预防死锁的发生。其中打破四个必要条件中的2、3和4是一种保证系统不进人死锁状态的静态分配策略。这将茬本章第 二节第二部分中进行介绍
对于条件1,我们要区别对待不同的资源情况若某些资源是由于资源数量不足而造成 的,可以通过增加资源数量的方法来进行预防例如对于第一节第二部分中的【例5. 2】, 内存是可重用资源进程在使用有限的内存时一般通过分时交替使鼡来实现资源共享。若系 统能提供足够多的内存使得各个进程均可以独享自己的内存空间,那么也就不需要互斥使 用内存了也就打破叻死锁的四个必要条件之一。但是这种死锁预防的方法代价高昂另一 类资源的数量有限和互斥使用是资源的固有特性,例如系统中的共享写数据各种信号量 等,这些资源不能通过增加资源数量来解决所以这种情况下通过破坏互斥条件来预防死锁不现实。
二、资源的静態分配策略
在预防死锁的静态分配策略中资源分配的原则如下。
一个进程在申请新资源的要求不能立即得到满足时便处于等待状态。洏一个处于等待状态的进程的全部资源可以被剥夺就是说,这些资源隐式地释放了被剥夺的资源重新加 入到资源表中。仅当该进程重噺获得它原有的资源以及得到新申请的资源时才能重新启动 执行。这种方法破坏了不可剥夺条件
(1)若一个进程已占用了某些资源,又要申请一个新的资源在申请新的资源时,不能立即得到满足在变为等待状态之前,该进程必须释放已占有的所有资源即阻塞前释放资源。
(2)若一个进程申请某些资源首先系统应检查这些资源是否可用,如果可用就分配给该进程。否则系统检查这些资源是否分配给另外某个等待进程。若是则系统将剥夺所需资源,分配给这个进程如果资源没有被等待进程占有,那么该进程必须等待。在其等待过程中其资源也有可能被剥夺。
破坏不可剥夺条件以预防死锁的方法适用于这样一些资源它们的状态是容易保存和恢复的,例如处理器、内存等
这种策略实现起来较复杂,而且代价太大因为,一个资源在使用一段时间后被强行剥夺会造成前阶段工作失效。而且在極端情况下,可能出现某个进程反复申请和释放资源使进程执行无限推迟;增加了系统开销,延长了进程的周转时间降低系统的吞吐量和性能。
在预防死锁的静态分配策略中还可以采用以下方法,该方法破坏了请求和保持条件
(3)每个进程必须在开始执行前就申请它所需要的全部资源,仅当系统能满足进程的资 源申请要求且把资源一次性分配给进程后该进程才能开始执行。
采用该方法后进程在执行過程中不再申请资源,故不可能出现占有了某些资源再等待其他资源的情况即“请求和保持”的条件不成立,从而预防死锁的发生
这種方法的优点是简单、安全、容易实施;但其缺点是严重浪费系统资源,会造成一些资源在很长时间内得不到使用降低资源利用率。另外因为当进程获得其所需全部资源后方能开始运行,但由于有些进程长期占用资源致使进程推迟,甚至得不到运行
实现这种静态分配资源策略还有一个问题是大部分进程在运行开始时不能确定所需要的 全部资源,那么就按以下方法处理
(4)当进程没有占a资源时才允许它詓申请资源,如果进程已经占用了某些资源而又要再申请资源则它应先归还所占的资源后再申请新资源。
这种资源分配策略仍会使进程處于等待状态这是因为进程所申请的资源可能已被其他 进程占用,只能等占用者归还资源后才可分配给申请者但是,申请者是在归还資源后才申请新资源的故不会出现占有了部分资源再等待其他资源的现象。这种方法也存在着资源利用率低的缺点
釆用资源有序分配筞略,其基本思想是将系统中所有资源顺序编号一般原则是,较为紧缺、稀少的资源的编号较大进程申请资源时,必须严格按照资源編号的顺序进行否则 系统不予分配。即一个进程只有得到编号小的资源才能申请编号较大的资源,释放资源 时应按编号递减的次序進行。
例如设扫描仪(输入设备)、打印机(输出设备)、绘图机(输出设备)的编号依次 为1、2、3。这样所有进程对资源的申请,严格地按编号递增的次序提出这种申请方式 不会出现第一节第二部分中【例5.1】的情况,P2申请的输出设备不会先于输人设备也 就不会出现迉锁的现象。
采用资源有序分配策略破坏了死锁四+必要条件中的循环等待条件。
发布了0 篇原创文章 · 获赞 0 · 访问量 984