本书"了解Linux内核"提到了几种暂停在内核模式下运行的进程的方法(第1章,第22页)。他们在这里:
它没有提到进程耗尽其时间片,并且调度程序带来另一个相同的优先级进程。我认为这应该是暂停在内核模式下运行的进程的一种情况。请评论。
答案 0 :(得分:0)
当调度程序在定时器中断运行时检测到时间片结束,该定时器中断低于3。
答案 1 :(得分:0)
在Linux内核中,超出其时间范围的进程不会自动挂起。发生的是,在计时器中断期间,内核在check_preempt_tick()中检查当前进程是否运行了足够长的时间。如果运行了足够长的时间,内核将通过调用TIF_NEED_RESCHED
来设置resched_curr()
标志。
现在,从计时器中断返回时,内核会检查当前进程是否设置了TIF_NEED_RESCHED
标志。如果已设置并且启用了抢占,则内核调用schedule()
,在其中选择要运行的新进程。
实际上,无论何时发生中断(即使不是定时器中断),内核都会检查当前进程是否可以被抢占,并相应地调用schedule()
。