计算机操作系统_第三章_处理机调度与死锁课稿.ppt

计算机操作系统_第三章_处理机调度与死锁课稿.ppt

  1. 1、本文档共81页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.资源有序申请 系统给每类资源赋予一个序号,每一个进程严格按照序号递增的顺序请求资源,释放则相反。此方法不可能形成资源占有与请求的环路,从而破坏环路等待条件。 优点:相对而言,系统利用率高,系统吞吐量大。 缺点: (1)限制设备扩充。系统事先确定资源序号,限制了新类型设备的增加。 (2)限制了进程对资源的请求,编程困难。 (3)资源浪费。当进程使用顺序与资源序号不相符时,也会造成资源浪费。 3.6.3 避免死锁 避免死锁的方法就是让系统处于安全状态中。 在避免死锁的策略中,允许进程动态地申请资源。 死锁避免:系统对进程运行过程中发出的每一个系统能够满足的资源申请进行安全检查,根据检查结果决定是否分配资源。若此次分配会导致系统进入不安全状态,则不予分配;否则予以分配。 1.安全状态 安全状态指系统能按某种进程顺序来为每个进程分配其所需资源,直至每个进程的最大需求,使每个进程都可顺序完成。若系统不存在这样一个序列,则称系统处于不安全状态,不安全状态一般会导致死锁。 2.安全状态实例 P95 3.由安全状态向不安全状态的转换 如果不按照安全序列分配资源,则系统可能会由安全状态进入不安全状态。 3.6.3 银行家算法避免死锁 单种资源的银行家算法描述: 假定一个银行家拥有资金,数量为∑,被N个客户共享。银行家对客户提出下列约束条件: 每个客户必须预先说明自己所要求的最大资金量 每个客户每次提出部分资金量申请和获得分配 如果银行满足了客户对资金的最大需求量,那么,客户在资金运作后,应在有限时间内全部归还银行。 银行则保证:若一个客户所要求的最大资金量不超过∑,则银行一定接纳该客户,并处理他的资金需求;银行在收到一个客户的资金申请时,可能因资金不足而让客户等待,但保证在有限时间内让客户获得资金。 三种资源分配状态:(a)安全 (b) 安全 (c) 不安全 银行家算法就是对每一个请求进行检查,检查这次资源申请是否会导致不安全状态。若是,则不满足该请求;否则便满足。 1.银行家算法中的数据结构 (1) 可利用资源向量Available[m]。 每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。如果Available[j]=K,则表示系统中现有Rj类资源K个。 (2) 最大需求矩阵Max[n][m]。 定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i][j]=K,则表示进程i需要Rj类资源的最大数目为K。 1.银行家算法中的数据结构 (3)分配矩阵Allocation[n][m] 定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i][j]=K,则表示进程i当前已分得Rj类资源的数目为K。 (4)需求矩阵Need[n][m] 用以表示每一个进程尚需的各类资源数。如果Need[i][j]=K,则表示进程i还需要Rj类资源K个,方能完成任务。 Need[i][j]=Max[i][j]-Allocation[i][j] 2.银行家算法 设Requesti是进程Pi的资源请求向量,如果Requesti[j] =K,表示进程Pi需要K个Rj类型的资源。当Pi发出资源请求后,系统按下述步骤检查: (1)如果Requesti[j]≤Need[i][j] ,便转向步骤2;否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。 (2)如果Requesti[j]≤Available[j],便转向步骤(3);否则,表示尚无足够资源,Pi须等待。 (3)系统试着把资源分配给进程Pi,并修改下面数据结构中的数值: Available[j]=Available[j]-Requesti[j]; Allocation[i][j]=Allocation[i][j]+Requesti[j];Need[i][j]=Need[i][j]-Requesti[j]; (4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则, 将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。 3.安全性算法 (1)设置两个向量: ① 工作向量Work[m]:表示系统可提供给本进程继续运行所需的各类资源数目,在执行安全算法开始时,Work=Available; ② Finish[n]: 它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先使Finish[i]=false; 当有足够资源分配给进程i时,再令Finish[i]=true。 (2)从进程集合中找到一个能满足下述条件的进程 ① Finish[i]=false; ② Need[i][j

文档评论(0)

1112111 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档