2010-04-09 16 views
20

Wiem, że 10 lat temu, typowa dokładność zegara równała się tyknięciu systemu, który był w zakresie 10-30ms. W ciągu ostatnich lat precyzja była zwiększana w wielu krokach. W dzisiejszych czasach istnieją sposoby mierzenia odstępów czasu w rzeczywistych nanosekundach. Jednak zwykłe frameworki wciąż zwracają czas z dokładnością zaledwie około 15 ms.Jak dokładny jest wewnętrzny zegar współczesnego komputera?

Moje pytanie brzmi: jakie kroki zwiększyły precyzję, jak to jest zmierzyć w nanosekundach, i , dlaczego wciąż uzyskujemy dokładność mniejszą niż mikrosekundę (na przykład w .NET).

(Zastrzeżenie: Wydaje mi się dziwne, że nie zadano mi tego wcześniej, więc domyślam się, że tęskniłem za tym pytaniem, gdy szukałem.) Proszę zamknąć i wskazać mi na pytanie w tym przypadku, dziękuję. a nie na żadnej innej witrynie SOFU Rozumiem różnicę między precyzją a dokładnością.)

Odpowiedz

20

To naprawdę jest cecha historii komputera. Oryginalny IBM-PC użył chipa o nazwie Zegar czasu rzeczywistego, który był zasilany z baterii (pamiętasz, że musisz wymienić baterie?), Które działały, gdy urządzenie było wyłączone i utrzymywało czas. Ich częstotliwość wynosiła 32.768 kHz (2^15 cykli na sekundę), co ułatwiło obliczenie czasu w systemie 16-bitowym. Ten zegar czasu rzeczywistego został zapisany na CMOS, który był dostępny przez system przerwań w starszych systemach operacyjnych.

Nowsza norma jest obecnie z Microsoft i Intel o nazwie High Precision Event timer, który określa prędkość zegara 10MHz http://www.intel.com/hardwaredesign/hpetspec_1.pdf Nawet nowsze architektury PC Bierzcie i umieścić go na kontrolerze Northbridge i HPET może TUN na 100MHz lub nawet większy. Przy 10 Mhz powinniśmy być w stanie uzyskać rozdzielczość 100 nano-sekund i przy 100 MHz, powinniśmy być w stanie uzyskać rozdzielczość 10 nano-sekund.

następujących systemów operacyjnych są znane, aby nie być w stanie wykorzystać HPET: Windows XP, Windows Server 2003 i starsze wersje systemu Windows, starsze wersje systemu Linux

następujące systemy operacyjne są znane, aby móc korzystać z HPET: Wersje systemu Windows Vista, Windows 2008, Windows 7, x86 oparte na systemie Mac OS X, Linux z wykorzystaniem jądra 2.6 i FreeBSD.

z jądrem Linux, trzeba nowsze „RTC-CMOS” Driver urządzenie zegar sprzętowy zamiast oryginalnego „RTC” kierowca

Wszystko, co powiedział, w jaki sposób uzyskać dostęp do tej dodatkowej rozdzielczość? Mogę wycinać i wklejać z poprzednich artykułów stackoverflow, ale nie - Po prostu wyszukaj HPET, a znajdziesz odpowiedzi na to, jak uzyskać dokładniejsze liczniki czasu pracy

+0

http://en.wikipedia.org/wiki/High_Precision_Event_Timer#Problems Podobno niektóre implementacje HPET ironicznie mają problemy z precyzją, ze względu na powolność czytania lub dryfowanie, między innymi. Nadal jednak powinno być w porządku, jednak w większości przypadków, szczególnie w przypadku odtwarzania/synchronizowania multimediów (ponieważ jest to przeznaczenie). – Alex

1

Dosłownie przeczytałem wpis na blogu w MSDN o tym dzisiaj, read it here, dość dobrze omawia temat. Ma nacisk na DateTime C#, ale ma uniwersalne zastosowanie.

+0

Po prostu czytam to samo. Podniosło to kwestię, ponieważ Eric nie wdawał się w szczegóły. Jego artykuł dotyczy tylko podstaw. – mafu

+0

@mafutrct :) Czas pomiaru nie jest nauką ścisłą, bo co to jest czas? Czas jest definiowany jako okres, w którym występują zdarzenia. Zegar atomowy używa standardu częstotliwości atomowej rezonansu jako elementu pomiaru czasu, co czyni go bardzo dokładnym. Ale komputery nie mogą używać tak dokładnych pomiarów, więc stosuj inne metody, które są mniej dokładne. W ten sposób z czasem zegary stają się niezsynchronizowane. – Chris

+0

No tak, ale to nie całkiem odpowiada na pytanie. Komputery mogą zapewnić precyzję ns dla czasowników, więc powinien istnieć sposób poprawienia precyzji ms, którą zwykle uzyskujemy. Chciałbym również wiedzieć, w jaki sposób osiągnięto (czasami) osiągnięcie tej precyzji ns. – mafu