以1ms为增量获得时间

时间:2012-07-19 23:11:04

标签: assembly x86 clock

x86中断0x1A似乎给出了计算机的时钟时间,但它只能给出55ms内的准确时间(AH = 0)。有没有办法获得比这更小的增量(也许更“正常”),比如1ms?我正在尝试制作自己的玩具操作系统,所以我不能使用任何我不能自己写的东西。

2 个答案:

答案 0 :(得分:6)

您可以使用x86上的rdtsc(读取时间戳计数器)指令将64位CPU时间戳记转换为edx:eax。此指令的实现取决于您的处理器,但它要么每个时钟递增一次,要么以恒定速率递增。因此,时间分辨率也会有所不同,但应该优于1ms。

使用rdtsc时需要注意一些事项:

  1. 时间戳计数器不一定在CPU内核之间同步。这可能是超线程和多核CPU中的一个问题。
  2. 计数器不一定以恒定速率递增。它可能会受到处理器的节流或省电功能的影响。
  3. 休眠可能导致计数器重置。
  4. 由于您正在编写自己的操作系统,因此您可能不需要担心其中的一些问题。

答案 1 :(得分:3)

由于您正在制作自己的操作系统,因此无需保留计时器时间。可以重新编程PIT以更频繁地触发INT 8(IRQ 0)。请参阅here

在较新的计算机上,您还可以使用High Precision Event Timer