Как виртуализация машины достигается без аппаратной поддержки
Это со ссылкой на виртуализацию машины. Я прохожу виртуализацию и узнаю, что с помощью техники виртуализации с аппаратным обеспечением привилегированные инструкции идентифицируются методом trap-fault и заменяются эквивалентными инструкциями уровня пользователя на лету. но как / была достигнута виртуализация при отсутствии аппаратной поддержки? до появления Intel VTi или AMD-V как привилегированные инструкции на ходу попадали в ловушку самого программного обеспечения? везде используется термин "бинарный перевод", что хорошо, если речь идет о замене привилегированной инструкции пользовательскими инструкциями, но как инструмент виртуализации идентифицирует привилегированные инструкции, выполняемые гостевой ОС (гипервизор /vmm)
редактировать: некоторые люди думают, что этот вопрос не показывает исследовательские усилия и голосование против. Вот некоторые из статей, которые я прочитал
обзор: https://www.vmware.com/pdf/virtualization.pdf
Документ Intel: https://software.intel.com/sites/default/files/m/d/4/1/d/8/An_Introduction_to_Virtualization.pdf
Введение: http://www.kernelthread.com/publications/virtualization/
Виртуализация x86 http://en.wikipedia.org/wiki/X86_virtualization
сравнение виртуализации hw sf: http://www.vmware.com/pdf/asplos235_adams.pdf
гайки и болты: http://www.anandtech.com/show/2480
паравиртуализация: http://en.wikipedia.org/wiki/Paravirtualization
если у кого-то есть бумага / источник, который может ответить на вопрос, заданный выше, и я мог бы пропустить любезно ответить.
2 ответа
При отсутствии аппаратной поддержки может использоваться паравиртуализация. Гостевые операционные системы модифицированы таким образом, что вместо непосредственного доступа к определенным аппаратным ресурсам выполняются вызовы менеджера виртуальных машин (VMM) или гипервизора.
Например, гостевой операционной системе на x86 нельзя разрешить отключение прерываний на реальном процессоре. Вместо этого гостевая ОС вызывает VMM для имитации отключения прерываний.
Другой альтернативой является нативная виртуализация. В нативной виртуализации эмулируются инструкции гостевой ОС и ее процессов. Уровень эмуляции позволяет выполнять привилегированные инструкции, такие как cli, программным обеспечением для виртуализации. Таким образом, нативная виртуализация не требует ни аппаратной поддержки, ни модификации гостевой ОС.
Если у вас нет аппаратной виртуализации и вы не хотите рассматривать паравиртуализацию, другой вариант - бинарный перевод. Проблема с x86 (я предполагаю, что речь идет о x86) состоит в том, что есть определенные сенсационные инструкции, которые не являются привилегированными ( см. Требования к виртуализации Popek и Goldberg). Под привилегированным в этом смысле я подразумеваю, что это вызовет ловушку от пользователя до режима ядра. Поскольку эти инструкции находятся в гостевом ядре (которое работает с привилегиями пользовательского пространства в качестве гостя), но не вызывают выхода, они могут быть проблемой. Например, popf ведет себя по-разному в зависимости от того, вызывается ли он у пользователя или в ядре (справочное руководство Intel, том 2, см. Раздел о popf). Поэтому, когда гость выполняет popf, мы хотим, чтобы виртуальная машина вышла, но это не так. В двоичном переводе мы в основном сканируем двоичный файл ядра и заменяем весь машинный код, который соответствует конфиденциальным непривилегированным инструкциям, машинным кодом, который будет выполнять правильную эмуляцию или, более вероятно, вызывать выход виртуальной машины, чтобы гипервизор мог вмешаться. Немного об этом можно найти в этом документе VMware. Большинство других документов, которые я могу найти, которые объясняют бинарный перевод любой глубины, находятся за платными системами.