32

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

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

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

4

3 に答える 3

26

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

10MHz のクロック速度を指定する High Precision Event Timerと呼ばれる新しい標準が Microsoft と Intel から出ています http://www.intel.com/hardwaredesign/hpetspec_1.pdf HPET は 100MHz 以上で同調できます。10Mhz では 100 ナノ秒の分解能を得ることができ、100MHZ では 10 ナノ秒の分解能を得ることができるはずです。

次のオペレーティング システムは、HPET を使用できないことが知られています: Windows XP、Windows Server 2003、およびそれ以前の Windows バージョン、以前の Linux バージョン

次のオペレーティング システムは、HPET を使用できることが知られています: Windows Vista、Windows 2008、Windows 7、Mac OS X の x86 ベース バージョン、2.6 カーネルを使用する Linux オペレーティング システム、および FreeBSD。

Linux カーネルでは、元の「rtc」ドライバーではなく、新しい「rtc-cmos」ハードウェア クロック デバイス ドライバーが必要です。

この余分な解像度にアクセスするにはどうすればよいでしょうか? 以前のスタックオーバーフローの記事からカット アンド ペーストすることはできましたが、そうではありませんでした。

于 2010-04-11T03:47:05.833 に答える
5

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

于 2010-04-09T12:27:46.030 に答える