我正在阅读有关 jiffies 的内容,它将针对每个计时器中断进行更新。定时器中断的频率由编译时间常数HZ 决定。
我们在 X86 上有很多硬件设备。 1. RTC 2. 可编程中断定时器 3. 本地 APIC 4. 时间戳计数器 5. HPET
这是 Linux 内核用来递增 jiffie 值的设备。
罗伯特·洛夫(Robert Love)的书上写着“可编程中断定时器”。还有效吗。
cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc hpet acpi_pm
# cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc
上面的 sys 文件是否提供了该信息?
答案1
我怀疑你正在读这篇文章或非常类似的东西(https://elinux.org/Kernel_Timer_Systems):
计时器轮、Jiffies 和 HZ(或者,就是这样)
最初的内核定时器系统(称为“定时器轮”)基于每个定时器中断递增内核内部值 (jiffies)。定时器中断成为默认调度量程,所有其他定时器都基于 jiffies。定时器中断率(和 jiffy 增量率)由称为 HZ 的编译时常量定义。过去,内核使用 100 作为 HZ 值,产生 10 ms 的 HZ。 i386 的值更改为 1000,产生 1 毫秒的 jiffy 间隔。最近(2.6.13)内核将 i386 的 HZ 更改为 250。(1000 被认为太高)。
所以你似乎在问“什么计时器计时?”
按排除法:RTC、较新的本地 APIC 和 TSC 不支持固定频率中断。如下所述,HPET 似乎取代了 PIT。
所以最有可能的答案是高温PET。这些基于由石英晶体触发的计数器,通常位于南桥。在这种情况下,jiffys 由单个 HPET 比较器以周期模式计时,生成打断。
然而,Linux 仍然可以使用 PIT 或其他计时器(请参阅https://en.wikipedia.org/wiki/High_Precision_Event_Timer):
使用与兼容性
在 HPET 存在之前设计的操作系统无法使用 HPET,因此它们使用其他计时器设施。较新的操作系统往往能够使用其中任何一个。有些硬件两者兼有。事实上,大多数当前的南桥芯片都将 PIT、PIC、高级可编程中断控制器 (APIC) 和 RTC 设备的传统支持实例合并到其芯片中,无论操作系统是否使用它们,这有助于非常现代的 PC 运行较旧的操作系统。
PIT 和 PET 之间的连接
可编程中断定时器是一个活动定时器,可以中断代码的正常执行。 它似乎已被 HPET 取代:
可编程间隔定时器 (PIT) 是现代计算机的重要组成部分,尤其是在多任务环境中。通过设置各种寄存器值,可以使 PIT 芯片以一定的速率向上或向下计数,并在特定时间触发中断。定时器可以设置为循环模式,以便在触发时自动重新开始计数,也可以将其设置为一次性倒计时模式。
在较新的硬件上,可能会提供 HPET(高精度事件计时器),它是 PIT 概念的演变。