CPU调度的任务是从就绪队列中选择一个等待进程,并为其分配CPU。CPU由调度程序分配给所选中的进程。
先到先服务(FCFS)调度利用FIFO队列实现,是最简单的调度算法。会让短进程等待非常长的进程,平均等待时间较长。
最短作业优先(SJF)调度可证明是最佳的,它提供了最短平均等待时间。实现SJF调度比较困难,因为预测下一个CPU区间的长度有困难。
SJF算法通常用优先级调度算法(将CPU简单地分配给具有最高优先级的进程)的特例。
优先级和SJF调度会产生饥饿(Starvation)/无穷阻塞(indefiniteblocking)(低优先级进程无穷等待CPU)---解决办法是老化技术(aging):逐渐增加在系统中等待很长时间的进程的优先级。
轮转调度算法(RR)对于分时系统更为合适。RR调度让就绪队列的第一个进程使用CPU的q个时间单元,这里q是时间片。在q时间单元之后,如果该进程还没有释放CPU,那么它被抢占并放到就绪队列的尾部。该算法的主要问题是选择时间片。如果时间片太大,那么RR调度就成了FCFS调度;如果时间片太小,那么因为上下文切换而引起的调度开销就过大。
FCFS算法是非抢占的,而RR算法是抢占的。SJF和优先级算法可以是抢占的,也可以是非抢占的。
多级队列调度算法允许多个不同算法用于各种类型的进程。最为常用的模型包括使用RR调度的前台交互队列,以及使用FCFS调度的后台批处理队列。多级反馈队列调度算法允许进程在队列之间迁移。
许多当前的计算机系统支持多处理器,