Назад |
Перейти на главную страницу
что такое «не виртуализируемые» инструкции?
Я немного занимаюсь виртуализацией для своей презентации в классе.
Я не совсем понимаю термины - «виртуализируемые инструкции» и «невиртуализируемые инструкции».
Может ли кто-нибудь здесь объяснить это?
коротко:
- у большинства процессоров разные уровни привилегий; что позволяет ОС прерывать, ограничивать и уничтожать процессы, не позволяя никаким процессам уровня пользователя влиять на другие.
- есть инструкции для управления уровнем привилегий, некоторое управление оборудованием низкого уровня. обычно эти инструкции ограничены для работы только на самом привилегированном уровне, поэтому ОС должна работать на этом уровне
- если вы попытаетесь запустить низкоуровневый код ОС с более низкими привилегиями, эти низкоуровневые инструкции завершатся ошибкой. в идеале, сбой должен запускать некоторую «реально низкоуровневую» ОС, которая могла бы творить любую магию, необходимую для создания иллюзии, что сбойный код работает на голой машине.
- К сожалению, на x86 несколько инструкций либо не работают, либо вызывают глобальный сбой, поэтому их называют «невиртуализуемыми».
Это проблема. Теперь решения:
- паравиртуализация: исправьте ОС, чтобы она не использовала проблемные инструкции. вместо этого он использует вызовы базовой системы. (это используется в гостевых системах Xen PV, возможно только в открытых ОС)
- эмуляция: запустить код в эмулируемом ЦП с кодом, который интерпретирует каждую инструкцию. (используется BOCHS и некоторыми другими эмуляторами)
- перекомпиляция: вместо интерпретации каждой инструкции сгенерируйте новый машинный код, который делает то же самое, что и исходный код; но с желаемым треппингом. (используется QEMU)
- автоматическое исправление: просканируйте код, если есть какая-либо «проблема», замените ее на месте вызовом базовой системы. (используется KQEMU и VMWare)
- «аппаратная виртуализация»: и Intel, и AMD недавно добавили дополнительный режим, который добавляет необходимые ловушки к этим невиртуализуемым инструкциям. (используется Xen HVM, KVM, VirtualBox)
Это действительно вопрос об архитектуре процессора / механике инструкций - см. http://swtch.com/~rsc/talks/pcarch.pdf для некоторого хорошего материала для вашего исследования, включая подробности о том, почему определенные инструкции не "виртуализируемы" (если вы не собираетесь эмулировать ВСЕ ЦП, как это делает Bochs (uberslow)).