2012-07-19 13 views
5

La interrupción x86 0x1A parece dar la hora del reloj de la computadora, pero solo puede dar un tiempo preciso dentro de los 55 ms (AH = 0). ¿Hay alguna manera de obtener incrementos más pequeños (y tal vez un poco más "normal") que eso, como quizás 1 ms? Intento crear mi propio sistema operativo de juguete, así que no puedo usar nada que no pueda escribir yo mismo.Obtenga tiempo en incrementos de 1 ms

Respuesta

3

Dado que está haciendo su propio sistema operativo, no tiene que mantener el período del temporizador. Es posible reprogramar el PIT para activar INT 8 (IRQ 0) más a menudo. Ver here.

En computadoras más nuevas también puede hacer uso de High Precision Event Timer.

+0

uno también podría usar el temporizador APIC: http://wiki.osdev.org/APIC_timer – Necrolis

6

Puede usar la instrucción rdtsc (leer el contador de marca de tiempo) en x86 para obtener la marca de tiempo de CPU de 64 bits en edx:eax. La implementación de esta instrucción depende de su procesador, pero se incrementa una vez por reloj o a una tasa constante. Debido a esto, la resolución de tiempo también varía, pero debería ser mejor que 1 ms.

Hay algunas advertencias a la utilización de rdtsc:

  1. El contador de marca de tiempo no es necesariamente sincronizados en núcleos de CPU. Esto puede ser un problema en las CPU con hiperproceso y multi-core.
  2. El contador no aumenta necesariamente a una velocidad constante. Puede verse afectado por las funciones de aceleración o ahorro de energía del procesador.
  3. La hibernación puede hacer que el contador se reinicie.

Dado que está escribiendo su propio sistema operativo, es posible que no tenga que preocuparse por algunos de estos problemas.

Cuestiones relacionadas