5

x86割り込み0x1Aは、コンピューターのクロック時間を与えるように見えますが、正確な時間を与えることができるのは55ms以内(AH = 0)のみです。おそらく1msのように、それよりも小さい増分(そしておそらくもう少し「通常」)を取得する方法はありますか?自分でおもちゃのOSを作ろうとしているので、自分で書けないものは使えません。

4

2 に答える 2

6

x86で(タイムスタンプカウンターの読み取り)命令を使用しrdtscて、64ビットCPUタイムスタンプをに取得できますedx:eax。この命令の実装はプロセッサによって異なりますが、クロックごとに1回、または一定の速度で増分します。このため、時間分解能も異なりますが、1msよりも優れているはずです。

使用する際の注意点がいくつかありますrdtsc

  1. タイムスタンプカウンターは、必ずしもCPUコア間で同期しているとは限りません。これは、ハイパースレッドおよびマルチコアCPUで問題になる可能性があります。
  2. カウンターは必ずしも一定の速度で増加するわけではありません。プロセッサのスロットル機能または省電力機能の影響を受ける可能性があります。
  3. ハイバネーションにより、カウンターがリセットされる可能性があります。

独自のOSを作成しているので、これらの問題のいくつかについて心配する必要はないかもしれません。

于 2012-07-19T23:24:55.340 に答える
3

独自のOSを作成しているので、タイマー期間を維持する必要はありません。INT 8(IRQ 0)をより頻繁にトリガーするようにPITを再プログラムすることが可能です。ここを参照してください。

新しいコンピューターでは、 High PrecisionEventTimerを使用することもできます。

于 2012-07-20T08:54:01.740 に答える