2010-04-09 45 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