2014-02-24 51 views
5

我想知道PREEMPT_NONE和PREEMPT_VOLUNTARY之间的区别是什么。根据文件,Linux内核抢占级别

This option reduces the latency of the kernel by adding more 
"explicit preemption points" to the kernel code 

但它没有提到这些点是什么。我尝试使用Google搜索,但没有发现比上述文字更多的细节(这似乎令人惊讶,因为我认为这将是一个常见问题)。我主要关心的是进程挨饿其他进程,所以我想知道是否抢占发生在定时器中断与自愿。当然,越多的信息越好,所以我想知道其他的优先点可能是什么。

+0

请参阅http://stackoverflow.com/questions/5174955/what-is-voluntary-preemption –

+0

并参阅http://stackoverflow.com/questions/20769768/why-disabling-interrupts-disables-kernel-preemption -and-how-spin-lock-disables-p?rq = 1 –

+0

谢谢 - 我遇到了第一篇文章,但它仍然有一个模糊的引语:“在做内核事情时”。它提到IO作为一个例子,但不幸的是并没有继续提到其他的东西。 – blackghost

回答

4

我相信this link to a mailing list有答案。

哪个是might_sleep()might_resched()成为自愿性抢占点。启用PREEMPT_VOLUNTARY使其调用功能cond_resched()

而且,在中断时不会发生自愿抢占。这将是完全抢占,它检查每个中断,如果内核没有被标记为阻止抢占,它将切换到最高优先级任务。

+0

谢谢,那就是我正在寻找的。 – blackghost