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
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.
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
:
- 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.
- 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.
- 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.
- 1. ASP.NET: Obtenga milisegundos desde 1/1/1970
- 2. C# Matriz de incrementos
- 3. Obtenga la sysdate -1 en Hive
- 4. C# MS Project Interop - Obtenga el tiempo de trabajo del recurso
- 5. incrementos de JavaScript
- 6. UISlider con incrementos de 5
- 7. Cómo hacer bucles en aumento de Java por incrementos de 1 otros
- 8. bucle en R con incrementos
- 9. Obtenga tiempo estándar indio (IST) en C#?
- 10. Obtenga tiempo en milisegundos usando C#
- 11. Incrementos de impresión de 0.1 en C#
- 12. Redondea a incrementos de 2.5?
- 13. Desplazamiento horizontal de UIScrollView en incrementos escalonados?
- 14. Obtenga los valores enum de web.config en tiempo de ejecución
- 15. Cómo aumentar el tiempo en 1 hora
- 16. ¿Por qué esta función de tiempo mide siempre 0 ms?
- 17. Android - Obtenga tiempo del widget del cronómetro
- 18. Obtenga la versión node.js en tiempo de ejecución
- 19. Obtenga múltiples datos de sensor al mismo tiempo en Android
- 20. Obtenga el año de la marca de tiempo sql
- 21. Obtenga tiempo POSIX/Unix en segundos y nanosegundos en Python?
- 22. Secuencia de incrementos variables con R?
- 23. Adición de 1 hora para tiempo variable
- 24. Obtenga cada hora para un rango de tiempo
- 25. Obtenga tiempo independiente del dispositivo y del usuario en android
- 26. Obtenga tiempo en milisegundos sin instalar un paquete adicional?
- 27. Contador de incrementos de Ruby on Rails en el modelo
- 28. etiquetado de una parcela en incrementos de pi
- 29. Django: obtenga fechas distintas de la marca de tiempo
- 30. Incrementos de revisión de rama/maestra usando Git
uno también podría usar el temporizador APIC: http://wiki.osdev.org/APIC_timer – Necrolis