2012-07-19 13 views
5

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

3

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.

+0

uno potrebbe anche utilizzare il timer APIC: http://wiki.osdev.org/APIC_timer – Necrolis

6

È 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:

  1. Il contatore timestamp non è necessariamente in sincronia tra i core della CPU. Questo può essere un problema nelle CPU hyper-threaded e multi-core.
  2. Il contatore non aumenta necessariamente a una velocità costante. Può essere influenzato dalla limitazione o dalle funzioni di risparmio energetico del processore.
  3. 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.

Problemi correlati