До появления аппаратной виртуализации были инструкции, которые не могли быть виртуализированы по различным причинам. Может кто-нибудь объяснить, что это за инструкции и почему они не могут быть виртуализированы?
Что такое "не виртуализируемые" инструкции в архитектуре x86?
Ответ 1
Чтобы виртуализировать ISA, необходимо выполнить определенные требования. Popek и Goldberg использовали что-то вроде следующего:
У машины есть как минимум два режима (a) пользовательский режим и (b) системный режим. Как правило, приложения работают в режиме пользователя, а операционная система работает в системном режиме. В системном режиме код/программа может видеть и управлять машиной без ограничений. В пользовательском режиме код/программа имеет некоторые ограничения в том, что он может сделать, например. он не может получить доступ ко всей памяти компьютера без предварительного разрешения.
Инструкции: (a) привилегированный или (b) не привилегированный. Привилегия ловушка при выполнении в режиме пользователя. Trapping означает, что машина принудительно переходит в системный режим, в результате чего он выполняет некоторый код операционной системы для решения этой проблемы. В каком-то смысле они предупреждают операционную систему при ее выполнении.
Инструкции также могут быть (a) чувствительны или (b) не чувствительны. Чувствительные изменяют часть ресурсов компьютера или проявляют различное поведение в зависимости от того, выполняются ли они в режиме пользователя или системном режиме.
При виртуализации ISA важно, чтобы монитор виртуальной машины (VMM) мог обнаруживать и обрабатывать плавно любую попытку программы или гостевой операционной системы изменять ресурсы машины. Он должен уметь видеть, когда выполняются инструкции чувствительные. Для этого все чувствительные инструкции должны быть привилегированными и, таким образом, ловушки при выполнении. При захвате мы можем ввести системный режим и вызвать код из VMM для обработки модификации ресурса.
Проблема заключается в том, что не все инструкции X86 чувствительные являются привилегированными инструкциями. Это означает, что модификация ресурса может произойти без видимого и управляющего VMM, что может быть опасным. В качестве альтернативы, это может означать выполнение инструкции в гостевой операционной системе в режиме пользователя и просмотр другого эффекта, чем выполнение ее в системном режиме. Согласно этой статье, в x86 есть семнадцать инструкций, которые чувствительны, но не являются привилегированными. Одним из примеров является POPF
, когда имеет другую семантику в зависимости от машинного режима.