操作系统第二章 进程管理_new精要.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 二、 死锁的避免 死锁的避免是这样一种对付死锁的办法:系统在运行过程中采取动态的资源分配策略,保证系统不进入可能导致系统陷入死锁状态的所谓不安全状态,以避免死锁发生。 死锁的避免与死锁预防策略不同,它不对进程申请资源加任何限制,而是对进程提出的每一次资源请求进行动态检查,并根据检查结果决定是否分配资源以满足进程的请求。由于采用了动态的资源分配策略,所以资源利用率比死锁的预防办法高。 * 银行家算法 1965年Dijkstra根据银行家为顾客贷款的思想提出了一种保证系统杜绝死锁的方法(故称为银行家算法)。 * 银行家有一笔资金,n个顾客需要银行家提供贷款。顾客所需的全部资金可根据顾客的要求分期付给。如果顾客获得全部资金,肯定在一定时间内会将资金全部归还给银行家。由于n个顾客所需资金总数通常比银行家拥有的资金多,因此给顾客提供资金时需仔细斟酌,以免顾客得不到所要的全部资金而造成资源可能无法回收。 * 例如,银行家拥有的资金总数为10,顾客P,Q,R分别需要的贷款总数为8,3,9 若第一次P请求4,Q请求2,R请求2,则银行家还剩资金2,然后Q又请求1,于是Q所需资金全部被满足。一段时间之后,Q便将资金全部归还给银行家,这时银行家拥有资金4,P再次请求资金4,被满足后,P将归还所有资金,于是银行家拥有资金8,最后满足R的请求。 * 但如果P请求4,Q请求2被满足后,R请求3则不应分配。因为如果此时满足了R的请求,那么待Q下一次请求被满足且Q归还全部资金后,银行家仅拥有资金3,此数目今后既不能满足P,也不能满足R。P、R因得不到全部资金而无法继续,并且都不会归还部分资金给银行家。此时P、R便进入了死锁状态。 * 从上例可以看出,当顾客申请资金时,能否给予满足的关键是,考察这次提供资金会不会给今后的贷款造成障碍。 按上例中第一种情况贷款,每进行一步,余下的资金都保证总存在一种方法可满足顾客以后的需要,故系统处于安全状态。 但对第二种情况若满足了R的请求,虽余下的资金可以满足Q的请求,当并不能保证P和R的进一步需求,故系统处于不安全状态。 死锁避免正是通过确保系统随时处于安全状态来防止死锁的。 * (一)系统的状态 1.安全状态 设系统中有n个进程,若存在一个序列P1,P2,…,Pn,使得Pi(i=1,1,…,n)以后还需要的资源可以通过系统现有空闲资源加上所有Pj(ji)已占有的资源来满足,则称此时这个系统处于安全状态。这样的一个进程序列P1,P2,…,Pn为安全序列。 * 2.不安全状态 若在某一时刻,系统中不存在一个安全序列,则称系统处于不安全状态。 安全状态的例子 例:假定系统有三个进程P1、P2、P3,共有12台磁带机。进程P1总共要求10台磁带机,P2和P3分别要求4台和9台。设在T0时刻,进程P1、P2和P3已经获得5台、2台和2台,还有3台空闲没有分配。T0时刻系统是否安全? 进程 最大需求 已分配 可用 P1 10 5 3 P2 P3 4 2 2 9 T0时刻系统时安全的。这时存在一个安全序列P2,P1,P3 * 银行家算法 银行家算法是最有代表性的避免死锁算法,是Dijkstra提出的。其模型基于一个小城镇的银行家,他向一群客户分别承诺了一定金额的贷款,而他知道不可能所有客户同时都需要最大的贷款额。在这里,我们可将客户比作进程,银行家比作操作系统。银行家算法就是对每一个客户的请求进行检查,检查如果满足它是否会引起不安全状态。假如是,那么不满足该请求;否,那么便满足。 * 银行家算法的实质就是 : 要设法保证系统动态分配资源后不进入不安全状态,以避免可能产生的死锁。 即:每当进程提出资源请求且系统的资源能够满足该请求时,系统将判断如果满足此次资源请求系统状态是否安全,如果判断结果为安全,则给该进程分配资源,否则不分配资源,申请资源的进程将阻塞。 银行家算法的执行有个前提条件,即要求进程预先提出自己的最大资源请求,并且假设系统拥有固定的资源总量。 银行家算法中所用的主要的数据结构如下: (1)可利用资源向量Available (剩余或可用资源量),记录系统中各类资源的当前可利用数目。如果Available[j]=k,?表示系统中现有Rj类资源k个。 (2) 最大需求矩阵Max 每个进程对各类资源的最大需求量。 (3)Allocation 已为每个进程分配的数量或者说每个进程对各类资源当前的占有量。 (4)需求矩阵Need 某进程对各类资源尚需要的数目。 Need=Max-Allocation (5)请求向量Request 它记录某个进程当前对各类资源的申请量,是银行家算法的入口参数。

文档评论(0)

光光文挡 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档