调度算法是指根据系统的资源分配策略所规定的资源分配算法。而选择调度方式和算法的若干准则如下:
1) 面向用户的准则:周转时间短、响应时间快、截止时间的保证、优先权准则。
2) 面向系统的准则:系统吞吐量、处理机利用率好、各类资源平衡利用。
3) 最优准则:最大的CPU利用率、最大的吞吐量、最短的周转时间、最短的等待时间、最短的响应时间。
综合以上准则,下面浅显论述一下主要的处理机调度算法的优劣点。
1、先来先服务和短作业(进程)优先调度算法FCFS
基本思想:按照进程进入就绪队列的先后次序来分配处理机。一般采用非剥夺的调度方式。适用于作业调度也用于进程调度。
当作业调度采用该算法:每次调度都是从后备作业队列中,选择一个或多个最先进入该队列的作业,将它们调入内存,并分配资源、创建进程,之后进入就绪队列。
当进程调度采用该算法:该算法总是把处理机分配给最先进入就绪队列的进程,一个进程一旦分得处理机,便一直执行下去,直到该进程完成或阻塞时,才释放处理机。
优缺点:有利于长作业进程,而不利于短作业进程这是因为若一个长作业先到达系统,就会使许多短作业等待很长的时间,从而引起许多短作业用户的不满。有利于CPU繁忙型作业,不利于I/O,忙的作业。
现在操作系统中,已很少用该算法作为主要调度策略,尤其是在分时系统和实时系统中。但它常被结合在其它调度策略中使用。
2、短作业(进程)优先调度算法(SJF/SPF)
基本思想:短作业或短进程优先调度。
短作业优先调度算法(SJF):用于作业调度。主要任务是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
短进程优先调度算法(SPF):用于进程调度。主要任务是从就绪队列中选出一估计运行时间最短的进程,将处理机分配给它。
优缺点:降低作业的平均等待时间,提高系统吞吐量。对长作业不利;未考虑作业的紧迫程度;对进程估计执行时间难以预测。
3、高优先权优先调度算法Priority SchedulingFirst
为了考虑作业的紧迫程度,引入了最高优先权调度算法(FPF)
1) 优先权调度算法类型
a) 非抢占式优先权算法
基本原理:系统把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直到完成;或因发生某时间使该进程放弃处理机时,系统才可将处理机重新分配给另一优先权最高的进程。
适用:批处理系统,实时性要求不高的实时系统。
b) 抢占式优先权算法
基本原理:系统把处理机优先权最高的进程,使之执行。若在其执行期间,只要又出现另一个优先权更高的进程,则立即停止当前进程的执行,重新分配处理机给新来的优先权更高的进程。
适用:实时性要求高的实时系统,对性能要求高的批处理和分时系统。
2) 优先权类型
a) 静态优先权
静态优先权是在创建进程的时确定的,且在进程的整个运行期间保持不变。一般,利用某一范围内的整数来表示,如,0~7或0~255中的整数。
b) 动态优先权
是指在创建进程时确定的优先权,在进程的运行期间会发生变化。
4、高响应比优先调度算法
思想:利用响应比也就是优先权来决定给作业分配处理机。
RP为响应比。
我们可以看出,优先权随等待时间的增加而提高,因此长作业在等待一定时间后,就有机会分配到处理机执行。
5、基于时间片的轮转调度算法RR,Round Robin
早期的分时系统采用时间片轮转算法,90年代后,采用多极反馈队列调度算法。
1) 时间片轮转法
基本思想:系统将所有就绪进程按FCFS的原则,排成一个队列,依次调度,把CPU分配给队首进程,并令其执行一个时间片/CPU时间,通常为几个毫秒~几百毫秒。时间片用完后,该进程将被抢占并插入就绪队列末尾。
2) 多级反馈队列调度算法Round Robin withMultiple Feedback
基本思想:多级反馈队列调度算法是时间片轮转算法和优先级调度算法的综合和发展,通过动态调整进程优先级和时间片大小,不必事先估计进程的执行时间,多级反馈队列可兼顾多方面的系统目标,是目前公认的一种较好的进程调度算法。
实现过程:
1) 设置多个就绪队列,并为每个队列赋予不同的优先级。队列1的优先级最高,其余队列逐个降低。
2) 每个队列中进程执行时间片的大小也各不相同,进程所在队列的优先级越高,其相应的时间片就越短。
3) 当一个新进程进入系统时,首先将它放入队列1的末尾,按FCFS等待调度。如能完成,便可准备撤离系统,反之由调度程序将其转入队列2的末尾,按FCFS再次等待调度,如此下去,进入队列n按时间片轮转算法调度执行。
4) 仅当队列1为空时,才调度队列2中的进程运行。若队列I中的进程正执行,此时有新进程进入优先级较高的队列中,则新进程将抢占运行。原进程转移至下一队列。
6、结论:
1) 如等待时间相同,则要求服务时间愈短,其优先权愈高—SPF。就是短作业优先算法。
2) 如要求服务时间相同,优先权决定于等待时间—-FCFS。就是先来先服务算法。
3) 对长作业,若等待时间足够长,优先权也高,也能获得CPU。是本算法的优点,解决了短作业优先算法中,长作业的运行得不到保证的情况。也就是引入该算法的原因。