0

我知道在各种操作系统上使用 CPU 时钟计数器获取时间增量的标准方法。我的问题是,这样的操作系统如何考虑 CPU 频率的变化以达到省电的目的。我最初认为这可以基于操作系统使用特定调用来测量频率以根据正在使用的内核、当前设置的频率等来获得校正频率的事实来解释。但后来我意识到,不是吗?如果 CPU 频率在两个时钟查询之间降低并恢复到其原始值,则使任何时间增量不准确。

例如采取以下场景:

查询 CPU 周期。操作系统会降低 CPU 频率以节省电量。其他一些代码在这里运行。操作系统提高 CPU 频率以提高性能。查询 CPU 周期。将 delta 计算为周期差除以频率。

这将产生不准确的增量,因为两个查询之间的 CPU 频率不是恒定的。操作系统或必须使用 CPU 周期处理时间增量的程序如何解决这个问题?

4

1 回答 1

0

用 rdtsc看到这个错误的时钟周期测量

还有更多的方法来处理它

  1. 将 CPU 时钟设置为最大值

    阅读上面的链接,看看怎么做?

  2. 使用 PIT 代替 RDTSC

    PIT是可编程中断定时器(如果我没记错的话是 Intel 8253)它存在于自 x286 以来(甚至可能更早)的所有 PC 主板上,但分辨率仅为 ~119KHz,并非所有操作系统都允许您访问它。

  3. 结合 PIT 和 RDTSC

    只需在足够稳定时通过PIT重复测量CPU时钟即可开始测量(并继续扫描CPU时钟变化)。如果测量期间CPU时钟发生变化,则丢弃测量并重新开始

于 2014-02-05T09:22:09.407 回答