我最近閱讀的是linux內核2.6.26.5的代碼,並試圖實現另一個調度程序類。但是,我對Linux內核如何處理不同調度器類之間的通信感到困惑。 例如,在sched_rt.c,rt_sched_class定義爲:Linux調度程序類如何相互通信
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 */
......
字段 「下一個」 是指向下一個sched_class,這是fair_sched_class這裏。
我很困惑它是怎麼知道什麼是fair_sched_class。由於fair_sched_class是在另一個文件shed_fair.c中定義的,我會假設有一個include或者什麼「告訴」rt_sched_class什麼是fair_sched_class。
但是,我搜索了整個文件,但在sched_rt.c中找不到「include」。所以我想知道它是如何工作的,爲什麼我們可以在sched_rt.c中獲得fair_sched_class的價值? 謝謝!
嗨,非常感謝您的幫助!但你發佈的代碼似乎來自更新版本的Linux。我正在使用linux 2.26.5,並且在sched_rt.c中沒有include .. – Dumpling 2013-03-25 01:09:01
@Dumpling:只要查找一些'extern'前向聲明,告訴編譯器,其他編譯單元可以使用哪些。 – datenwolf 2013-03-25 01:46:50
嗨,非常感謝!我終於明白了爲什麼。 sched_rt.c文件不是單獨編譯的。它與sched_fair.c一起被包含在sched.c中。所以當編譯器編譯sched.c時,變量存在:) – Dumpling 2013-03-25 05:42:48