Linux 在内核模式下运行的进程上的调度程序

Linux 在内核模式下运行的进程上的调度程序,linux,linux-kernel,Linux,Linux Kernel,《理解Linux内核》一书提到了几种暂停内核模式下运行的进程的方法第1章,第22页。这是: 无法立即满足系统调用请求 CPU检测到异常 发生硬件中断 CPU在启用内核抢占的情况下运行时发生中断, 并且更高优先级的进程是可运行的。 它没有提到进程将耗尽其时间片,调度器将运行另一个相同优先级的进程。我认为这应该是挂起以内核模式运行的进程的一种情况。请注意。当调度程序在计时器中断中运行时,会检测到时间片的结束,该中断低于3。在Linux内核中,运行时间片不足的进程不会自动挂起。发生的是,在计时器中断期

《理解Linux内核》一书提到了几种暂停内核模式下运行的进程的方法第1章,第22页。这是:

无法立即满足系统调用请求 CPU检测到异常 发生硬件中断 CPU在启用内核抢占的情况下运行时发生中断, 并且更高优先级的进程是可运行的。
它没有提到进程将耗尽其时间片,调度器将运行另一个相同优先级的进程。我认为这应该是挂起以内核模式运行的进程的一种情况。请注意。

当调度程序在计时器中断中运行时,会检测到时间片的结束,该中断低于3。

在Linux内核中,运行时间片不足的进程不会自动挂起。发生的是,在计时器中断期间,内核检查当前进程是否在中运行了足够长的时间。如果运行时间足够长,内核将通过调用RESCHED\u curr来设置TIF\u NEED\u RESCHED标志

现在,当从计时器中断返回时,内核检查是否为当前进程设置了TIF_NEED_RESCHED标志。若设置了它并启用了抢占,内核将调用schedule,在其中选择运行一个新进程


实际上,每当中断发生时,即使不是计时器中断,内核也会检查当前进程是否可以被抢占,并相应地调用schedule。

这不属于第4点吗?调度程序通常在计时器中断时运行。是的,上下文切换不会自动发生。CS在系统计时器中断处理程序中实现。第4个是关于更高优先级的进程是否可运行。我关心的是相同或更低优先级的进程。man 7 sched:“要运行的线程是根据仅在此列表中确定的动态优先级从静态优先级0列表中选择的。动态优先级基于如下所示的nice值,每次线程准备好运行,但调度程序拒绝运行时,动态优先级都会增加。这确保了所有SCHED_和其他线程之间的公平进程。”