




已阅读5页,还剩109页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第三章处理机调度与死锁 3 1分级调度3 2作业调度3 3进程调度3 4调度算法3 5死锁问题3 6死锁的预防与避免3 7利用银行家算法避免死锁3 8死锁的检测与解除 处理机调度的工作是对CPU资源进行合理的分配使用 以提高处理机利用率 并使各用户公平地得到处理机资源 所以 本章的主要问题是 学习目标 掌握处理机的三级调度掌握作业调度及进程调度的概念理解调度算法的评价准则掌握并灵活运用常用的几种作业调度 进程调度算法掌握死锁的概念 产生的原因及死锁的必要条件掌握死锁的预防方法及利用银行家算法避免死锁的方法掌握死锁的检测与恢复的方法 并能灵活运用 如下图所示 get程序负责人输入序列f中读取字符并送到缓冲区s中 copy程序把缓冲区s中的数据复制到缓冲区t中去 put程序从缓冲区t中取出数据打印 并且 缓冲区一次只允许一个程序操作 请用PV操作来实现这三个程序之间的同步与互斥关系 解 设信号量empty1 empty2分别表示缓冲区s和t是否为空 初值为1 full1 full2表示缓冲区s和t是否有记录可供处理 初值为0 Main intempty1 1 intempty2 1 intfull1 0 intfull2 0 cobegin get copy put get while 1 从磁盘读一个记录 p empty1 将记录存入缓冲区s v full1 copy while 1 p full1 从缓冲区s中取出一个记录 v empty1 p empty2 将记录存入缓冲区s v full2 put while 1 p full2 从缓冲区t中取出一个记录 p empty2 打印记录 调度 选出待分派的作业或进程 处理机调度的目的是分配处理机 一个批处理型作业 从进入系统并驻留在外存的后备队列上开始 直至作业运行完毕 可能要经历的三级调度 高级调度低级调度中级调度 3 1分级调度 3 1 1调度的层次 1 作业调度作业调度又称为高级调度或长调度 用于选择把外存上处于后备队列中的哪些作业调入内存 并为它们创建进程 分配必要的资源 然后 再将新创建的进程排在就绪队列上 准备执行 在批处理系统中 需要有作业调度的过程 以便将它们分批地装入内存 无须再配置作业调度机制 在分时系统和实时系统中 通常也不需要作业调度 9 一个作业从提交给计算机系统到执行结束退出系统 一般都要经历提交 后备 执行和完成等4个状态 提交状态 一个作业在其处于从输入设备进入外部存储设备的过程称为提交状态 后备状态 也称为收容状态 若一个作业的全部信息已全部被输入进输入井 则在它还未被调度去执行之前 该作业处于后备状态 执行状态 作业调度程序从后备作业中选取若干个作业到内存投入运行 它为被选中作业建立进程并分配必要的资源 这时 这些被选中的作业处于执行状态 完成状态 当作业运行完毕 但它所占用的资源尚未全部被系统回收时 该作业处于完成状态 10 2 对换 又称交换调度或中级调度 其主要任务是按照给定的原则和策略 将处于外存交换区中的就绪状态或等待状态的进程调入内存 或把处于内存就绪状态或内存等待状态的进程交换到外存交换区 11 3 进程调度 进程调度又称为低级调度或微观调度 其主要任务是按照某种策略和算法 将处理机分配给一个处于就绪状态的进程 进程调度可分为下列两种方式 1 非抢占方式 非抢占方式不允许进程抢占已经分配出去的处理机 2 抢占方式 抢占调度方式允许调度程序根据某种原则 暂停某个正在执行的进程 将处理机收回 重新分配给另一个进程 12 抢占原则 优先权原则 优先权高的进程抢占处理机 短作业优先原则 短作业 进程 抢占当前较长作业 进程 的处理机 时间片原则 各进程按时间片运行 当一个时间片用完后重新调度 第3章处理机调度与死锁 3 1 2 作业与进程的关系 作业是用户向计算机提交任务的任务实体 进程是计算机为了完成用户任务实体而设置的执行实体 计算机要完成一个任务实体 必须要有一个以上的执行实体 一个作业总是由一个以上的多个进程组成 分时系统中无作业的概念 进程几乎存在于所有多道程序设计系统中 3 2作业调度 作业调度主要是完成作业从后备状态到执行状态的转换 以及从执行状态到完成状态的转换 第3章处理机调度与死锁 16 3 2 1作业调度的功能 1 记录系统中各作业的状态图 作业控制块 第3章处理机调度与死锁 17 2 从后备队列中挑选出一部分作业投入执行 作业调度程序根据选定的调度算法 从后备作业队列中挑选出若干作业去投入执行 3 为被选中作业做好执行前的准备工作 作业调度程序为选中的作业建立相应的进程 并为这些进程分配它们所需要的系统资源 如分配给它们内存 外存 外设等 4 在作业执行结束时做好善后处理工作 包括输出作业管理信息 回收该作业所占用的资源 撤销与该作业有关的全部进程和该作业的作业控制块等等 作业从后备状态到执行状态以及从执行状态到完成状态的转换过程如图 3所示 第3章处理机调度与死锁 18 按调度算法 从后备作业中选出一作业 调用存储管理 设备管理程序 审核资源要求 分配资源 调用进程管理程序建立进程 进程调度 放弃该作业 调用存储管理 设备管理回收分配给该作业的全部资源 调用会计程序 计算该作业的执行费用 撤销该作业的所有进程及作业的JCB 调度下一个作业 后备作业队列空 资源要求能满足 是 出口 否 否 图3 3 a 作业从后备状态到执行状态 b 作业从执行状态到完成状态 是 第3章处理机调度与死锁 19 3 2 2调度算法的评价及准则 1 面向用户的准则2 面向系统的准则 20 1 面向用户的准则 1 周转时间短周转时间 是指作业被提交给系统开始 到作业终止为止的这段时间间隔 也称为作业周转时间 它包括四部分时间 a 作业在外存后备队列上等待调度的时间 b 进程在就绪队列上等待进程调度的时间 c 进程占用CPU执行的时间 d 进程等待I O操作完成的时间 第3章处理机调度与死锁 21 作业i的周转时间Ti可定义为 Ti Tei Tsi其中 Tei为作业i的完成时间 Tsi为作业i的提交时间 平均周转时间为 T 作业的周转时间T与系统为它提供服务的时间 即作业要求运行时间 Ts之比 称为带权周转时间 即 第3章处理机调度与死锁 22 带权周转时间W Ts因为周转时间T 等待时间 运行时间Ts 因此 W也可表示为 W 1 等待时间 运行时间从公式可以看出 W 1 即W的最小值为1 可以看出 带权周转时间越接近1 则该作业相对等待时间越短 系统性能越高 而平均带权周转时间可表示为 W 第3章处理机调度与死锁 23 响应时间快 所谓响应时间 是指从用户提交一个作业请求开始 直至系统首次产生响应为止的时间 它包括三部分时间 从键盘输入的请求信息传送到处理机的时间 处理机执行响应处理的时间 将所形成的响应信息在终端显示器上显示出来的时间 截止时间的保证 所谓截止时间 是指某任务必须开始执行的最晚时间 或必须完成的最晚时间 优先权准则 调度程序根据任务的优先权确定先选中哪个作业 第3章处理机调度与死锁 24 2 面向系统的准则 系统的吞吐量 处理机的利用率 各类资源的平衡利用 第3章处理机调度与死锁 25 面向系统的调度性能准则 吞吐量 单位时间内系统所完成的作业数 跟作业本身特性和调度算法都有关系 批处理系统 评价批处理系统性能的重要指标 与作业的平均长度有关 对于大型作业一般吞吐量约为每小时一道作业对于中 小型作业 其吞吐量则可达到数十道作业 例 有如下三道作业 系统为他们服务的顺序是 1 2 3 求平均周转时间和平均带权周转时间 3 3进程调度 要解决的问题 WHEN 何时分配CPU 进程调度的时机WHAT 按什么原则分配CPU 进程调度算法HOW 如何分配CPU CPU调度过程 进程的上下文切换 1 进程调度的功能 进程调度的任务是控制协调进程对CPU的竞争 即按一定的调度算法从就绪队列中选中一个进程 把CPU的使用权交给被选中的进程 进程调度的功能 1 记录所有进程的运行状况 静态和动态 2 选择适当的进程分派CPU 3 完成进程上下文切换 2 进程调度的时机 当一个进程运行完毕 或由于某种错误而终止运行 完成任务 执行完系统调用 在系统程序返回用户进程时 可认为系统进程执行完毕 从而可调度选择一新的用户进程执行 完成任务 执行中的进程自己调用的阻塞原语将自己阻塞起来进入等待状态 等待资源 执行中的进程执行了P原语操作 从而因资源不足而被阻塞 或调用了V原语操作激活了等待资源的进程队列 等待资源 执行中的进程提出I O请求后被阻塞 等待资源 分时系统中时间片到 时间片到 当有一个优先级更高的进程就绪 可抢占式 例如 新创建一个进程 一个等待进程变成就绪 发现重调标志 引起进程调度的原因有以下几类 3 进程调度的方式 可抢占式Preemptive 可剥夺式 当有比正在运行的进程优先级更高的进程就绪时 系统可强行剥夺正在运行进程的CPU 提供给具有更高优先级的进程使用 不可抢占式Non preemptive 非剥夺式 某一进程被调度运行后 除非由于它自身的原因不能运行 否则一直运行下去 在进程 上下文 中切换的步骤保存处理器的上下文 包括程序计数器和其它寄存器用新状态和其它相关信息更新正在运行进程的PCB把原来的进程移至合适的队列 就绪 阻塞选择另一个要执行的进程更新被选中进程的PCB从被选中进程中重装入CPU上下文 作业调度与进程调度 作业调度为进程活动做准备 进程调度使进程活动起来 作业调度次数少 进程调度频率高 有的系统无作业调度 但进程调度必不可少 3 4调度算法 返回 针对不同的系统 往往采用的调度算法不相同 在操作系统中存在着多种调度算法 通常有的算法适用于作业调度 有的算法适用于进程调度 有的两者都适应 调度算法是指 根据系统的资源分配策略所规定的资源分配算法 3 4 1单道批处理系统的调度算法1 先来先服务 FCFS 调度算法先来先服务 FCFS 调度算法既可用于作业调度 也适用于进程调度 该算法是按照作业或进程到达的先后次序来进行调度 2 短作业 进程 优先调度算法短作业调度算法 SJF 或短进程调度算法 SPF 是指对短作业或短进程优先调度的算法 短作业优先调度算法对短作业带来明显的改善 同时降低了作业的平均周转时间 提高了整个系统的性能 先来先服务调度算法 FCFS FirstComeFirstServe 作业调度中每次从后备作业队列中 选择一个或多个最先进入该队列的作业调入内存 为它们分配资源 创建进程 然后放入就绪队列 进程调度时每次从就绪队列中 选择一个最先进入该队列的进程分配处理机使之运行 直到完成或阻塞后 才放弃处理机 既可用于作业调度 也可用于进程调度 算法特点 是一种最简单的调度算法 既可以用于作业调度也可以用于进程调度 FCFS firstcomefirstserve 算法有利长作业 进程 而不利于短作业 进程 有利CPU繁忙型作业 而不利于I O繁忙型作业 先来先服务 FCFS 调度算法举例 短作业优先调度算法 SJF ShortestJobFirst 基本思想 从后备队列中选择一个或若干个估计运行时间最短的作业调入内存运行 通常后来的短作业不抢先正在执行的作业 在一般情况下这种调度算法比先来先服务调度算法的效率要高一些 实现相对先来先服务调度算法要困难些 如果作业的到来顺序及运行时间不合适 会出现饿死现象 例如 系统中有一个运行时间很长的作业J 和几个运行时间小的作业 然后 不断地有运行时间小于J的作业的到来 这样 作业J就得不可调度而饿死 另外 作业运行的估计时间也有问题 又称为 短进程优先 SPN ShortestProcessNext 这是对FCFS算法的改进 其目标是减少平均周转时间 既可用于作业调度 也可用于进程调度 什么是饥饿 死锁和饥饿的主要区别是什么 饥饿现象是指某进程具备运行条件 但总受到其他进程的影响 一直轮不到 或者很难轮到 该进程运行 系统中发生饥饿现象时至少有一个具备运行条件进程被无限期地推迟执行 但死锁是某进程等待一个决不会发生的事件 而因不具备运行条件永远不可执行 SJF的特点 优点 缩短作业的等待时间 提高系统的吞吐量 平均周转时间和平均带权周转时间短 缺点 对长作业非常不利 如果有一长作业进入系统的后备队列 由于总是优先调度那些短作业 进程 将导致长作业长期不被调度 完全未考虑作业的紧迫程度 不能保证紧迫性作业 进程 会被及时处理 作业 进程 的长短根据用户所提供的估计执行时间而定的不一定能真正做到短作业优先调度 先来先服务调度算法和短作业优先调度算法比较举例 3 高响应比优先调度算法 高响应比优先调度算法又称为HRN调度算法 响应比R可定义如下 R 已等待时间 要求服务时间 要求服务时间即 R 1 已等待时间 要求服务时间对于同样长度的作业 其R值可以从其等待调度的时间长短来区分 同样等待时间的作业 要求执行时间少的作业R值高 因此 它既照顾了短作业 又考虑了作业的等待时间 当然 在利用该算法时 每次在进行调度之前 都要先计算相应比 因此增加了系统的开销 第3章处理机调度与死锁 50 3 4 3优先级调度算法 优先级调度算法也叫做优先权调度算法 可做为作业调度或进程调度策略 这种算法可用于批处理系统 也可用于实时系统中 1 优先级调度算法的类型 1 非抢占式优先级调度算法 2 抢占式优先级调度算法2 优先级的类型在优先级调度算法中 优先级用来表示作业或进程所享有的调度优先权 该算法的关键是确定进程或作业的优先级 确定优先级的方法有两类 第3章处理机调度与死锁 51 1 静态优先级静态优先级是在创建进程时确定的 且在进程的整个运行期间保持不变 2 动态优先级动态优先级是指 在创建进程时所赋予的优先级 是随进程的推进或随其等待时间的增加而改变的 以便获得更好的调度性能 第3章处理机调度与死锁 52 例3 有一个具有两道作业的批处理系统 作业调度采用短作业优先的调度算法 进程调度采用以优先数为基础的抢占式调度算法 假设优先数小的优先级别高 如下表所示的作业序列 1 列出所有作业进入内存的时间及作业结束时间 2 计算平均周转时间 第3章处理机调度与死锁 53 解 1 各作业进入时间和结束时间如下 第3章处理机调度与死锁 54 2 根据周转时间 完成时间 提交时间 可得各作业的周转时间为 TA 11 10 10 00 70 分钟 TB 10 50 10 20 30 分钟 TC 12 00 10 30 90 分钟 TD 12 20 10 50 90 分钟 平均周转时间 TA TB TC TD 4 70 分钟 第3章处理机调度与死锁 55 3 6死锁问题 一个死锁的例子 如下图所示 系统中的两个进程都因等待对方的临界资源而不能继续运行 这种现象称为死锁 该例中的临界资源R1和R2可能是打印机 磁带机 缓冲区等 1 死锁的定义 死锁的定义 所谓死锁 是指多个进程循环等待其它进程占有的资源 因而无限期地僵持下去的局面 也可以说死锁是指进程之间无限期地互相等待永不发生的事件 死锁举例 系统中共有5台打印机 进程A需要4台 进程B需要4台 进程A B并发执行时进程A已经占3台 进程B已经占2台 则此时陷入死锁状态 产生死锁的原因 一是各进程竞争有限的资源可剥夺性资源 CPU RAM等 非剥夺性资源 打印机 磁带机等 临时性资源 通信数据 系统中配备的非剥夺性资源的数量不能满足诸进程运行的需要时 会使进程因争夺资源而陷入僵局 系统提供的资源数量有限 远不能满足并发进程对资源的需求 可将系统中的资源分为两类 可剥夺性资源和不可剥夺性资源 可剥夺性资源是指 某进程在获得这类资源后 该资源可被其他进程抢占 如处理机 内存 优先权高的进程可以剥夺优先权低的进程的处理机 内存区可由内存管理程序把一个进程从一个存储区移到另一个存储区 即剥夺了该进程原来占有的存储区 不可剥夺性资源是指 进程一旦占有该资源 就不可抢占 不管其它进程的优先权是否高于当前进程 只能在该进程用完后自行释放 这种资源如打印机 磁带机等 大多数情况下 我们所讲引起的死锁的资源竞争 是指对于不可剥夺性资源的竞争 另外一种因资源竞争而死锁的资源 是一些临时性资源 也称为消耗性资源 这种资源被另一进程使用很短时间而以后便无用的资源 如消息等 第3章处理机调度与死锁 60 P1 Release s1 Request s3 P2 P3 Release s2 Release s3 Request s1 Request s2 P1 Request s3 Release s1 P2 P3 Request s1 Request s2 Release s2 Release s3 产生死锁的原因二是进程推进顺序不合理 进程在运行过程中 请求和释放资源的顺序不当 也同样会导致产生进程死锁 如在图3 7中 两进程并发执行 占有资源并申请另一资源 这时因各进程互相等待另一进程释放临界资源而陷入死锁状态 如果此时先让进程P1运行 待进程P1获得它所需的两个资源R1和R2后 再马上让P2开始运行 这样就可以避免死锁的发生 以后我们将要讨论的银行家算法 就是要找到一个合适的安全的进程推进顺序 以保证系统的正常运行 2 产生死锁的必要条件 只有4个条件都满足时 才会出现死锁 1 互斥条件 对于一个排它性资源 某一时刻最多只能由一个进程占有 不能同时分配给两个以上的进程 必须要在占有该资源的进程放弃该资源后 其它进程才能占有该资源 如打印机是临界资源 各进程必须互斥地使用 2 占有且申请条件 进程至少已经占有一个资源 但又申请新的资源 由于该资源已被另外进程占有 此时该进程阻塞 但是 它在等待新资源时 仍不释放已占有的资源 3 不可抢占条件 也称为不剥夺条件 进程所获得的资源在未使用完毕之前 资源申请者不能强行地从资源占有者进程夺取该资源 而只能等待占有该资源的进程释放该资源后 其它进程才可以使用 4 环路条件 如果死锁产生 则一定存在一个进程等待序列 P1 P2 Pn 其中P1等待进程P2所占有的资源 P2等待进程P3所需的资源 Pn 1等待进程Pn所占有的资源 Pn等待进程P1所占有的资源 形成一个循环等待的环路 上面四个条件是在死锁发生时同时出现的 我们可以利用它的逆否命题 即 四个条件中只要有一个不满足 则死锁不会发生 这正是我们预防死锁所需考虑的方法 试题 用下图中交通死锁情况说明导致死锁的四个必要条件是否成立 答 图中导致死锁的四个条件成立 2分 互斥 每条道路只能被一辆车占用 1分 占用并等待 每辆车都占用了一段道路 并等待其前方的道路被释放 1分 非抢占 资源不可抢占 单行线 汽车不能抢路超车 1分 循环等待 每辆车都等待着前方的汽车把路让出来 且形成了一个环路 1分 3 6 3解决死锁问题的基本方法 为保证系统的正常运行 应事先采取措施 预防或避免死锁的发生 在系统已出现死锁后 要及时检测到死锁并解除死锁 目前用于处理死锁问题的方法有以下几种 1 死锁的预防2 死锁的避免3 死锁的检测4 死锁的解除 1 死锁的预防采取某种策略 d限制并发进程对资源的请求 从而保证死锁的必要条件在系统执行的任何时间都不能得到满足 2 死锁的避免是指系统在分配资源时 根据资源的使用情况提前做出预测 给定一个合适的安全的进程推进顺序 从而避免死锁的发生 实现起来有一定的难度 但在一些较完善的系统中 常用这种方法 第3章处理机调度与死锁 71 3 死锁的检测 允许系统发生死锁 系统设有专门的机构 当死锁发生时 该机构能够检测到死锁的发生 并能确定参与死锁的进程及相关资源 第3章处理机调度与死锁 72 4 死锁的解除 这是与死锁检测相配套的措施 用于将进程从死锁状态中解脱出来 一般地 由于操作系统的并发与共享以及随机性等特点 通过预防和避免死锁的手段达到排除死锁的目的 这是一个十分困难的事 需要相当大的系统开销 对于资源的利用也不够充分 死锁的检测与解除则相反 不必花费多少执行时间就能发现死锁和从死锁中恢复出来 因此 在实际操作系统中 很多都采用了后两种方法 第3章处理机调度与死锁 73 3 7死锁的预防与避免 在系统中采用预防和避免死锁的方法 都是为了防止死锁的发生 它们在实现上也分别采用了不同的原理 死锁的预防是根据死锁的四个必要条件 即只要有一个条件不满足 则死锁不发生 死锁的避免 是给系统中并发执行的进程 找到一个安全的推进顺序 第3章处理机调度与死锁 74 3 7 1死锁的预防 死锁的四个必要条件中 第一个条件即 互斥条件 是指对于可分配的资源要互斥使用 这是由资源的固有特性来决定的 不可改变 因此 我们从打破四个必要条件的后三个 使它们之中的一条不成立 来达到预防死锁的目的 具体有三种方法 摒弃占有且申请条件 摒弃不可抢占条件 摒弃环路条件 第3章处理机调度与死锁 75 摒弃占有且申请条件 有两种方法 可以采用资源的静态预分配策略 或释放已占资源策略 资源的静态预分配指在进程运行以前 一次性地向系统申请它所需的全部资源 如果某个进程所需的全部资源得不到满足 则不分配任何资源 此进程暂不执行 只有当系统能够满足当前进程的全部资源的需求时 才一次性地将所申请的资源全部分配给该进程 这种方法存在一些缺点 一般情况下 一个进程在执行之前不可能知道它所需的全部资源 因为进程执行时是动态的 资源的利用率低 无论所分配资源何时用到 一个进程只有在占有所需全部资源后才能执行 降低了进程的并发性 因此系统的效率不高 由于资源有限 能分配到全部资源的进程数量必然减少 第3章处理机调度与死锁 76 2 释放已占资源策略 这种策略仅当进程没有占用资源时才允许它去申请资源 如果进程已经占用了某些资源而又要再申请资源 则它应先归还所占的资源后再申请新资源 例如 进程对存放在磁带机上的文件进行处理 然后将处理的结果打印输出 进程可以先申请磁带机 在得到磁带机后进程就可以开始执行 它启动磁带机 读出文件后进行处理 把处理后的文件保存在自己的工作区 然后 释放磁带机 再申请打印机 当得到打印机后 就可把处理好的文件打印输出 这种方法仍会使一些进程处于等待资源状态 进程所申请的资源可能已被其它进程占用 只能等待占用者进程释放资源后 系统才可能分配给申请进程 第3章处理机调度与死锁 77 摒弃不可抢占条件 我们采取的策略是隐式抢占 可以约定 如果一个进程已经占有了某些资源又要申请另外的资源 而被申请的资源不满足时 该进程必须等待 同时释放已占有的资源 以后再进行申请 它所释放的资源可以重新被分配给其它的进程 这就相当于该进程占有的资源被隐式地抢占了 这种预防死锁的方法实现起来较为困难 第3章处理机调度与死锁 78 摒弃环路条件 实行资源的有序分配策略 即把资源事先分类编号 按序分配 使进程在申请 占有时不会形成环路 例如 令输入机的序号为 打印机的序号为 磁带机为 磁盘为 等等 所有进程对资源的请求必须严格按照资源序号递增的次序提出 这样 在资源分配图中 保证不会再存在环路 第3章处理机调度与死锁 79 这些预防死锁的策略与前面两种策略相比 其资源利用率和系统吞吐量 都有较为明显的改善 但也存在缺点 各类资源所分配的序号必须相对稳定 这就限制了新类型设备的增加 考虑到大多数作业在实际使用资源时的顺序 但也经常会发生这样的情况 作业使用各类资源的顺序 与系统规定的顺序不同 造成对资源的浪费 为方便用户 系统对用户在编程时所施加的限制条件应尽量多 然而这种按规定次序申请的方法 必然会限制用户自然 简单地编程 第3章处理机调度与死锁 80 预防死锁小结 基本思想 打破产生死锁的四个必要条件中的一个或者几个 排除死锁的静态策略 策略 资源预先分配策略资源有序分配策略 3 7 2死锁的避免 以上我们讲到的死锁的预防是排除死锁的静态策略 它使产生死锁的四个必要条件不能同时具备 从而对进程申请资源的活动加以限制 以保证死锁不会发生 这里我们再介绍死锁的避免 它是一种排除死锁的动态策略 它不限制进程有关申请资源的命令 而是对进程所发出的每一个申请资源的活动加以动态地检查 并根据检查结果决定是否进行资源分配 即 在资源分配过程中预测是否会出现死锁 如不会死锁 则分配资源 若有发生死锁的可能 则加以避免 这种方法的关键是确保资源分配的安全性 第3章处理机调度与死锁 82 1 安全状态 由于在避免死锁的策略中 允许进程动态地申请资源 系统需提供某种方法在进行资源分配之前 先计算资源分配的安全性 若此次分配不会导致系统进入死锁状态 则将资源分配给进程 否则 进程等待 所谓安全状态 是指系统中的所有进程能够按照某种次序分配资源 并且依次地运行完毕 这种进程序列 P1 P2 Pn 就是安全序列 如果存在这样一个安全序列 则系统是安全的 我们称此时系统处于安全状态 否则 如果系统不存在这样一个序列 则称系统是不安全的 第3章处理机调度与死锁 83 例1 有三个客户C1 C2 C3 向银行家贷款 该银行家的资金总额为10个资金单位 其中C1客户要借9个资金单位 C2客户要借3个资金单位 C3客户要借8个资金单位 总计20个资金单位 若T0时刻 客户占用及还需资源的状态如下图所示 银行家该如何分配资金 第3章处理机调度与死锁 84 剩余的资源单位数是10 2 2 4 2 故 此时银行家只有将资金分配给C2 才能最终收回贷款 然后 再将资金依次分配给C3和C1 这样银行家能最终收回所有的贷款 这里就存在一个安全序列 即 C2 C3 C1 我们说此时系统是安全的 第3章处理机调度与死锁 85 2 由安全状态向不安全状态的转化 如果不按照安全序列的顺序分配资源 则系统可能由安全状态进入不安全状态 例如 若在T0时刻以后 C3又申请到2个资金单位 则系统进入不安全状态 因为 此时无法再找到一个安全序列 结果造成系统产生死锁 由此可见 当C3申请资源时 尽管当时系统中还有可用资源 但却不能分配给它 必须让它等待 按银行家的术语说 某客户若无偿还能力时 就不要贷款给它 第3章处理机调度与死锁 86 3 银行家算法 最具有代表性的避免死锁的算法 是Dijkstra的银行家算法 这是由于该算法可能用于银行现金贷款而得名的 一个银行家把他的固定资金贷给若干顾客 只要不出现一个顾客借走所有资金后还不够 银行家的资金应是安全的 银行家需一个算法保证借出去的资金在有限时间内可收回 假定顾客分成若干次进行贷款 并在第一次贷款时 能说明他的最大借款额 具体算法 顾客的贷款操作依次顺序进行 直到全部操作完成 银行家对当前顾客的贷款操作进行判断 以确定其安全性 看能否支持顾客贷款 即该客户能否运行完成 安全时 贷款 否则 暂不贷款 第3章处理机调度与死锁 87 例1 假定系统中有三个进程P1 P2 P3 共有12台磁带机 进程P1总共要求10台磁带机 P2和P3分别要求4台和9台 设在T时刻 进程P1 P2 P3已分别获得 5台 2台 2台 尚有3台闲置未分 判断系统在T时刻的安全性 1 2 3 安全序列 3 8利用银行家算法避免死锁 3 8 1银行家算法中的数据结构1 可利用资源向量Available 也称为空闲向量 这是一个含有m个元素的数组 其中的每一个元素 代表一类可利用的资源数目 其初始值是系统中所配置的该类全部可用资源的数目 其数值随该类资源的分配和回收而动态地改变 如果Available j K 则表示系统中现有Rj类资源K个 2 最大需求矩阵Max 这是一个n m的矩阵 它定义了系统中n个进程中的每一个进程对m类资源的最大需求 如果Max i j K 则表示第i个进程需要Rj类资源的最大数目为K 第3章处理机调度与死锁 94 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 第3章处理机调度与死锁 95 3 8 2银行家算法的实现 1 进程申请资源的情况设Requesti是进程Pi的请求向量 如果Requesti j K 表示进程Pi需要Rj类型的资源的个数为K 这里要提及的是 Requesti与Needi的关系可能为以下三种情况 1 Requesti Need i 这种情况表示该进程的资源需求已超过它所宣布的最大值 因此认为出错 2 Requesti Need i 这种情况下 表示该进程现在对它所还需的全部资源一次申请完成 3 Requesti Need i 这种情况下 表示该进程现在对它所需资源再进行部分的申请 剩余的资源以后可再次申请 第3章处理机调度与死锁 96 2 银行家算法的描述 当进程Pi发出资源请求后 系统按下述步骤进行检查 1 如果Requesti Need i 便转向步骤2 否则显示出错 因为它所需要的资源数已超过它所事先要求的最大值 2 如果Requesti Available 便转向步骤 3 否则 表示尚无足够资源 Pi须等待 3 假设系统将资源分配给Pi 则需修改如下数据结构的值 Available Available Requesti Allocation i Allocation i Requesti Need i Need i Requesti 4 系统执行安全性算法 检查若此次资源分配后 系统是否处于安全状态 如果是安全的 则将资源真正地分配给进程Pi 否则 将本进程的试探分配作废 恢复原来的资源分配状态 进程Pi等待 第3章处理机调度与死锁 97 3 安全性算法 设置两个向量 设工作向量Work 它表示在算法执行过程中 系统可提供给进程继续运行所需的各类资源数目 它含有m个元素 在执行安全算法开始时 初始置Work Available 完成向量Finish 它表示系统能否运行完成 它有n个分量 分别表示各进程是否可执行完成 若Finish i true 则表示第i个进程能够获得足够的资源 运行完成 若Finish i false则表示该进程不能获得所需全部资源 不能运行完成 设初值Finish i false i 0 1 2 n 1 当有足够资源分配给第i个进程时 再令Finish i true 第3章处理机调度与死锁 98 安全算法的步骤 1 进行安全性检查 从进程集合中找到一个能满足下述条件的进程i Finish i false 并且Requesti Work 若找到这样的进程 执行步骤 3 若找不到这样的进程 则转步骤 4 2 Work Work Allocation i Finish i true 因为进程Pi若能执行完成 则能够释放它所占的资源 3 若所有进程的Finish i true都满足 则表示系统处于安全状态 正式将资源分配给进程Pi 否则 系统处于不安全状态 系统不能进行这次试探性分配 恢复原来的资源分配状态 让进程Pi等待 如果我们已判定系统处于安全状态 则通过运算过程我们同时可以找到一个安全序列 如果系统处于不安全状态 则所有Finish i false的进程都参与了死锁 第3章处理机调度与死锁 99 银行家算法举例 假设系统中有五个进程和三类资源 每种资源的数量分别为10 5 7 T0时刻资源分配情况如下 请问此时刻系统是否安全 1 T0时刻的安全性 图3 16T0时刻的安全序列 2 P1请求资源 P1发出请求向量Request1 1 0 2 系统按银行家算法进行检查 Request1 1 0 2 Need1 1 2 2 Request1 1 0 2 Available1 3 3 2 系统先假定可为P1分配资源 并修改Available Allocation1和Need1向量 由此形成的资源变化情况如图3 15中的圆括号所示 再利用安全性算法检查此时系统是否安全 图3 17P1申请资源时的安全性检查 3 P4请求资源 P4发出请求向量Request4 3 3 0 系统按银行家算法进行检查 Request4 3 3 0 Need4 4 3 1 Request4 3 3 0 Available 2 3 0 让P4等待 4 P0请求资源 P0发出请求向量Requst0 0 2 0 系统按银行家算法进行检查 Request0 0 2 0 Need0 7 4 3 Request0 0 2 0 Available 2 3 0 系统暂时先假定可为P0分配资源 并修改有关数据 如图3 18所示 图3 18为P0分配资源后的有关资源数据 3 9死锁的检测与解除 死锁的预防和死锁的避免都是要对资源的分配加以限制 操作系统解决死锁问题的另一条途径是死锁的检测方法 死锁检测方法与死锁预防和死锁避免两种策略不同 这种方法对资源的分配不加限制 只要有剩余的资源 就可把资源分配给申请的进程 允许系统有死锁发生 这样做的结果可能会造成死锁 关键是当死锁发生时系统能够尽快检测到 以便及时解除死锁 使系统恢复正常运行 因此 采用这种方法必须要解决三个问题 一是何时检测死锁的发生 二是如何判断系统是否出现了死锁 三是当发现有死锁发生时如何去解除死锁 第3章处理机调度与死锁 106 3 9 1死锁检测的时机 由于死锁检测算法允许系统发生死锁 因此最好的情况是一旦死锁产生 就能立即检测到 也就是说死锁发现得越早越好 死锁产生的时间一般是在资源分配时发生 所以将死锁的检测时机定在有资源请求之时是比较合理的 但是采用这种方法检测的次数过于频繁 若没有死锁 将占用CPU非常大的时间开销 另一种方法是周期性地去检测 即每隔一定的时间检测一次 或者根据CPU的使用效率去检测 先为CPU的使用率设定一个最低的阈值 每当发现CPU使用率降到该阈值以下时就启动检测程序 以减少由于死锁造成CPU的无谓操作 第3章处理机调度与死锁 107 3 9 2死锁的解除 一旦在死锁检测时发现了死锁 就要消除死锁 使系统从死锁状态中恢复过来 一般采用两种方式来解除死锁 一种是终止一个或几个进程的执行以破坏循环等待 另一种是剥夺参与死锁的进程的资源 第3章处理机调度与死锁 108 1 终止进程 终止参与死锁的进程执行 系统可收回被终止进程所占的资源进行再分配 以达到解除死锁的目的 可以有两种终止进程的方法 1 终止涉及
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 陶瓷工艺品彩绘师质量管控考核试卷及答案
- 2024年秋七年级生物上册 4.2 绿色植物的光合作用说课稿2 北京课改版
- 品酒师操作考核试卷及答案
- 见面时的礼节教学设计-2025-2026学年中职专业课-旅游服务礼仪-旅游类-旅游大类
- 甲基硅氧烷生产工入职考核试卷及答案
- 解决社会问题的营销方案
- 7.3 拟定保护生态环境的计划(说课稿)2023-2024学年七年级生物下册同步教学(人教版河北专版)
- 智能采矿设备租赁创新创业项目商业计划书
- 金属材丝拉拔工技能比武考核试卷及答案
- 电池制液工安全规范考核试卷及答案
- 多囊卵巢综合征的超声诊断
- 售后索赔流程管理办法
- 2025 高中地理核心素养之综合思维培养(气候与建筑)课件
- 幼儿园中国茶文化课件
- DB3205∕T 1105-2023 房屋安全鉴定服务规范
- 食堂燃气操作人员培训
- 2025年中国医院创新转化报告-中国医学创新联盟
- 2025年6月黑吉辽蒙高考地理真题完全解读
- 2023年宪法学习宪法知识竞赛试题及答案
- 汇率预测模型优化-洞察及研究
- 稳评机构各项管理制度
评论
0/150
提交评论