在计算机系统中是如何测量时间的?

DRK*_*RK3 14 cpu time

我一直困惑的是:计算机究竟是如何调节和报时的?例如:如果我要编写一个执行此操作的程序:

做 2+2 然后等待 5 秒

处理器如何知道“5 秒”是什么?在计算机系统中是如何测量时间的?是否有专门用于该目的的特定芯片?它是如何工作的?

感谢您的回复;我对计算机科学真的很感兴趣,并且希望您能给我任何帮助 =D。

And*_*aKo 14

虽然乔尔的回答是正确的,但实际上,它有点复杂。

需要考虑的第一件事(这里我将只关注个人电脑)是计算机中有多个时钟,每个时钟都有自己的用途。

最流行和最容易理解的是实时时钟。它基本上是一个芯片,里面有一个简单的时钟。它们通常具有与标准时钟相同类型的石英晶体,并且通常具有用于在计算机断电时保持时间的电池。它们的问题在于它们不是很准确,从 Syntech 的链接中可以看出。32.768 kHz 晶体对于处理器在兆赫和千兆赫范围内的现代系统的任何计时来说都太慢了。

在这里,我们来到下一点:有用于精确时间测量和倒计时的内部时钟。

一个简单的时钟是可编程间隔定时器。它所做的是等待一定时间,然后向 CPU 发送中断。当 CPU 收到中断时,它会停止正在执行的任何操作并倾向于产生中断的任务。这样 CPU 就不必经常检查是否完成了某些操作。相反,它可以专注于其他工作,并让 PIT 在工作完成时告诉它。PIT 使用 1.193182 MHz 时钟源,因此比简单的 RTC 精确得多。

下一个有趣的测量系统是时间戳计数器。其背后的想法是我们可以使用处理器的时钟源获得比使用各种系统定时器更精确的时间测量。PIT 有 1.193182 MHz 的时钟,但即使是最早的 x86 处理器也有更高的时钟。因此,我们将有一个计时器,它会在每设置一定数量的处理器周期后更新。当时处理器有非常稳定的时钟,使用 TSC 是进行精确时间测量的好方法。然而,TSC 的使用带来了许多问题。不同的处理器具有不同的滴答率并以不同的速度测量时间。后来,随着技术的进步,我们有了可以改变频率的现代处理器。这是一个主要问题,因为 CPU 时钟不再是恒定的,我们不能用它来测量时间。

这就是我们现在拥有高精度事件计时器的原因。HPET 使用 10 MHz 时钟,因此比 PIT 更精确。另一方面,它的时钟源不依赖于CPU的时钟,即使CPU的时钟发生变化,它也可以用来测量时间。与用作倒计时的 PIT 不同,HPET 测量自计算机开启以来的时间,并在需要采取行动时将当前时间与时间进行比较。

计算机还有其他可用的时间来源,我认为需要提及。一些计算机连接到原子钟,可以使用它们来精确测量时间。

一种更便宜且更常见的选择是使用外部时间源来校准计算机的内部时间源。例如,GPS 接收器可用于提供高精度时间测量,因为 GPS 卫星有其内部原子钟。

另一种比 GPS 接收器少见的选择是使用特殊的无线电接收器,它可以解码来自计时无线电台(例如 DCF77)的时间信息。这样的时间站有自己的高精度时间源,并通过无线电传输它们的输出。由于无线电波以光速传播,因此延迟通常是微不足道的。

  • 很详细的回答!感谢您花时间写出所有内容! (2认同)

Joe*_*orn 11

IIRC,有一个小晶体,当电流通过它时,它会以特定频率振动。每次移动都会被计数,并且特定数量的移动会触发一个时钟周期。

  • 我相信它是*仍然*石英。(您甚至可以在主板上看到印有“14MHz”或“14.3MHz”或其他频率的小型金属圆角矩形,其中包含石英晶体。) (3认同)