x86中断0x1A似乎给出了计算机的时钟时间,但它只能给出55ms内的准确时间(AH = 0)。有没有办法获得比这更小的增量(也许更“正常”),比如1ms?我正在尝试制作自己的玩具操作系统,所以我不能使用任何我不能自己写的东西。
答案 0 :(得分:6)
您可以使用x86上的rdtsc
(读取时间戳计数器)指令将64位CPU时间戳记转换为edx:eax
。此指令的实现取决于您的处理器,但它要么每个时钟递增一次,要么以恒定速率递增。因此,时间分辨率也会有所不同,但应该优于1ms。
使用rdtsc
时需要注意一些事项:
由于您正在编写自己的操作系统,因此您可能不需要担心其中的一些问题。
答案 1 :(得分:3)
由于您正在制作自己的操作系统,因此无需保留计时器时间。可以重新编程PIT以更频繁地触发INT 8(IRQ 0)。请参阅here。
在较新的计算机上,您还可以使用High Precision Event Timer。