Linux kernel 内核schedule()函数的入口和出口

Linux kernel 内核schedule()函数的入口和出口,linux-kernel,Linux Kernel,我知道内核调度器是定期运行的。这段时间由计时器决定。 但是,我一直无法找到计时器中断的IRQ在哪里,以及从调度程序代码开始到结束的整个流程 我知道schedule()函数可能有几个入口点和出口点。。 但是有人能告诉我在哪里可以找到这些吗 从内核源代码中,我收集到,_schedule()是主要的调度函数,似乎是从schedule()调用的。。 但是什么调用schedule()…以及什么调用调用schedule的函数 实际上,Linux内核中有两个调度程序,或者说是两个调度代码。有一个核心调度器,您

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

我知道schedule()函数可能有几个入口点和出口点。。 但是有人能告诉我在哪里可以找到这些吗

从内核源代码中,我收集到,_schedule()是主要的调度函数,似乎是从schedule()调用的。。
但是什么调用schedule()…以及什么调用调用schedule的函数

实际上,Linux内核中有两个调度程序,或者说是两个调度代码。有一个核心调度器,您自己也提到过它叫做schedule(),它调用_schedule()。schedule()是从内核中的多个点调用的:

  • 显式阻塞,如信号量、互斥等情况
  • 在中断和返回到用户空间时,会检查TIF_NEED_RESCHED标志,如果设置了该标志,则会调用schedule
  • 一个进程被唤醒

  • 还有另一个名为scheduler_tick()[这也位于core.c]的计划程序代码,它是一个周期性计划程序,由计时器代码(timer.c)通过频率为HZ的中断调用,即scheduler_tick()在1秒内被称为HZ次。HZ取决于硬件,其值在100-1024之间变化。scheduler_tick()调用处理器上当前任务所属的调度类的任务_tick()。

    有关内核源代码浏览需要:<代码>计划()从几个不同的位置调用。其中之一是APIC计时器回调