我一直不解的是:计算机如何精确地调节和显示时间?例如:如果我要编写一个执行此操作的程序:
做2 + 2,然后等待5秒
处理器如何知道“ 5秒”是什么?在计算机系统中如何测量时间?是否有专门用于此目的的特定芯片?它是如何工作的?
感谢您的答复;我对计算机科学非常感兴趣,很乐意为您提供= D的任何帮助。
我一直不解的是:计算机如何精确地调节和显示时间?例如:如果我要编写一个执行此操作的程序:
做2 + 2,然后等待5秒
处理器如何知道“ 5秒”是什么?在计算机系统中如何测量时间?是否有专门用于此目的的特定芯片?它是如何工作的?
感谢您的答复;我对计算机科学非常感兴趣,很乐意为您提供= D的任何帮助。
Answers:
尽管Joel的答案是正确的,但实际上它要复杂一些。
需要考虑的第一件事(这里我仅关注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等计时无线电台的时间信息进行解码。这样的时间站具有自己的高精度时间源,并通过无线电传输其输出。由于无线电波以光速传播,因此延迟通常很小。
IIRC,有一个小晶体,当有电流通过时,它会以特定的频率振动。每个动作都被计数,并且其中特定数量触发一个时钟周期。
HPET使用10 MHz时钟
HPET 至少使用10 Mhz时钟。它可以比10 Mhz更精确,但永远不会比它更精确。
http://en.wikipedia.org/wiki/High_Precision_Event_Timer#Comparison_to_predecessors