Ограничение счетчика меток времени - PullRequest
2 голосов
/ 29 марта 2011

Я хочу проверить, доступна ли инструкция RDTSC.Должен быть процессор Intel Pentium или более новый, либо либо флаг TSD в регистре CR4 сброшен, либо он установлен, а CPL равен 0.

Итак, нет проблем с получением текущего уровня привилегий (биты 0 и1 из регистра сегмента CS).Также нет проблем проверить, поддерживается ли сама инструкция (CPUID.1: EDX [4] = 1).

Но (и это проблема), это также должно выполняться в пользовательском режиме (PL3).Но я не могу прочитать управляющий регистр CR4 в пользовательском режиме.

Есть ли другой способ проверить, ограничивает ли операционная система доступ к счетчику меток времени?

1 Ответ

2 голосов
/ 30 марта 2011

Единственный способ - «попробовать» инструкцию и перехватить исключение при условии, что операционная система дает вам возможность безопасно реагировать на событие и восстанавливать ваше состояние, чтобы вы могли продолжить свою программу. К сожалению, не все ОС позволяют продолжить работу после исключения, которое они считают «фатальным». В Windows вы можете попробовать поиграть со структурированной обработкой исключений, в Linux есть определенные сигналы (в частности, SIGILL). Но другие ОС не прощают такого рода исключения. Bye

(редактировать)

PS: в принципе ОС также может распознавать исключение и имитировать инструкцию, поэтому приложение не может решить, действительно ли инструкция доступна. Я не знаю, есть ли ОС, которые делают это (виртуальные машины, может быть?). Bye!

...