Ограничение счетчика меток времени

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

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам