2010-04-09 100 views
20

我知道10年前,典型的时钟精度等于系统时钟,它在10-30ms范围内。在过去的几年里,精确度多次增加。现在,有些方法可以在实际的纳秒内测量时间间隔。然而,通常的框架仍然会以大约15ms的精度返回时间。现代PC的内部时钟有多精确?

我的问题是,哪些步骤确实提高了精度,如何以纳秒为单位进行测量,并且为什么我们仍然经常获得小于微秒级的精度(例如在.NET中)。 (免责声明:这让我感到奇怪,之前没有问过这个问题,所以我想我在搜索时错过了这个问题。请关闭并指出我在这种情况下的问题,谢谢。我相信这属于SO而不是在任何其他的SOFU网站,我了解精度和准确性之间的区别。)

回答

20

这确实是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:视窗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”司机

所有这一切说我们如何访问这些额外的分辨率是多少? 我可以截断并从以前的计算器的论文中,而不是 - 只要搜索HPET,你会发现关于如何获得更精细的定时器工作

+0

http://en.wikipedia.org/wiki/High_Precision_Event_Timer#Problems显然,HPET的某些实现具有讽刺意味的是由于读取缓慢或漂移等问题而产生精度问题。尽管如此,在大多数情况下仍然可以使用,特别是对于媒体播放/同步(因为这就是它最初的意思)。 – Alex 2015-05-15 20:43:57

1

我从字面上阅读了MSDN上关于今天的博客文章,read it here,它涵盖了相当不错的主题。它强调C#的日期时间,但它是普遍适用的。

+0

我刚才读相同的答案。它提出了这个问题,因为埃里克没有详细说明。他的文章只是基本的。 – mafu 2010-04-09 12:28:30

+0

@mafutrct :)测量时间并不是一门精确的科学,因为时间是几点?时间被定义为事件发生的时间段。原子钟使用原子共振频率标准作为其计时元件,使其非常准确。但是计算机不能使用这种精确的测量,所以使用其他不太准确的方法。随着时间的推移,时钟会变得不同步。 – Chris 2010-04-09 12:33:59

+0

嗯,但这并不完全回答这个问题。计算机可以为timediff提供ns精度,所以应该有一种方法来提高我们通常得到的ms精度。另外,我想知道这种ns精度已经(有时)达到的方式。 – mafu 2010-04-09 12:41:06