在Linux内核源代码中,文件Documentation/scheduler/sched-arch.txt
包含以下行。
您的cpu_idle例程需要遵守以下规则:
现在应该通过空闲例程禁用Preempt。应该只是 已启用调用schedule()然后再次禁用。
我对Linux内核世界比较陌生,所以对于cpu_idle
例程的实现者,我可以想到第一行的三种可能的解释。
有更多内核经验的人是否知道正确的解释?
答案 0 :(得分:3)
让人惊讶。如果您要添加对新平台的支持,请在您发布评论时更新该评论。
我还没有在很长一段时间内完成Linux内核开发,但据我所知,它应该说"在运行你的cpu_idle例程时,[内核]禁用了Preemption。您应该只启用它来调用schedule(),然后立即再次禁用它。"
例如,在PPC idle.c中,while循环以:
结束preempt_enable_no_resched();
schedule();
preempt_disable();
并且不会触及先发制人。