Time-Stamp Counter support überprüfen
-
Hallo,
ich möchte über prüfen, ob die RDTSC Instruktion vom Prozessor unterstützt und vom Betriebssystem für den User-Mode freigeschaltet ist.
Der Befehl selbst ist seit dem Intel Pentium Prozessor verfügbar. Ansonsten muss das TSD flag im CR4 register nicht gesetzt sein, um Zugriffe zu erlauben, wenn das CPL (Current Privilege Level) nicht 0 ist.
Es ist weder ein Problem das CPL zu ermitteln (Bits 0 and 1 of the CS segment register), noch die Verfügbarkeit des Befehls selbst zu überprüfen (CPUID.1:EDX[4] = 1).
Das Problem ist jedoch, dass mein Code unter allen Privileg-Leveln vernünftig arbeiten soll. Soll heißen, wenn CPL = 3 und das OS verweigert den Zugriff auf den TSC, dann möchte ich eine Fehlernummer zurückgeben.
Ich kann jedoch unter solch einem Privileg-Level nicht auf das Control Register CR4 zugreifen und müsste die zu erwartende Exception in Kauf nehmen.Kennt jemand einen anderen Weg das zu überprüfen?
-
unter Windows und Linux kann man den Befehl verwenden(CPL0-3), sofern von der CPU unterstützt (CPUID) . Über welches exotische Betriebssystem/Distributionen machst du dir Gedanken?
-
asdqw schrieb:
unter Windows und Linux kann man den Befehl verwenden(CPL0-3), sofern von der CPU unterstützt (CPUID) . Über welches exotische Betriebssystem/Distributionen machst du dir Gedanken?
Ja, ich weiß, dass Windows und Linux den Befehl für alle PLs freigeben. Es geht mir da mehr um die grundsätzliche Portabilität meines Codes. Denn wer garantiert mir, dass das immer so bleibt?
Und btw: Wir haben tatsächlich ein proprietäres System, bei dem ich gerade erst mal nachschauen müsste, welcher Wert hier gesetzt worden ist