步骤 5 / 7
调度要权衡什么
调度器要在吞吐、响应速度和公平之间取舍,没有一种策略全都最好。
后台批处理任务希望少被打断、整体做得快(吞吐);交互程序希望一按键就有反应(响应时间)。 时间片短,响应快但切换多;时间片长,切换少但交互会卡。 教科书里的先来先服务、短作业优先、轮转、多级反馈队列,都是在这几者之间做不同的取舍;Linux 的 CFS/EEVDF 按“谁用得少谁先上”来兼顾。
操作系统
一个 CPU 核心同一时刻只能跑一个程序,Linux 靠快速轮换制造“同时运行”的效果。
以一个 CPU 核心上轮流运行两个程序为例。
步骤 5 / 7
调度器要在吞吐、响应速度和公平之间取舍,没有一种策略全都最好。
后台批处理任务希望少被打断、整体做得快(吞吐);交互程序希望一按键就有反应(响应时间)。 时间片短,响应快但切换多;时间片长,切换少但交互会卡。 教科书里的先来先服务、短作业优先、轮转、多级反馈队列,都是在这几者之间做不同的取舍;Linux 的 CFS/EEVDF 按“谁用得少谁先上”来兼顾。
| 当前状态 | 发生了什么 |
|---|---|
| A 运行中 | 程序 A 正在使用 CPU |
| 进入内核态 | 时钟到点,CPU 陷入内核 |
| 内核态 | 保存程序 A 的上下文 |
| 内核态 | 调度器选中程序 B |
| 调度 | 按策略挑选下一个 |