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

时间:2014-10-23 19:04:17

标签: linux linux-kernel

本书"了解Linux内核"提到了几种暂停在内核模式下运行的进程的方法(第1章,第22页)。他们在这里:

  1. 无法立即满足系统调用请求
  2. CPU检测到异常
  3. 发生硬件中断
  4. 在CPU启用内核抢占的情况下发生中断, 并且可以运行更高优先级的流程。
  5. 它没有提到进程耗尽其时间片,并且调度程序带来另一个相同的优先级进程。我认为这应该是暂停在内核模式下运行的进程的一种情况。请评论。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在Linux内核中,超出其时间范围的进程不会自动挂起。发生的是,在计时器中断期间,内核在check_preempt_tick()中检查当前进程是否运行了足够长的时间。如果运行了足够长的时间,内核将通过调用TIF_NEED_RESCHED来设置resched_curr()标志。

现在,从计时器中断返回时,内核会检查当前进程是否设置了TIF_NEED_RESCHED标志。如果已设置并且启用了抢占,则内核调用schedule(),在其中选择要运行的新进程。

实际上,无论何时发生中断(即使不是定时器中断),内核都会检查当前进程是否可以被抢占,并相应地调用schedule()