主题
第三章 CPU 调度:谁先运行
1. 调度问题从哪里来
上一章建立了进程的概念:就绪队列里随时躺着一堆"万事俱备只差 CPU"的进程。CPU 却只有那么几个。从就绪队列里挑谁上场、让它跑多久,就是调度问题。
先破一个误区:调度没有"标准答案"。让短任务先跑,长任务就吃亏;追求总吞吐量,交互程序就可能卡顿。每个调度算法都是对某种目标的偏心,所以学习调度的正确姿势不是背算法步骤,而是问三个问题:这个算法偏心谁?亏待谁?为此付出什么代价?
2. 调度的三个层次
教材里"调度"一词其实覆盖三件发生频率完全不同的事:
| 层次 | 别名 | 决定什么 | 发生频率 |
|---|---|---|---|
| 高级调度 | 作业调度 | 哪个作业从外存调入内存、建立进程 | 最低,分钟级 |
| 中级调度 | 内存调度 | 哪个进程暂时换出到外存、何时换回 | 中等 |
| 低级调度 | 进程调度 | 就绪队列中哪个进程获得 CPU | 最高,毫秒级 |
记忆抓手:高级管"进门",中级管"暂住外面",低级管"上场"。频率越高的调度,算法必须越快——进程调度每秒发生成百上千次,不能用复杂算法慢慢算。本章后面讲的经典算法都属于低级调度(进程调度)。
