【问题标题】:Can the kernel set the interval of the "hardware timer" of the CPU, and does the CPU have a dedicated hardware timer for scheduling?内核能否设置CPU的“硬件定时器”的间隔,CPU是否有专门的硬件定时器进行调度?
【发布时间】:2017-05-06 05:17:27
【问题描述】:

根据我的理解,CPU 有一个“硬件计时器”,它会在其间隔到期时触发中断。

内核使用这个硬件定时器来实现进程的调度机制,所以如果硬件定时器触发一个编号为123的中断,内核会将这个中断编号映射到一个执行调度程序代码的中断处理程序中(这将决定接下来执行哪个进程)。

我有两个问题:

  1. 内核是否可以设置硬件定时器的时间间隔,或者该时间间隔是一个不能通过编程改变的固定数字?
  2. CPU 是否有专用的硬件定时器用于调度,或者有很多硬件定时器,内核可以选择它想使用的任何一个定时器来进行调度?

编辑:我比较感兴趣的硬件架构是PC,但我想知道其他架构(例如:手机,树莓派) PI 等)以类似的方式工作。

【问题讨论】:

  • 我认为这两个问题的答案都是肯定的,但细节是特定于计算机的(在 PC 笔记本电脑和 RaspBerry Pi 上可能会有所不同)。您需要明确您正在谈论的特定硬件架构。所以编辑你的问题来改进它
  • @Basile Starynkevitch 我编辑了我的问题。
  • '内核使用这个硬件定时器来实现进程的调度机制'很好,这实际上是经济的:)它更像是'内核使用这个硬件定时器来超时系统调用和当就绪/正在运行的线程多于核心时,共享 CPU。

标签: timer operating-system kernel cpu scheduling


【解决方案1】:

详细信息因硬件而异(可能因各种主板、芯片组、处理器而异;请参阅SouthBridge)。阅读High Precision Event Timer(和APIC)。

另见OSDEV wiki,尤其是Programmable Interval Timer

(所以两个问题的答案通常都是肯定的)

【讨论】:

    【解决方案2】:

    从早期开始,与 IBM 兼容的 PC 就有 PIT(可编程间隔定时器):IBM PC 和 IBM PC XT 有 Intel 8253,IBM PC AT 引入了 Intel 8254。

    来自 1984 年 4 月的 IBM PC 技术参考,第 1-11 页:

    系统定时器

    系统使用三个可编程定时器/计数器,如下所示:通道 0 是一个通用定时器,提供恒定时基,用于实现时钟时钟,通道 1 时间和请求来自直接存储器的刷新周期访问 (DMA) 通道,通道 2 支持扬声器的音调生成。 [...]

    频道 0 正是您要求的“恒定时基”,即“间隔”。而且,要回答您的第一个st 问题,它是可变的;它是可编程间隔计时器。

    但是,最初的 IBM PC 中内置的 CPU 是 Intel 8088,基本上是带有 8 位数据总线的 Intel 8086。实模式在当时是最先进的。几年后,英特尔 80286 引入了保护模式,因此在 DOS 统治市场的那些日子里,有效的多任务处理(更不用说抢占式多任务处理或多线程处理)已经无关紧要了。

    快进到 IBM PC AT,世界有幸拥有支持保护模式的 CPU,即 Intel 80286,并且引入了 Intel 8254,它是“[...] 8253 的超集”。 (来自 8254 PIT 数据表)。如果您真的想深入了解 PIT,请阅读底部链接的 8253/8254 数据表。 Linux 可能也值得一看。由于最新的内核过于复杂,无法在 20 分钟内真正理解特定部分,我建议您查看 Linux 0.01,第一个版本。 kernel/system_calls.s 中的 _timer_interrupt 可能很有趣,从那里你可以去任何你想去的地方。

    关于你的第二个nd问题:有多个定时器源,但只有一个适合间隔定时,即通道0。IBM兼容的仍然符合上面显示的系统定时器布局。它们保留了相同的功能,但可能会在此基础上添加更多功能或更改硬件的工作方式和打包方式。如今,确实存在其他计时器,例如高分辨率计时器,但将它们用于中断计时会破坏兼容性。


    【讨论】:

      【解决方案3】:

      内核可以设置硬件定时器的时间间隔,还是说时间间隔是一个不能通过编程改变的固定数字?

      您的问题完全是特定于处理器的。一些处理器具有可控定时器。其他人则有以固定间隔关闭的计时器。但是,您可能遇到的大多数处理器都有可调整的计时器。

      CPU 是否有专门的硬件定时器用于调度,还是有很多硬件定时器,内核可以选择它想使用的任何一个定时器来进行调度?

      有些处理器只有一个定时器。如今,大多数处理器都有多个计时器。

      【讨论】:

        猜你喜欢
        • 2010-10-25
        • 1970-01-01
        • 2011-02-03
        • 2021-11-07
        • 1970-01-01
        • 2017-05-23
        • 2014-02-06
        • 1970-01-01
        相关资源
        最近更新 更多