web-dev-qa-db-ja.com

最新のPCの内部時計はどのくらい正確ですか?

10年前、一般的なクロック精度はシステムティックと同等で、10〜30ミリ秒の範囲でした。過去数年間で、精度は複数のステップで向上しました。今日では、実際のナノ秒単位で時間間隔を測定する方法があります。ただし、通常のフレームワークは、約15msの精度で時間を返します。

私の質問は、どのステップで精度が向上したか、ナノ秒単位でどのように測定できるか、そして なぜまだマイクロ秒未満の精度が得られることが多いのですか (たとえば、.NETの場合)。

(免責事項:これまで質問されていなかったのは奇妙なことです。検索したときにこの質問を見逃したと思います。その場合は、閉じて質問を指定してください。ありがとうございます。これはSOであり、他のSOFUサイトにはありません。精度と精度の違いを理解しています。)

27
mafu

それは本当にPCの歴史の特徴です。オリジナルのIBM-PCは、バッテリーバックアップされたリアルタイムクロックと呼ばれるチップを使用していました(これらのバッテリーを交換する必要があったことを覚えていますか?)これらは、マシンの電源がオフになり、時間を維持したときに動作しました。これらの周波数は32.768kHz(2 ^ 15サイクル/秒)であり、16ビットシステムでの時間を簡単に計算できました。次に、このリアルタイムクロックはCMOSに書き込まれ、古いオペレーティングシステムの割り込みシステムを介して利用可能でした。

10MHzのクロック速度を指定するHighPrecision Event Timerと呼ばれる新しい標準がMicrosoftとIntelから出ています http://www.intel.com/hardwaredesign/hpetspec_1.pdf さらに新しいPCアーキテクチャはこれを採用し、 Northbridgeコントローラーに配置すると、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」ドライバーではなく、新しい「rtc-cmos」ハードウェアクロックデバイスドライバーが必要です。

とはいえ、この追加の解像度にアクセスするにはどうすればよいでしょうか。以前のstackoverflowの記事からカットアンドペーストすることはできましたが、できませんでした-HPETを検索するだけで、より細かいタイマーを機能させる方法についての回答が見つかります

24
Romain Hippeau

私は今日これについてMSDNのブログ投稿を文字通り読みました ここでそれを読んでください 、それはトピックをかなりよくカバーしています。これはC#のDateTimeに重点を置いていますが、普遍的に適用できます。

4
Chris