コードレベルで関数を理解するのに多くの時間を費やしましたが、今では本当に混乱しています。
まず core.c で、関数__schedule()
orschedule()
が最も有望なようです。通常、タイマーと思われる__schedule()
コードを見つけました。hrtick_clear(rq)
また、では、スケジュールする次のタスクを見つけようとする__schedule()
関数が呼び出されます。next = pick_next_task(rq)
通常のタスクでは、CFS アルゴリズムが使用されます。そこで、fair.c ファイルを調べて、pick_next_task_fair 関数を確認しました。その関数を追跡することで、hrtick_start(rq, delta)
が呼び出されたことがわかります。
したがって、スケジューリングアルゴリズムを定期的にアクティブにするために使用される hrtick に基づくタイマーがあるようです。しかし、奇妙なことに、core.c ファイルでは、定期的に__schedule()
orを呼び出すようにタイマーがどのように構成されているかを実際に見つけることができません。schedule()
この関数を呼び出すようにタイマーが構成されていることはわかりませんでした。
他の機能は使用されていますか?Linuxタスクスケジューラの専門家がヒントをくれますか:>