2012-07-19 55 views
5

x86中斷0x1A似乎給出了計算機的時鐘時間,但它只能在55ms(AH = 0)內給出準確的時間。有沒有辦法獲得更小的增量(也許有點「正常」),比如可能是1ms?我試圖製作我自己的玩具操作系統,所以我不能使用任何我不能寫自己的東西。以1ms爲增量獲取時間

回答

3

由於您正在製作自己的操作系統,因此不必保留計時器週期。可以重新編程PIT以更頻繁地觸發INT 8(IRQ 0)。見here

在較新的計算機上,您還可以使用High Precision Event Timer

+0

也可以使用API​​C定時器:http://wiki.osdev.org/APIC_timer – Necrolis 2012-07-20 09:49:45

6

您可以使用x86上的rdtsc(讀取時間戳計數器)指令將64位CPU時間戳記轉換爲edx:eax。這條指令的執行取決於你的處理器,但是它每個時鐘或者恆定的速率增加一次。因此,時間分辨率也有所不同,但應該比1ms好。

有一些注意事項使用rdtsc

  1. 時間戳計數器不一定同步多個CPU內核。這可能是超線程和多核CPU的問題。
  2. 計數器不一定以恆定的速率遞增。它可能會受到處理器節流或省電功能的影響。
  3. 休眠會導致計數器重置。

由於您正在編寫自己的操作系統,因此您可能不必擔心其中的一些問題。