在Linux中切换内核进程

考虑过程keventd。 它在内核模式下花费所有的生命。 现在,据我所知,Linux在内核模式切换到用户模式的过程中检查上下文切换是否到期,并且据我所知,keventd不会从内核模式切换到用户模式,所以如何Linux内核会知道何时closures它?

如果内核按照你所说的去做,并且只检查一个进程是否由于明确的用户到内核模式的转换而被切换,那么下面的循环会锁定你的计算机的一个核心:

while (1); 

显然,这在正常的桌面操作系统上不会发生。 之所以抢占 ,是因为在进程运行了一段时间之后,内核会发出警报,进入并强制切换上下文。

抢占原则上也可以用于内核进程。 然而,我不确定这就是keventd所做的 – 它更有可能自愿放弃它的时间片(请参阅sched_yield ,用户空间调用具有相同的效果),特别是因为可以将内核配置为non-抢占。 这是一个核心进程的特权。