@
iwtbauh @
enenaaa 首先 x86 我不熟,如果 HLT 的作用是将 cpu 进入低功耗模式等待中断将其恢复到正常模式的话。那么 ARM 对应的有 WFI(Wait For Interrupt)指令将 cpu 进入一个低功耗模式,直到一个中断发生。在多核的情况下还有个 WFE。
既然都贴出内核代码了,那我们不妨分析一下。首先看死循环,死循环再往下看(227 行)是不是有个 local_irq_disable()关闭中断,再之后,检查是进入 poll 轮寻(这里会重新开启中断)还是真正的 idle 模式,这里会调用
cpuidle_idle_call(),在这里(128 行),会检查是否需要让出 idle,如果需要则让出,不需则检查当前 cpu 是否支持 idle,如果支持则调用 default_idle_call(),这里就是会调用 arch_cpu_idle(),也就是 x86 的 HLT 指令,ARM 的 WFI 指令的地方。所以很显然,内核使用了大循环没有错,但是大循环绝对不是 iwtbauh 想象的那样工作,简单点就是。
```
while(1){
}
```