处理机调度
处理机调度层次:1.高级调度,又称为作业调度,根据算法把外存上处于后备队列的一些作业调入内存,为他们创建进程,分配资源,放入就绪队列。多用于多道批系统中 2.低级调度,又称为进程调度,根据某种算法决定就绪队列中哪个进程应该获得处理机,并有分派程序把处理机分配给选中的进程 3.中级调度,把那些暂时不运行的进程调到外存。从而提高利用率和吞吐量
调度算法的目标:共同目标,资源利用率,公平性,平衡性,策略强执行; 批处理系统的目标:平均周转时间短(作业被提交给系统到作为完成的这段时间间隔,包括在外存等待的时间,在就绪队列等待时间,执行时间,等待io的时间,后三者可能发生多次), 但是大多用带权周转时间(周转时间与系统提供服务时间之比)来衡量;系统吞吐量,单位时间内系统完成的作业数,如果为了提高吞吐量,应该多选择短的作业;处理机利用效率,如果要提高利用效率应该多选择计算量大的作业;由此可见这些要求是相互矛盾的; 分时系统的目标:响应时间快,用户提交请求到得到结果的时间;均衡性,系统响应时间的快慢和用户请求服务相适应; 实时系统的目标: 截止时间的保证;可预测性
进程调度替换过程:1.保存被中断进程的处理机上下文;2.修改被中断进程的pcb有关信息;3.把被中断进程的pcb插入到有关队列;4.选择一个进程占用cpu;5.修改选中进程pcb相关信息;6.根据被选中进程的pcb恢复处理机现场
下面就这三种调度进行详细的介绍
作业调度
作业:包含程序,数据以及作业说明书
作业的三种状态:收容阶段,运行阶段,完成阶段
主要任务:决定接纳多少个作业,决定接纳那些作业
常用算法:1.FCFS 2.SJF,短作业优先,必须先知道运行时间,对长作业不利,未考虑作业紧迫程度;3.优先级调度算法,基于作业的紧迫程度,其实FCFS和SJF也是一种优先级调度算法;4.高响应比优先调度算法(HRRN),优先权为作业等待时间与服务时间之和和服务时间之比,是FCFS和SJF的折中算法,即可以照顾短作业,有不至长作业等待太久。
进程调度:
进程调度的任务:1.保护处理机现场信息;2.按照算法选取进程;3.分配处理机
进程调度方式:1.抢占方式,得到cpu控制权后就一直执行,直到运行完成或者发生某事件,常常用在批处理系统,简单,系统开销小; 在这种方式中引起调度的因素可以归结为:1.进程完成执行或者终止;2.进程提出io请求;3.时间片用完 4.更高优先级就绪;5.进程执行某种原语操作; 2.非抢占方式,正在运行的进程可以被剥夺cpu使用权,常见的有时间片轮转策略,优先级调度策略,常常用在分时系统和实时系统中,便于及时响应各进程的执行; 主要抢占的一句有,优先权原则,短进程优先原则,时间片原则
常见算法:1.轮转调度算法,所有进程按FCFS排成一个就绪队列,队列中的每个进程都能获得相同的处理机使用时间;当进程在时间片为用完的时候就完成,就调度新的进程, 当时间片用完,进程还未执行完成,系统调度下一个进程,把该进程放到就绪队列的队尾;2.优先级调度算法,可以再分为抢占优先级算法和非抢占优先级算法;静态优先级,优先级在进程创建的时候确定,算法简单,系统开销小,不够精确,优先级低的可能长期无法被调度; 动态优先级,在进程创建之初赋予一和优先级,随着进程的推荐和等待时间而改变。可以有效的处理低优先级的饥饿问题;3.多队列算法,把不同性质的进程放在不同的就绪队列中, 不同的队列采用不同的调度算法,不同队列本身也能设置不同的优先级,可以满足不同用户对进程的需求;4.多级反馈队列调度算法,设置多个就绪队列,每个队列设置不同的优先级;每个队列采用FCFS算法,当一个队列中的进程在时间片用完的时候还未完成就,将其放到下一个优先级队列的队尾,知道最后一个队列,最后一个队列使用RR算法,不同的队列采用优先级算法,当有优先级更高的进程出现时,把当前进程方放到当前队列末端,立即去执行高优先级进程; 这种算法能比较好的满足终端型用户,短批处理作业用户和长批处理作业用户的需求;5.基于公平原则的调度算法,并不能保证优先于行,而是明确的性能保证。跟踪集成创建以来获得cpu时间,计算每个进程应该获得cpu时间,计算时间时间和理论时间之比,调度程序应该选择比率最小的进程; 可以发现FCFS不会单独使用,一般和其他算法搭配使用
实时调度
需要提供的信息:就绪时间,截止时间,处理时间,资源要求,优先级
常见算法分类:非抢占轮转调度算法,用于不太严格的实时系统中; 非抢占优先级调度; 基于时钟中断的抢占式优先级调度;立即抢占的优先级调度算法;
常见算法:1.最早截止时间有限算法(EDF),非抢占式用于非周期实时任务,抢占式用于周期实时任务;2.最低松弛优先(LLF),由任务的紧急程度来确定优先级,这种算法属于抢占式;3.优先级倒置,高优先级的进程被低优先级的进程阻塞; 解决办法,当高优先级因为资源被低优先级进程占用,就把自己的优先级赋予低优先级经常,让低优先级进程执行释放资源;