Linux内核抢占级别

5
我想知道PREEMPT_NONE和PREEMPT_VOLUNTARY之间的区别。根据文档,
This option reduces the latency of the kernel by adding more
"explicit preemption points" to the kernel code

但是它没有提到这些点具体是什么。我尝试在谷歌上搜索,但除了以上文字(似乎这应该是一个常见问题)外,我没有找到更多的细节。我主要担心的是进程饥饿导致其他进程无法运行,因此我想知道在VOLUNTARY定时器中是否发生抢占。当然,信息越多越好,所以我想知道其他的抢占点是什么。


请参见https://dev59.com/OlTTa4cB1Zd3GeqPwNhh。 - Zan Lynx
请参阅https://dev59.com/PWIi5IYBdhLWcg3w9wYU?rq=1 - Zan Lynx
谢谢 - 我看到了第一篇文章,但它仍然有一个模糊的引用:“在做内核事情时”。它举了IO作为例子,但不幸的是没有继续提到其他事情。 - blackghost
1个回答

4
我相信这个邮件列表中的链接里有答案。
也就是说,might_sleep()might_resched()成为了自愿抢占点。启用PREEMPT_VOLUNTARY会调用函数cond_resched()
不,自愿抢占不会在中断上发生。那将是完全抢占,在每个中断上检查,如果内核没有标记为阻止抢占,则切换到最高优先级任务。

谢谢,这正是我正在寻找的。 - blackghost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接