结论:经典调度算法按思想分四类:1)先来先服务 FCFS——实现最简单,但短作业可能被长作业堵死(护航效应),只适合批处理;2)短作业优先 SJF——平均等待时间理论最优,但长作业饥饿且运行时间无法预知;3)轮转 RR——按时间片公平轮转,响应时间有保证,是交互式系统的基础;4)优先级/多级反馈队列 MLFQ——动态调整优先级:IO 密集(常让出 CPU)保持高优先级,CPU 密集逐步降级,兼顾响应与吞吐,是现代调度器的蓝本。
展开:评价指标要分清视角:周转时间、等待时间偏向吞吐;响应时间(首次上 CPU 的延迟)偏向交互体验;公平性与防饥饿偏向健壮性。RR 的时间片选择是权衡:太长退化为 FCFS,太短则上下文切换开销占比升高(典型 1–10ms)。实践映射:Linux 的 CFS 不再是时间片轮转,而是用虚拟运行时间(vruntime)的红黑树选"最吃亏"的进程,按权重分配 CPU 比例;实时任务走 SCHED_FIFO/SCHED_RR 独立于 CFS。易错点:SJF 的"最优"是平均等待时间意义上的,且需要预知运行时间,现实中只能用历史数据指数平均估算。
追问方向:CFS 的 vruntime 与 nice 值换算、MLFQ 如何防止进程通过"时间片末让出 CPU"作弊。