乍一看,我的问题可能看起来有点微不足道。请耐心等待并完整阅读。
我在我的 Linux 内核模块中发现了一个繁忙的循环。因此,其他进程(例如 sshd)在很长一段时间内(如 20 秒)都无法获得 CPU 时间。这是可以理解的,因为我的机器只有一个 CPU,并且繁忙的循环没有机会安排其他进程。
只是为了试验,我在繁忙循环中的每次迭代之后都添加了 schedule() 。即使这会使 CPU 保持忙碌,它仍然应该让其他进程在我调用 schedule() 时运行。但是,这似乎并没有发生。我的用户级进程仍然挂起很长一段时间(20 秒)。
在这种情况下,内核线程得到了nice值-5,用户级线程得到了nice值0。即使用户级线程的优先级很低,我认为20秒也太长了,无法获得CPU。
有人可以解释为什么会发生这种情况吗?
注意:我知道如何完全删除繁忙循环。但是,我想在这里了解内核的行为。内核版本为 2.6.18,内核抢占已禁用。