第三章 处理机调度与死锁
summary:In a multiprogramming environment,there are more processes in memory than there are processors.This requires the system to be able to dynamically assign processors to a process in a ready state to execute according to some algorithm.The task of assigning a processor is done by the processor scheduler.
*调度层次算法目标
高级调度,作业调度,决定外存上处于后备队列中的哪几个队列中的哪几个作业调入内存;低级调度,进程调度,决定就绪队列中的哪几个进程获得处理机;中级调度,内存调度,存储器中管理的对换功能;资源利用率(处理机和资源处于忙碌状态),公平性(时间相对公平,无进程饥饿),平衡性(进程种类,计算型与I/O型),策略强制执行;相应时间快,均衡性,截至时间的保证(开始执行的最迟时间,完成的最迟时间),可预测性(连续,实时)
*作业与作业调度
作业(程序,数据,作业说明书),作业步(每一个对作业加工步骤);作业控制块PCB(保存了系统对作业进行管理和调度所需的全部信息)
作业的三个阶段和状态 1.收容阶段,作业通过SPOOLing输入到硬盘,建立PCB,放入作业后备队列中国;2.运行阶段,作业被调度,分配资源建立进程,放入就绪队列;3.完成阶段,运行完成或异常结束,终止作业程序回收JCB与其资源
先来先服务FCFS,有利于长作业,短作业优先SJF,减少平均周转时间;优先级调度算法PSA,从后被队列中选择若干个优先级最高的作业装入内存;高响应比优先调度算法HRRN,既考虑了等待时间又考虑了运行时间,优先权=(等待时间+要求服务时间)/要求服务时间,等待时间+要求服务时间等价于响应时间
*进程调度
进程调度的任务 1.保存处理机的现场信息,如程序计数器,多个通用寄存器中的内容;2.按某种算法选取进程,从就绪队列中选取一个进程,准备分配处理机;3.把处理器分配给进程,选中进程PCB内处理机现场信息装入处理器相应的各个寄存器中
进程调度方式 非抢占方式,一旦分配到处理机,直到进程完成(非主动停止运行)才释放处理机;抢占方式,防止一个长进程长时间地占用处理机,保证处理机的公平服务,有三个抢占原则,优先权原则,短进程优先原则,时间片原则
轮转(round rubin)调度算法,基于时间片,时间片未用完而进程已完成,就立即激活调度程序,时间片用完则激活中断处理程序;优先级调度算法(上述抢占式和非抢占式),优先级的依据:进程类型,进程对资源的需求,用户需求。静态优先级,创建进程时确定,动态优先级,随进程的推进或等待时间的增加而改变;多队列调度算法,将就绪队列拆分为若干个,按类型和性质将进程固定在不同的就绪队列中,方便处理机实施不同的调度策略;多级反馈队列,在上面的进程调度算法补充了每个队列都采用了FCFS和按优先级排序;基于公平原则的调度算法,调度程序选择最小的进程分配以处理机
*实时调度
HRT硬实时任务,快速切换机制保证了对中断的快速响应能力,快速的任务分派能力;最早截止时间优先EDF算法,非抢占式依据截止时间顺序执行,抢占式算法,必须在任务的周期内完成处理,且处理时间应该小于周期时间;
最低松弛度优先LLF算法 松弛度=完成时间-运行时间;松弛度越低则优先级越高,越先执行
优先级倒置 因高低优先级进程的临界资源共享延迟或阻塞产生。解决方法,共享资源的低优先级进程继承高优先级,直到低优先级进程退出临界区
*死锁概述
可抢占资源有CPU,内存;不可抢占资源有光驱,磁带机,打印机;形成环路,进入死锁;
产生死锁的必要条件 互斥条件,不可抢占的临界资源;请求和保持条件,请求新资源的进程阻塞倒置不能释放自己占用的资源;不可抢占条件,主动释放;循环等待条件,存在进程-资源循环链
处理死锁的方法 预防死锁,避免死锁,检测死锁,接触死锁
*预防死锁
破坏“请求和保持”条件 当一个进程请求资源时,不能持有不可抢占资源。两种协议,第一种协议申请整个运行过程中所需的全部资源,可能发生饥饿现象;第二种协议允许进程只获得运行初期的资源,还是要用磁带机等不可抢占资源,只是用完即释放,减少进程发生饥饿的机率
破坏"不可破坏抢占"条件 进程前后两次运行的信息不连续,延长了进程的周转时间,增加了系统开销,降低了系统吞吐量
破坏“循环等待”条件 有序资源使用法:所有进程对资源的请求必须严格按资源序号递增的次序提出
*避免死锁
系统安全状态 系统能按某种进程推进顺序(P1,P2,...,Pn)为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。
银行家算法避免死锁
数据结构,可用资源向量Available[m]:m为系统中资源的种类数,Available[j]=k表示系统中第j类资源数为k个;最大需求矩阵Max[n,m]:n为系统中进程数,Max[i,j]=k表示进程i对j类资源的最大需求数为k;
算法,如果Requesti[i]<=Need[i,j],则进如下一步(否则出错)->如果Requesti[j]<=Available[j],则进入下一步(不然无足够资源)->Available[j]=Available[j]-Requesti[j];Allocation[i,j]=Allocation[i,j]+Requesti[j];Need[i,j]=Need[i,j]-Requesti[j]
▪安全序列: P1、P3、P4、P2、P0
*死锁的检测与解除
死锁的检测 资源分配图,引入二元组G=(V,E),V是结点集,分为P进程节点和R资源节点;
记有三个资源的资源为R1,有两个资源的资源为R2。1°先看R1,有三个箭头指出,则说明此时R1中无资源;2°再看R2,有一个箭头指出,则R2中还有一个资源;3°再来看进程P2,一个箭头指出到R1,需要申请R1的一个资源,而R1无资源,P2进入阻塞状态;4°再看进程P1,一个箭头指出到R2,R2可满足P1的申请,运行完成后释放资源(即删除所有的边)
死锁的解除 抢占资源,从一个或者多个进程中抢占资源给该死锁进程;终止进程,杀死死锁进程
本章习题小结
3.5 在作业调度中应如何确定接纳多少个作业和接纳哪些作业? 作业调度每次接纳进入内存的作业数,取决于多道程序度。应将哪些作业从外存调入内存,取决于采用的调度算法。最简单的是先来先服务算法,较常用的是短作业优先调度算法和基于作业优先级的调度算法。
3.9 在选择调度方式和调度算法时,应遵循的准则时什么?
面向用户的准则:周转时间短,响应时间快,截止时间的保证,优先权准则;
面向系统的准则:系统吞吐量高,处理机利用率好,各类资源的平衡利用。
3.13 在时间片轮转法中,应如何确定时间片的大小? 时间片应略大于依次典型的交互需要的时间。一般应考虑三个因素:系统对响应时间的要求,就绪队列中进程的数目和系统的处理能力。
3.27 何谓死锁?产生死锁的原因和必要条件是什么?
死锁是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。产生死锁的原因为竞争资源和进程间推进顺序非法。其必要条件时:互斥条件,请求和保持条件,不可抢占条件,循环等待条件。
3.28 再解决死锁问题的几个方法中,哪种方法最易于实现?哪种方法使资源利用率最高?