Linux内核进程的强制性调度,也就是非自愿的,被动的,剥夺的调度;主要是由时间引起的,有可能发生在进程从系统空间返回到用户空间的前夕;比如在entry.S中的代码片段ret_with_reschedule中是否调用schedule(),最终取决于当前进程task_struct中的need_resched是否为1;在单CPU的情况下有一下几种条件:
(1)在时钟中断的服务程序中,发现当前进程的运行时间过长了;
(2)当唤醒一个进程的时候,发现被唤醒的进程比当前进程更有资格运行;
(3)一个进程通过系统调用或改变调度政策或礼让时,这种情况视为主动的,自愿的调度,因此这样的系统调用会引起立即调度;
对于上述第一种情况,时钟中断服务程序do_timer_interrupt(