Linux 使用哪种进程调度算法?

Ada*_*tan 3 linux process scheduling

Linux 操作系统在运行的进程之间切换以启用多任务处理。

什么算法用于确定何时暂停当前正在运行的进程的执行以及接下来应该运行哪个进程?

mmk*_*mmk 7

在较新的内核中,使用了完全公平的调度程序(它取代了旧内核的 O(1) 调度程序)。

CFS 将计划任务存储在红黑树中,并使用进程已运行所花费的 CPU 时间量作为键。这允许调度程序有效地选择具有最少运行时间(存储在树的左模式节点中)的进程。

一旦任务即将运行,它就会从树中移除,然后当它运行时,使用新的 CPU 时间重新添加它。

长时间“休眠”的进程将自动获得优先级提升,因为它们没有大量的 CPU 时间。

因此,这是“公平的”,因为休眠的进程与持续运行的进程获得的 CPU 时间一样多

  • 补充一点,这里是 lxr 中 CFS 源代码的链接,以防有人想看看它的实际实现:http://lxr.free-electrons.com/source/kernel/sched/fair.c (4认同)