为什么将 cpu_idle 作为 start_kernel 例程的最后一个函数调用?

Ant*_*ony 3 cpu c kernel linux-kernel

我读start_kernel的功能/init/main.c。所谓的最后一个功能start_kernelrest_init,在年底rest_initcpu_idle被调用。

为什么它被称为start_kernel例程的最后一个函数,它有什么作用?

ali*_*lth 6

回答你的第一个问题,

有什么作用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();
    }
}
Run Code Online (Sandbox Code Playgroud)

综上所述,就是cpu_idle让 CPU 进入空闲状态。这是通过while在需要时使用循环来处理进程调度来实现的;否则,CPU 空闲cpu_relax

为什么它被称为start_kernel例程的最后一个函数?

这个函数作为start_kernel例程中的最后一条指令执行的原因是因为 CPU 已经执行了启动内核所需的所有工作 - 不会执行进一步的指令,因此 CPU 将变得空闲,等待下一个任务或中断。为了表明这一点,CPU 应该进入空闲状态,因为内核的初始化不再需要它。