最近、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 の値を取得できるのでしょうか? ありがとう!