x86中断0x1A似乎给了计算机的时钟时间,但它只能给出55ms以内的准确时间(AH=0)。有没有办法获得比这更小的增量(也许更“正常”),比如 1ms?我正在尝试制作自己的玩具操作系统,所以我不能使用我自己无法编写的任何东西。
问问题
430 次
2 回答
6
您可以使用rdtsc
x86 上的(读取时间戳计数器)指令将 64 位 CPU 时间戳转换为edx:eax
. 该指令的实现取决于您的处理器,但它要么每个时钟递增一次,要么以恒定速率递增。因此,时间分辨率也有所不同,但应该优于 1ms。
使用有一些注意事项rdtsc
:
- 时间戳计数器不一定在 CPU 内核之间同步。这可能是超线程和多核 CPU 中的一个问题。
- 计数器不一定以恒定速率递增。它可能会受到处理器的节流或节能功能的影响。
- 休眠会导致计数器重置。
由于您正在编写自己的操作系统,因此您可能无需担心其中一些问题。
于 2012-07-19T23:24:55.340 回答