Рабочая станция VMWare и платформа x86

Я изучаю виртуализацию из книги Таненбаума ("Современные операционные системы"). Я четко помню все основные концепции виртуализации, но не могу лучше понять, как работает VMWare Workstation.

Во-первых, рабочая станция VMWare состоит из двух компонентов:

  • VMM: он заботится о выполнении инструкций.
  • VMX: связывает VMM с операционной системой хоста.

VMM использует перед каждым (?) Выполнением "алгоритм принятия решения", чтобы установить, можно ли выполнить его, используя "прямое выполнение" (trap-and-emulate) или "двоичный перевод".

Таненбаум сказал, что разумная инструкция генерирует "ловушку" только в нескольких случаях (в этом случае VMM может использовать прямое выполнение, улучшая производительность).

Что мне непонятно, так это почему на платформе x86 разумная инструкция не всегда разумна (на платформе x86) и при каких обстоятельствах это так?

1 ответ

Я не читал книгу Таненбаума, это моя интерпретация слов автора.


Согласно Википедии, 18 чувствительных инструкций, которые нельзя запустить напрямую:

sgdt (Читайте GDT хозяина, а не гостя)
sidt (Как указано выше, но для IDT)
sldt (Как указано выше, но для LDT)
smsw (Прочитайте контрольный регистр 0 хоста, а не гостевого)
pushf (Читайте флаги, особенно системные, хоста, а не гостя)
popf (Как и выше, но напишите, только некоторые из флагов)
lar (Прочтите права доступа из таблиц дескрипторов хоста, а не гостя)
lsl (Читайте ограничение сегмента из таблиц дескрипторов хоста, а не гостя)
verr, verw (Проверьте доступ на чтение / запись, используя таблицы дескрипторов хоста, а не гостевые)
pop/push (Используйте дескрипторы сегмента хоста для размера операндов и указателя стека)
call FAR, jump FAR, int, retf (Передача управления в соответствии с таблицами дескрипторов хоста)
str (Установить регистр задач хоста)
mov <segment registers> (используйте таблицы дескрипторов хоста, а не гостевые)

Обоснование чувствительности - моя работа

Ни одна из этих инструкций не попадает в ловушку всегда.

Некоторые, не считая исключения доступа к памяти, никогда не делают: pushf, popf, lar, lsl, verr, verw, push, pop,

Некоторые ловушки, только если хост настроил их для этого: smsw, sgdt, sidt, sldt, str,
Это, вероятно, не то, что Таненбаум намеревался сказать, хотя.

Некоторые ловушки почти наверняка, но некоторые значения могут заставить их работать: call FAR, jmp FAR, retf, int, Это, наверное, то, что имел в виду Таненбаум.

Проще говоря, инструкция, как jmp FAR 08h:00h пытается получить доступ к "коду, помеченному номером 08h".
Это может или не может быть успешным в зависимости от того, какое ограничение хост наложил на "метку" 08h.
Большая часть ярлыка недоступна, и они будут ловушкой, но некоторые могут работать.
То же самое верно для call а также retf,
int обычно не перехватывает, но это опять же зависит от конфигурации ОС.

В общем, инструкции, которые зависят от структуры системы хоста, могут перехватывать определенные значения, но не другие.
Невозможно причинить вред, даже если инструкция успешно выполнится, но не может быть выполнена непосредственно в контексте виртуализации.

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