L'interrupt x86 0x1A sembra fornire l'ora dell'orologio del computer, ma può fornire solo un tempo preciso entro 55 ms (AH = 0). C'è un modo per ottenere incrementi più piccoli (e forse un po 'più "normali") di quello, come forse 1ms? Sto cercando di creare il mio sistema operativo giocattolo, quindi non posso usare nulla che non possa scrivere da solo.Ottieni il tempo con incrementi di 1 ms
risposta
Poiché si sta creando il proprio sistema operativo, non è necessario mantenere il periodo del timer. È possibile riprogrammare il PIT per attivare INT 8 (IRQ 0) più spesso. Vedi here.
Sui computer più recenti è anche possibile utilizzare lo High Precision Event Timer.
È possibile utilizzare l'istruzione rdtsc
(lettura timestamp) su x86 per ottenere la data/ora della CPU a 64 bit in edx:eax
. L'implementazione di questa istruzione dipende dal processore, ma aumenta di una volta l'orologio o ad una velocità costante. Per questo motivo varia anche la risoluzione temporale, ma dovrebbe essere migliore di 1 ms.
Ci sono alcune avvertenze di utilizzare rdtsc
:
- Il contatore timestamp non è necessariamente in sincronia tra i core della CPU. Questo può essere un problema nelle CPU hyper-threaded e multi-core.
- Il contatore non aumenta necessariamente a una velocità costante. Può essere influenzato dalla limitazione o dalle funzioni di risparmio energetico del processore.
- La sospensione può causare il reset del contatore.
Poiché si sta scrivendo il proprio sistema operativo, potrebbe non essere necessario preoccuparsi di alcuni di questi problemi.
- 1. Ottieni il tempo dall'indice xts
- 2. Sequenza di incrementi variabili con R?
- 3. Sleep (1) e SDL_Delay (1) richiede 15 ms
- 4. Thread.Sleep (1) richiede più tempo di 1ms
- 5. Ottieni testo sopra la tabella MS Word
- 6. Ottieni il sysdate -1 in Hive
- 7. Come ottenere il livello della batteria in tempo reale su iOS con una granularità 1%
- 8. incrementi doppie in Java
- 9. CSS larghezza 100% con incrementi per 20px
- 10. ciclo For in R con incrementi
- 11. Ottieni il tempo selezionato da UIDatePicker
- 12. Android - Ottieni il tempo del widget cronometro
- 13. Ottieni PID da MS-Word ApplicationClass?
- 14. Come fare per loop in aumento Java con incrementi diversi da 1
- 15. DATEADD MS -1 non fa nulla
- 16. Aggiunta di 1 ora per il tempo variabile
- 17. Mappa STL C++: è il tempo di accesso O (1)?
- 18. UIDatePicker 15 minuti Incrementi Swift
- 19. Scorrimento di un UIScrollView orizzontale con incrementi graduali?
- 20. C# Confusioni di incrementi pre e post.
- 21. La sottrazione di 1 ms porta a comportamenti imprevisti
- 22. Impossibile trovare il destinatario definito manifest ~ ~ 1% del tempo
- 23. Ottieni il numero di righe per varchar specifico in MS SQL
- 24. etichettare una trama in incrementi di pi
- 25. JodaTime PeriodFormat, tempo trascorso con solo 1 campo
- 26. comando termina prebuild caso di copia con il codice 1
- 27. MySQL Ottieni il tempo del vecchio record inserito?
- 28. Determinare il tempo tra 1 a 0 transizioni
- 29. Calcolare il tempo tra l'ora -1 e l'ora 2?
- 30. Quale unità di tempo restituisce il tempo?
uno potrebbe anche utilizzare il timer APIC: http://wiki.osdev.org/APIC_timer – Necrolis