gpt4 book ai didi

c - linux调度程序类如何相互通信

转载 作者:太空宇宙 更新时间:2023-11-04 11:24:37 24 4
gpt4 key购买 nike

我最近正在阅读 linux 内核 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 中根本找不到“include”。所以我想知道它是如何工作的,为什么我们可以在 sched_rt.c 中获得 fair_sched_class 的值? 谢谢!

最佳答案

$LINUX/kernel/sched/rt.c 包含 sched.h,其中包含调度程序类实例的多个 extern 前向声明变量:

extern const struct sched_class stop_sched_class;
extern const struct sched_class rt_sched_class;
extern const struct sched_class fair_sched_class;
extern const struct sched_class idle_sched_class;

然后变量的实际定义分布在调度程序编译单元(.c 文件)中。

也没有发生任何通信,这只是一个在编译时定义了初始值设定项的单链表。

关于c - linux调度程序类如何相互通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15605525/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com