调度程序数据结构



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

谢谢。

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

然后,每个运行队列在内部通过红黑树数据结构对任务进行排序。这个数据结构的实现包含在include/linux/rbtree.h文件中。它是一种通用的实现,因为它与调度没有严格的关系,因此它可以由任何需要使用这种数据结构对数据进行排序的内核组件使用。

在内核代码中,包含进程(或线程)信息的数据结构是task_struct,包含在include/linux/sched.h中。这是主要的任务数据结构,由所有调度策略(即sched_FAIR、sched_FIFO/sched_RR、sched_DEADLINE等)使用。

关于CFS如何工作的良好文档包含在documentation/scheduler目录中。

最新更新