苏州大学操作系统概念第七章.ppt

  1. 1、本文档共44页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
苏州大学操作系统概念第七章

安全算法 让Work和Finish作为长度为m和n的向量初始化: Work := Available Finish [i] = false for i - 1,3, …, n. 2. 查找i (a) Finish [i] = false (b) Needi ? Work If no such i exists, go to step 4. 3. Work := Work + Allocationi Finish[i] := true go to step 2. 4. 如果对所有i的 Finish [i] = true, 则系统处在安全状态。 是否满足进程Pi的资源请求算法 Requesti =进程 Pi 的资源请求向量. 如果Requesti [m] = k 则进程 Pi 想要资源类型为Rjm的k个实例 1. 如果 Requesti ? Needi 转 step 2. 否则报错, 因为进程请求超出了其声明的最大值 2. 如果 Requesti ? Available, 转 step 3. 否则 Pi 必须等待, 因为资源不可用. 3. 假设通过修改下列状态来分配请求的资源给进程Pi : Available := Available - Requesti; Allocationi := Allocationi + Requesti; Needi := Needi – Requesti;; 如果系统安全 ? 将资源分配给 Pi. 如果系统不安全 ? Pi 必须等待,恢复原有的资源分配状态 银行家算法的例子 5个进程P0到P4; 3个资源类型A(10个实例),B(5个实例),C(7个实例) 时刻Tn的快照: Allocation Max Available A B C A B C A B C P0 0 1 0 7 5 3 3 3 2 P1 2 0 0 3 2 2 P2 3 0 2 9 0 2 P3 2 1 1 2 2 2 P4 0 0 2 4 3 3 系统处在安全的状态,因为序列 P1, P3, P4, P2, P0 满足了安全的标准 Need A B C P0 7 4 3 P1 1 2 2 P2 6 0 0 P3 0 1 1 P4 4 3 1 例子续:P1 request (1,0,2) 检查Request ? Available(就是说,(1,0,2) ?(3,3,2)为真 Allocation Need Available A B C A B C A B C P0 0 1 0 7 4 3 2 3 0 P1 3 0 2 0 2 0 P2 3 0 2 6 0 0 P3 2 1 1 0 1 1 P4 0 0 2 4 3 1 执行安全算法表明序列P1, P3, P4, P0, P2 满足要求 思考: P4的请求(3,3,0)是否可以通过? P0的请求(0,2,0)是否可以通过? 5、死锁检测和恢复 死锁检测和恢复 允许进入死锁状态 检测死锁 恢复策略 每一种资源类型只有一个实例 维护等待图 节点是进程 Pi ? Pj表明Pi在等待Pj 定期调用算法来检查是否有环 一个检查图中是否有环的算法需要n2的操作来进行,n为图中的节点数 一个资源类型的多个实例 :Available :一个向量的长度m代表每一种资源类型有效的数目 Allocation: 一个n x m 的矩阵定义了当前分配的每一种资源类型的实例数目 Request: 一个n x m 的矩阵表明了当前的进程请求。如果Request[i,j]=k,那么进程Pi请求k个资源Rj的实例 检测算法 1. 让Work和Finish作为长度为m和n的向量初始化 (a) Work := Available (b) For i = 1,2, …, n, if Allocationi ? 0, then Finish[i] := false;otherwise, Finish[i] := true. 2. 找到满足下列条件的下标i (a) Finish[i] = false (b) Requesti ? Work 如果没有这样的i存在,转4 3. Work := Work + Allocationi Finish[i] := true 转 2. 如果有一些i, 1 ? i ? n , Finish[i] = false, 则系统处在死锁状态。而且, 如果 Finish[i] = false, 则进程 Pi 是死锁的。 算法需要m x n2 次操作来判断是否系统处于死锁状态 检测算法的例子 五个进

文档评论(0)

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

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

1亿VIP精品文档

相关文档