我知道10年前,典型的时钟精度等于系统滴答,其范围为10-30ms。在过去几年中,精确度分多步增加。如今,有一些方法可以测量实际纳秒的时间间隔。但是,通常的框架仍然会以大约15ms的精度返回时间。
我的问题是,哪些步骤确实提高了精度,如何以纳秒为单位进行测量,以及为什么我们仍然经常获得低于微秒的精度(例如在.NET中)
(免责声明:我之前没有问过这个奇怪的事情,所以我猜我在搜索时错过了这个问题。请关闭并指出我的问题,谢谢。我相信这属于SO和不在任何其他SOFU网站上。我理解精确度和准确度之间的区别。)
答案 0 :(得分:23)
这确实是PC历史的一个特征。 最初的IBM-PC使用了一个称为实时时钟的芯片备份电池(你还记得需要更换这些电池吗?)这些芯片在电机关闭并保持时间时运行。这些频率为32.768 kHz(2 ^ 15周/秒),这使得在16位系统上计算时间变得容易。 然后将这个实时时钟写入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,你就会找到关于如何让更精细的计时器工作的答案
答案 1 :(得分:3)
我今天在MSDN上阅读了一篇关于此问题的博文read it here,它很好地涵盖了这个主题。它强调C#的DateTime,但它普遍适用。
答案 2 :(得分:1)
嗯,到目前为止,我还没有看到任何 PC,它可以保持准确的(真实)时间,而不是说 100 毫秒/天。在过去 40 年左右的时间里,在我所有的 PC 中,实时时间总是快或慢,每天可能漂移 2 或 3 秒。造成这种情况的主要原因是驱动时钟电路的 PC 晶体振荡器(无论频率如何)的精度。在运行中的计算机中,这些振荡器从未被校准到它们的标称频率,而且由于 PC 外壳内的温度变化,甚至没有对频率漂移进行基本的补偿。