Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: blitzmaster am 08. May 2007, 18:20
-
Hi!
Ich hab gerade einen Artikel über das neue Sound - Subsystem von Windows Vista gelesen.
Zitat von der c't 10/07 S. 172 / 173
In Windows Vista hingegen orientiert sich die Interrupt-Routine nicht wie in Windows XP und seinen Vorgängern an starren Zeiterintervallen, die jeweils 10 bis 15ms lang sind, sondern an der Anzahl der tatsächlich durchlaufenen CPU-Zyklen. Diese Werte legen moderne Prozessoren in einem eigenen Register ab.
Welches Register?
-
tsc
Timestamp Counter
Du kannst darauf über rdtsc zugreifen.
-
und ab welchen prozessor ist dieses register implementiert?
Und man braucht doch nocht immer einen interrupt, der Kernel muss doch irgendwann rdtsc ausführen, um dann zum nächsten task zu springen, oder?
-
Ab dem Pentium II ist RDTSC offiziell dabei, Pentium I kann die Instruktion allerdings auch schon ausführen. Es gibt Pentium I Clones, die die Instruktion nicht kennen. Du kannst feststellen, ob die Instruktion unterstützt ist, indem du CPUID (http://www.sandpile.org/ia32/cpuid.htm) mit eax=0x00000001 ausführst. Wenn dann Bit 4 in edx gesetzt ist, kannst du die Instruktion ausführen. (Zählung beginnt bei 0.)
Entweder wird immer noch auf Basis des Timer-IRQs unterbrochen, aber die Zeit in CPU-Zyklen gemessen, oder Vista nutzt einfach einen besseren Timer wie z.B. den http://en.wikipedia.org/wiki/High_Precision_Event_Timer (http://High Precision Event Timer)