概述
在 2.5 版之前,Linux 使用传统的 UNIX 调度算法。
2.6 版使用了一种称为 O(1) 的算法,无论任务数量如何,该算法都在恒定时间内运行,并为 SMP 系统提供了更好的支持。然而,它产生了较差的交互性能。
从 2.6.23 开始,完全公平调度器 CFS成为标准的 Linux 调度系统。
CFS(完全公平调度器)性能 Linux CFS 调度程序提供了一种高效的算法来选择接下来要运行的任务。每个可运行的任务都放置在一个红黑树中——一个平衡的二叉搜索树,其键基于vruntime的值。这棵树,如下图所示:
当任务变为可运行时,它被添加到树中。如果树上的任务不可运行(例如,如果它在等待 I/O 时被阻塞),它将被删除。一般来说,被赋予较少处理时间的任务(较小的vruntime值)位于树的左侧,而被赋予更多处理时间的任务位于右侧。根据二叉搜索树的性质,最左边的节点具有最小的键值,这对于 CFS 调度器来说意味着它是具有最高优先级的任务。因为红黑树是平衡的,导航它发现最左边的节点将需要O(lgN)操作(其中N是树中的节点数)。但是,出于效率原因,Linux 调度程序将此值缓存在变量rb_leftmost中,因此确定下一个要运行的任务只需要检索缓存的值。 |
Linux 调度程序是一种基于优先级的抢占式算法,具有两个优先级范围 -Real time从 0 到 99 和nice level的范围从 100 到 140。
与 Solaris 或 XP 不同,Linux 将更长的时间片分配给更高优先级的任务。
Scheduling priorities on a Linux system.
最后
以上就是稳重山水为你收集整理的Linux CPU scheduling的全部内容,希望文章能够帮你解决Linux CPU scheduling所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复