Ant*_*ony 3 cpu c kernel linux-kernel
我读start_kernel的功能/init/main.c。所谓的最后一个功能start_kernel是rest_init,在年底rest_init,cpu_idle被调用。
为什么它被称为start_kernel例程的最后一个函数,它有什么作用?
回答你的第一个问题,
有什么作用
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 应该进入空闲状态,因为内核的初始化不再需要它。