概览
调度算法 | 是否可用于进程调度 | 是否可用于作业调度 |
---|---|---|
先来先服务 FCFS | √ | √ |
短作业优先 SJF | √ | √ |
优先级算法 PSA | √ | √ |
高响应比优先 HRRN | √ | √ |
时间片轮转调度 RR | √ | × |
多级反馈队列算法 MFQ | √ | × |
一、先来先服务算法(First Come First Served,FCFS)
(1)思想
• 从队列中选择最先进入的作业或进程
• 非抢占式
既可用于作业调度,也可用于进程调度
作业调度:从后备队列中选择最先进入的作业,创建PCB,分配资源,加入就绪队列
进程调度:从就绪队列中选择最先进入的进程,分配CPU,使之运行
(2)优点
• 简单、易于实现
• 实际中经常把它与其他调度算法结合使用
(3)缺点
• 平均等待时间长
• 短进程需要等待先进入的长进程释放CPU
二、短作业优先算法(Shortest Job First,SJF)
所谓长作业、短作业是指运行时间长或短的作业
(1)思想
• 从队列中选择执行时间最短的进程分配CPU(也就是执行时间越短,优先级越高)
• 抢占式/非抢占式
既可用于作业调度,也可用于进程调度
(2)优点
平均等待时间最小
(3)缺点
• 对长作业非常不利,可能出现饥饿现象
• 必须预知作业的运行时间(采用近似替代的方法,用历史执行时间进行预测)
(4)抢占式SJF 与 非抢占式SJF
加入了进程到达就绪队列的时间这一因素,所以每个时刻考虑的是:当前就绪队列的所有进程中所需执行时间最短的是哪个?
抢占与非抢占的区别就是:这一秒,如果有新到达的进程,它的运行时间比当前CPU正在运行的进程
三、优先级调度算法(Priority-Scheduling Algorithm,PSA)
(1)思想
• 基于作业的紧迫程度,由外部赋予作业相应的优先级
• 每个进程关联一个优先级(数字),从队列中选择优先级最高的进程分配CPU
• 具有相同优先级的进程按照 FCFS 顺序调度
• 抢占式 / 非抢占式
既可用于作业调度,也可用于进程调度
(2)SJF 和 FCFS 都可看作优先级调度算法的特例
• SJF是优先级调度的一个特例(作业执行时间越短,优先级越高)
• FCFS是优先级调度的一个特例(等待时间越长,优先级越高)
但这两种优先级都不能真实地反映作业的紧迫程度
(3)抢占式PSA 与 非抢占式PSA
在非抢占式PSA下,系统一旦把处理机分配给就绪队列中优先数最高的进程后,这个进程就会一直运行,直到完成或发生某事件使它放弃处理机,这时系统才能重新将处理机分配给就绪队列中的另一个优先数最高的进程。
在抢占式PSA下,系统先将处理机分配给就绪队列中优先数最高的进程度让它运行,但在运行的过程中,如果出现另一个优先数比它高的进程,它就要立即停止,并将处理机分配给新的高优先数进程。
(4)优先级类型
• 静态优先级
• 动态优先级
(5)缺点
低优先级的进程或作业会产生饥饿现象
解决办法:逐渐提高等待时间长的进程或作业的优先级(也就是动态优先级)
四、高响应比优先调度算法(Highest Response Ratio Next,HRRN)
在批处理系统中,FCFS算法只考虑了作业的等待时间,而忽视了作业的运行时间;而SJF又正好相反,只考虑了作业的运行时间,没有考虑等待时间。于是就产生了高响应比优先算法,兼顾了作业的等待时间与运行时间。
所谓响应比 也就是下面的优先级计算式子:响应时间 / 要求服务时间
(1)思想
• 在优先级调度算法的基础上引入动态优先级
其实就是 1+(等待时间 / 运行时间) 。易知,求出的优先级一定 >= 1
• 如果等待时间相同,则要求服务时间越短,优先级越高(数值越大),HRRN 退化成 SJF
• 如果要求服务时间相同,则等待时间越长,优先级越高(数值越大),HRRN 退化成 FCFS
• 针对长进程,优先级随时间逐渐提高,防止饿死
五、时间片轮转(轮转调度)算法(Round Robin,RR)
(1)思想
• 针对分时系统,将CPU时间划分成一个个的时间片(time slice),为就绪队列中的进程依次轮流分配一个时间片的CPU
• 抢占式
只用于进程调度
(2)实现
FIFO队列 + 定时器
(3)进程切换的两种情况
① 一个时间片还没有用完,正在运行的作业便已经完成,则激活调度程序,在就绪队列中删除该进程,再调度队首的进程,为其分配时间片。
② 一个时间片用完了,中断处理程序被激活,如果进程尚未运行完毕,则将其送到就绪队列的末尾。
(4)时间片大小的确定
略大于一次典型的交互所需要的时间,使得大多数交互式进程能在一个时间片内完成,从而获得很小的响应时间。
• 就绪队列中有n个进程且时间片为q,每个进程必须等待的CPU时间丌超过(n-1)q个时间单元• RR算法性能依赖于时间片的大小
(5)性能分析
• 就绪队列中有n个进程且时间片为q,每个进程必须等待的CPU时间不超过(n-1)q个时间单元
• RR算法性能依赖于时间片的大小
时间片小,意味着会频繁地执行进程调度和上下文的切换,无疑会增加系统开销
时间片大,意味着大多数进程都会在一个时间片内完成,RR算法就退化成了FCFS,就有了FCFS一样的缺点:周转时间长,短作业经常等待长作业
六、多级反馈队列调度算法(Multilevel Feedback Queue,MFQ)
只用于进程调度
(1)思想
• 设置多个就绪队列
第一队列的优先级最高,每个队列的优先级依次降低,不同队列中进程的执行时间片大小也不同,优先级越高的队列,时间片越小。
• 每个队列都采用FCFS 算法,允许进程在队列之间移动
一个新进程进入内存后,首先将它放入第一队列的末尾,接受调度。如果在第一个时间片尚未完成,调度程序则将它转入第二队列的末尾等待调度,依次类推……当进程最后被降到最后一个队列后,便一直在该队列中按照RR算法运行。
较低优先级队列中等待时间较长的进程将被转移到优先级更高的队列中(体现出了反馈嘛)
• 不同队列之间采用优先级抢占调度
仅当第一队列空闲时(也就是第一队列没进程需要调度了)才调度第二队列中的进程运行。但是如果CPU正在执行第二队列中的进程A,此时第一队列中忽然进入了新的进程B,那么CPU会立即把进程A放回第二队列末尾,然后处理进程B。
(2)实例