私が読んでいるstart_kernel
関数は終了時に呼び出されます/init/main.c
。最後に呼び出される関数start_kernel
は であり、rest_init
の終わりに呼び出されます。rest_init
cpu_idle
start_kernel
ルーチンの最後の関数と呼ばれる理由は何であり、どのような役割を果たしますか?
ベストアンサー1
最初の質問に答えるには、
cpu_idle
効果は何ですか?
一般的に言えば(質問の文脈に関係なく)、CPUがアイドル状態であるということは、現在のカーネルにCPUが実行できるタスクがないため、CPUがカーネルでより多くのタスクを待ってアイドル状態であることを意味します。
カーネルは、スケジュールに応じてCPUにタスクを渡す管理者と考えることができます。 CPU に使用可能なジョブがない場合、CPU はアイドル状態に入り、割り込みを待ちます。 CPU割り込みの詳細を読むことができます。ここ。
質問の文脈に関して正確な実装を読むことができます。cpu_idle
する:
cpu_idle(void)
{
set_thread_flag(TIF_POLLING_NRFLAG);
while (1) {
/* FIXME -- EV6 and LCA45 know how to power down
the CPU. */
while (!need_resched())
cpu_relax();
schedule();
}
}
結局、cpu_idle
CPUをアイドル状態にすることです。これはwhile
、必要に応じてプロセススケジューリングを処理するループを使用して実行されます。それ以外の場合、CPUはアイドル状態に保たれますcpu_relax
。
start_kernel
なぜルーチンの最後の関数と呼ばれるのでしょうか?
この関数がルーチンの最後の命令として実行されるのは、start_kernel
CPUがコアを起動するために必要なすべての操作をすでに実行しているためです。命令が実行されなくなったため、CPUはアイドル状態になり、次のタスクまたは割り込みを待ちます。 。これを示すには、CPUがカーネルの初期化に必要なくなったため、アイドル状態にする必要があります。