cpu_idle_loop logical in book is wrong, based on linux v3.10 code, the

schedule_preempt_disabled() is in while(1) scope.
pull/789/head
junbo 3 years ago
parent b7fad6ac7c
commit 9d0bc19841

@ -62,6 +62,7 @@ static void cpu_idle_loop(void)
...
schedule_preempt_disabled();
}
}
```
Of course, we will not consider full implementation of the `cpu_idle_loop` function and details of the `idle` state in this part, because it is not related to our topic. But there is one interesting moment for us. We know that the processor can execute only one task in one time. How does the Linux kernel decide to reschedule and stop `idle` process if the processor executes infinite loop in the `cpu_idle_loop`? The answer is system timer interrupts. When an interrupt occurs, the processor stops the `idle` thread and transfers control to an interrupt handler. After the system timer interrupt handler will be handled, the `need_resched` will return true and the Linux kernel will stop `idle` process and will transfer control to the current runnable task. But handling of the system timer interrupts is not effective for [power management](https://en.wikipedia.org/wiki/Power_management), because if a processor is in `idle` state, there is little point in sending it a system timer interrupt.

@ -134,3 +134,4 @@ Thank you to all contributors:
* [Yuxin Wu](https://github.com/chaffz)
* [Biao Ding](https://github.com/SmallPond)
* [Arfy slowy](https://github.com/slowy07)
* [Junbo Jiang](https://github.com/junbo42)

Loading…
Cancel
Save