我知道内核调度程序是定期运行的。这个时期由计时器决定。 但是,我一直无法找到定时器中断的IRQ以及调度程序代码从开始到结束的整个流程。
我知道schedule()函数可能有几个入口和出口点。 但有人能指出我在哪里寻找这些吗?
从内核源代码中,我发现__schedule()是主要的调度函数,似乎是从schedule()调用的。 但是什么调用schedule()..以及什么调用调用schedule的函数.. ..
答案 0 :(得分:1)
实际上有两个调度程序,或者说Linux内核中有两个调度代码。有一个核心调度程序,您自己提到称为schedule(),它调用__schedule()。从内核中的许多点调用schedule():
还有另一个调度程序代码,其名称为scheduler_tick()[这也位于core.c中],它是一个定期调度程序,由定时器代码(timer.c)通过频率为HZ的中断调用,即scheduler_tick()在一秒内被称为HZ次。 HZ取决于硬件,其值在100-1024之间变化。 scheduler_tick()调用处理器上当前任务所属的调度类的task_tick()。