进入和退出内核schedule()函数

时间:2013-03-25 05:49:22

标签: linux-kernel

我知道内核调度程序是定期运行的。这个时期由计时器决定。 但是,我一直无法找到定时器中断的IRQ以及调度程序代码从开始到结束的整个流程。

我知道schedule()函数可能有几个入口和出口点。 但有人能指出我在哪里寻找这些吗?

从内核源代码中,我发现__schedule()是主要的调度函数,似乎是从schedule()调用的。 但是什么调用schedule()..以及什么调用调用schedule的函数.. ..

1 个答案:

答案 0 :(得分:1)

实际上有两个调度程序,或者说Linux内核中有两个调度代码。有一个核心调度程序,您自己提到称为schedule(),它调用__schedule()。从内核中的许多点调用schedule():

  1. 明确阻止,如信号量,互斥量等。
  2. 在中断和返回用户空间时检查标志TIF_NEED_RESCHED,如果设置则调用schedule。
  3. 一个过程醒来。
  4. 还有另一个调度程序代码,其名称为scheduler_tick()[这也位于core.c中],它是一个定期调度程序,由定时器代码(timer.c)通过频率为HZ的中断调用,即scheduler_tick()在一秒内被称为HZ次。 HZ取决于硬件,其值在100-1024之间变化。 scheduler_tick()调用处理器上当前任务所属的调度类的task_tick()。