追加読書

追加読書

私が読んでいるstart_kernel関数は終了時に呼び出されます/init/main.c。最後に呼び出される関数start_kernelは であり、rest_initの終わりに呼び出されます。rest_initcpu_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_idleCPUをアイドル状態にすることです。これはwhile、必要に応じてプロセススケジューリングを処理するループを使用して実行されます。それ以外の場合、CPUはアイドル状態に保たれますcpu_relax

start_kernelなぜルーチンの最後の関数と呼ばれるのでしょうか?

この関数がルーチンの最後の命令として実行されるのは、start_kernelCPUがコアを起動するために必要なすべての操作をすでに実行しているためです。命令が実行されなくなったため、CPUはアイドル状態になり、次のタスクまたは割り込みを待ちます。 。これを示すには、CPUがカーネルの初期化に必要なくなったため、アイドル状態にする必要があります。

おすすめ記事