linux内核用于定时器中断的硬件是什么

md.*_*mal 5 linux process scheduling interrupt linux-kernel

我正在阅读有关 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
Run Code Online (Sandbox Code Playgroud)

上面的 sys 文件是否提供了该信息?

Phi*_*ing 5

我怀疑您正在阅读此内容或非常相似的内容(https://elinux.org/Kernel_Timer_Systems):

计时器轮、Jiffies 和 HZ(或者,原来的样子)

最初的内核定时器系统(称为“定时器轮”)是基于在每次定时器中断时递增一个内核内部值(jiffies)。定时器中断成为默认的调度时间片,所有其他定时器都基于 jiffies。定时器中断率(and jiffy increment rate) 由一个叫做 HZ 的编译时常量定义。不同的平台使用不同的 HZ 值。历史上,内核使用 100 作为 HZ 的值,产生 10 ms 的 jiffy 间隔。使用 2.4,HZ i386 的值更改为 1000,产生 1 毫秒的瞬间间隔。最近(2.6.13)内核将 i386 的 HZ 更改为 250。(1000 被认为太高了)。

因此,您似乎在问“什么计时器时间很快?”

通过消除过程:RTC、较新的本地 APIC 和 TSC 不支持固定频率中断。正如下面引用的,HPET 似乎取代了 PIT。

所以最有可能的答案是HPET。这些是基于由石英晶体触发的计数器,通常在南桥上。在这种情况下,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 概念的演变。