32

我知道 10 年前,典型的时钟精度等于一个系统节拍,在 10-30 毫秒的范围内。在过去的几年中,精度以多个步骤提高。如今,有一些方法可以以实际纳秒为单位测量时间间隔。然而,通常的框架仍然以大约 15 毫秒的精度返回时间。

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

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

4

3 回答 3

26

这确实是 PC 历史上的一个特征。最初的 IBM-PC 使用了一种称为实时时钟的芯片,该芯片由电池供电(您还记得需要更换这些电池吗?)这些芯片在机器断电并保持时间时运行。这些频率为 32.768 kHz(2^15 周期/秒),这使得在 16 位系统上计算时间变得容易。然后将这个实时时钟写入 CMOS,CMOS 可通过旧操作系统中的中断系统获得。

微软和英特尔推出了一个更新的标准,称为高精度事件计时器,它指定了 10MHz 的时钟速度 http://www.intel.com/hardwaredesign/hpetspec_1.pdf 甚至更新的 PC 架构也采用了这个并将其放在北桥控制器上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,您就会找到有关如何让更好的计时器工作的答案

于 2010-04-11T03:47:05.833 回答
5

我今天确实在 MSDN 上阅读了一篇关于此的博客文章,请在此处阅读,它很好地涵盖了该主题。它强调 C# 的 DateTime,但它是普遍适用的。

于 2010-04-09T12:27:46.030 回答
1

好吧,到目前为止,我还没有看到任何 PC 可以保持准确(实时)时间优于 100 毫秒/天。在过去 40 年左右的时间里,在我所有的 PC 中,实时时间总是要么快要么慢,并且可以漂移多达 2 或 3 秒/天。其主要原因是驱动时钟电路的 PC 晶体振荡器(无论频率如何)的精度。在普通计算机中,这些振荡器从未校准到它们的标称频率,而且由于 PC 外壳内的温度变化,甚至没有基本的频率漂移补偿。

于 2021-05-18T09:18:37.507 回答