调度程序数据结构

Scheduler data structures

是否有人知道 CFS 调度算法的数据(例如挂起或就绪队列的内容、任务持续时间等)存储在 Linux 中的什么位置? (这个目标有什么特殊的文件或数据结构吗?)

谢谢。

CFS 为系统中的每个处理单元保留不同的 runqueue(即,它不是全局调度程序,而是依赖于不同运行队列之间的任务迁移)。数据结构是struct cfs_rqkernel/sched/sched.h文件中

然后,每个运行队列在内部通过 Red-Black Tree data structure. The implementation of this data structure is contained in the include/linux/rbtree.h 文件保持任务排序。从某种意义上说,它是一种通用实现,它与调度并不严格相关,因此任何需要使用这种数据结构对数据进行排序的内核组件都可以使用它。

在内核代码中,包含有关进程(或线程)信息的数据结构是 task_struct,包含在 include/linux/sched.h. This is the main task data structure, used by all scheduling policies (i.e., SCHED_FAIR, SCHED_FIFO/SCHED_RR, SCHED_DEADLINE 中,等等。 )

一个good documentation about how CFS works is contained inside the Documentation/scheduler目录。