本章主要介绍了CPU调度的概念、方法、种类、实现和应用。
CPU 调度就是从就绪队列中选择一个等待进程并为之分配CPU。调度程序把CPU 分配给选择的进程。调度的算法主要有6种:先来先服务(FCFS)调度算法、短作业优先(SJF)调度算法、轮转(RR)调度算法、优先调度算法、多级队列调度算法、多级反馈队列调度算法。
先来先服务(FCFS)调度算法是最简单的调度算法,但是它会造成短进程等待非常长的进程的情况。
短作业优先(SJF)调度算法是可证明的最优的算法,它提供了最短的平均等待时间。因为很难预测下一
个CPU burst 长度,所以实现SJF 非常困难。SJF 是普通的优先调度算法(它简单的将CPU 分配给最高优
先权进程)的一个特例。优先调度和SJF 都可能会遇到饥饿的问题。老化是一个可以阻止饥饿的技术。
轮转(RR)调度更适用于分时(交互式)系统。RR 调度把CPU 分配给就绪队列中的第一个进程,并
保持q 个时间单元,q 是时间量。在q 个时间单元之后,如果进程没有放弃CPU,那么它将被抢占并被置
于就绪队列尾部。RR 算法主要的问题是时间量的选择。如果时间量太大,RR 调度就退化为FCFS 调度;
如果时间量太小,那么调度开销(以上下文转换的形式)就太大。
FCFS 算法是非抢占式的;RR 算法是抢占式的。SJF 和优先权算法可以是抢占式的,也可以不是。
多级队列调度算法允许为各种类型的进程选用不同的算法。通常有一个采用RR 调度的前台交互式队
列和一个采用FCFS 调度的后台批队列。多级反馈队列调度算法允许进程从一个队列移动到另一个队列。
这些算法都有着不同的应用范围和效果,为了选择出最合适的算法,我们必须进行分析选择。分析法(Analytic method)利用数学分析来确定一个算法的性能。模拟法(Simulation method)通过在一个具有“代表性的”进程样本中模拟调度算法来确定其性能,并计算出结果。
在内核级支持线程的操作系统必须要调度线程——而不是进程。Solaris 2 和Windows 2000 都使用了抢
占式基于优先权的调度算法,这包括了对实时线程的支持。Linux 进程调度程序也采用了基于优先权的调
度算法并支持实时进程。相比较而言,这三种操作系统的调度算法通常比较照顾交互式进程(与批处理进
程和CPU 繁忙型进程相比)。