Para responder sua primeira pergunta,
What does
cpu_idle
do?
Em geral (sem considerar o contexto da questão), quando a CPU está em um estado ocioso, significa que o kernel atualmente não tem trabalho para a CPU executar, e assim a CPU está aguardando mais trabalho o kernel.
Você pode pensar em como o kernel funciona como um gerenciador, dando trabalho à CPU (de acordo com uma programação). Quando não houver trabalho disponível para a CPU assumir, a CPU será colocada em um estado ocioso e aguardará uma interrupção. Você pode ler mais sobre interupções de CPU aqui .
Com relação ao contexto de sua pergunta, você pode ler a implementação exata do que cpu_idle
faz:
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();
}
}
Em resumo, cpu_idle
coloca a CPU em um estado em que ela está inativa. Isso é obtido usando while
loops para manipular o agendamento de processos quando necessário; mais, a CPU fica ociosa com cpu_relax
.
Why is it called as the last function of the
start_kernel
routine?
O motivo pelo qual esta função é executada como a última instrução na rotina start_kernel
é porque a CPU executou todo o trabalho necessário para iniciar o kernel - nenhuma instrução adicional será executada, assim a CPU ficará inativa, aguardando a próxima tarefa ou interromper. Para indicar isso, a CPU deve ser colocada em um estado inativo, já que não é mais necessário para a inicialização do kernel.