5

正如我所读到的,计时器 ISR 在每个计时器滴答声中都会增加 jiffies。但是在 SMP 中,所有 CPU 都有自己的定时器中断,因此也有自己的定时器 ISR。所以我的问题是:

jiffies 在所有 CPU 上都是全局的吗?如果是这样,哪个 CPU 如何在其定时器 ISR 中增加它?

根据我的理解,jiffies 不能针对每个 CPU,否则在不同 CPU 上调度的同一进程会看到不同的 jiffy 值。

4

2 回答 2

6

有两个定时器中断:
本地定时器中断 ( LOCin /proc/interrupts) 在每个 CPU 上每 jiffy 触发一次。
全局定时器中断(中断 0)每瞬间触发一次,在任何 CPU 上。它递增jiffies

请注意,“Tickless Kernel”配置选项(在 Linux 2.6.21 中引入CONFIG_NO_HZ)删除了这些中断。使用无滴答内核,不再有周期性中断。相反,当一个进程开始它的量程时,Linux 会在硬件中设置一个“闹钟”,以便在量程结束时触发中断。

于 2012-07-19T13:26:36.197 回答
0

请参阅此帖子链接

基本上,tick_do_timer_cpu变量保存 CPU ID,它应该运行管理 jiffies 的代码。jiffies 管理函数执行可以从一个核跳转到另一个核,但显然不能同时在不同核上进行更新。

也可以看看kernel/time/tick-common.c

于 2015-10-05T14:01:26.050 回答