我最近正在阅读 linux kernel 2.6.26.5 的代码并尝试实现另一个调度程序类。但是,我对 linux 内核如何处理不同调度程序类之间的通信感到困惑。例如,在 sched_rt.c 中,rt_sched_class 定义为:
static const struct sched_class rt_sched_class = {
.next = &fair_sched_class,
.enqueue_task = enqueue_task_rt,
.dequeue_task = dequeue_task_rt,
.yield_task = yield_task_rt,
#ifdef CONFIG_SMP
.select_task_rq = select_task_rq_rt,
#endif /* CONFIG_SMP */
......
字段“next”指向下一个 sched_class,这里是 fair_sched_class。
我对它如何知道什么是 fair_sched_class 感到困惑。由于 fair_sched_class 在另一个文件 shed_fair.c 中定义,我想有一个包含或“告诉”rt_sched_class 什么是 fair_sched_class 的东西。
但是,我搜索了整个文件,但在 sched_rt.c 中根本找不到“包含”。所以我想知道它是如何工作的,为什么我们可以在 sched_rt.c 中获得 fair_sched_class 的值?谢谢!