代码之家  ›  专栏  ›  技术社区  ›  mafu

现代PC的内部时钟有多精确?

  •  22
  • mafu  · 技术社区  · 14 年前

    我知道10年前,典型的时钟精度相当于一个系统时钟,在10-30毫秒的范围内,在过去的几年里,精度是分多步提高的。现在,有很多方法可以用实际的纳秒来测量时间间隔。然而,通常的框架返回时间的精度仍然只有15毫秒左右。

    我的问题是,哪些步骤确实提高了精度,如何以纳秒为单位进行测量,以及 为什么我们仍然经常得到小于微秒的精度 (例如在.NET中)。

    (免责声明:我很奇怪以前没有问过这个问题,所以我想我在搜索时错过了这个问题。在这种情况下,请关闭并指出我的问题,谢谢。我相信这是属于So的,而不是任何其他Sofu网站。我了解精度和准确度之间的区别。)

    2 回复  |  直到 14 年前
        1
  •  22
  •   Romain Hippeau    14 年前

    这真的是个人电脑历史的一个特点。 最初的IBM-PC使用了一种叫做实时时钟的芯片,它是由电池备份的(您还记得需要更换这些电池吗?)这些装置在机器断电时工作,并保持时间。这些频率为32.768kHz(2^15个周期/秒),这使得在16位系统上计算时间变得容易。 该实时时钟随后被写入到CMOS中,后者可通过旧操作系统中的中断系统获得。

    微软和英特尔推出了一个新的标准,叫做高精度事件计时器,它规定时钟速度为10MHz。 http://www.intel.com/hardwaredesign/hpetspec_1.pdf 即使是较新的PC架构,也会将其放在NorthBridge控制器上,而hpet可以在100MHz甚至更高的频率下工作。 在10MHz时,我们应该能够获得100纳秒的分辨率,在100MHz时,我们应该能够获得10纳秒的分辨率。

    已知以下操作系统无法使用hpet:Windows XP、Windows Server 2003和更早的Windows版本、较早的Linux版本

    已知以下操作系统能够使用hpet:Windows Vista、Windows 2008、Windows 7、基于x86的Mac OS X版本、使用2.6内核和freebsd的Linux操作系统。

    对于Linux内核,您需要更新的“rtc-cmos”硬件时钟设备驱动程序,而不是原始的“rtc”驱动程序。

    所有这些都说明了我们如何访问这个额外的解决方案? 我可以从以前的stackoverflow文章中剪切和粘贴,但不只是搜索hpet,您将找到如何使计时器更好工作的答案。

        2
  •  3
  •   Chris    14 年前

    今天我在msdn上读了一篇关于这个的博文, read it here 它很好地涵盖了这个主题。它强调C的日期时间,但它普遍适用。