我一直很困惑:计算机究竟是如何调节和报时的?例如:如果我要编写一个程序来执行以下操作:
执行 2+2 然后等待 5 秒
处理器如何知道“5 秒”是多少?计算机系统中如何测量时间?是否有专门用于此目的的芯片?它如何工作?
谢谢大家的回复;我对计算机科学非常感兴趣,非常希望得到大家的任何帮助=D。
答案1
虽然乔尔的回答是正确的,但实际上情况要复杂一些。
首先需要考虑的事情(这里我只关注 PC)是计算机中有几个时钟,每个时钟都有自己的用途。
最流行、最容易理解的是实时时钟。它基本上是一个芯片,里面有一个简单的时钟。它们通常具有与标准时钟相同类型的石英晶体,并且通常带有电池,以便在计算机断电时计时。它们的问题是它们不太准确,从 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
我记得,有一块小晶体,当电流通过时,它会以特定频率振动。每次运动都会被计数,达到特定次数就会触发一个时钟周期。
答案3
HPET 使用 10 MHz 时钟
HPET 用途至少10 Mhz 时钟。它可以比 10 Mhz 更精确,但绝不会更低。
http://en.wikipedia.org/wiki/High_Precision_Event_Timer#Comparison_to_predecessors