5

Время от времени читая разные материалы на разные темы, я возвращаюсь к вопросу: насколько виртуальна виртуализация? Под "виртуализацией" я подразумеваю такие вещи, как Virtual PC и VMWare, которые позволяют запускать гостевую ОС. В частности, я не понимаю:

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

6 ответов6

6

Насколько я знаю:

  • Были исследования возможности "необнаружимого руткита", когда злонамеренный гипервизор мог находиться между вашим компьютером и оборудованием. Охранные фирмы (и поставщики процессоров) были взбешены тем, что кто-то изобрел что-то подобное и сказал, что никто не может обнаружить это, поэтому они действительно нашли способ использовать функции синхронизации и сравнивать результаты с внешним источником. Так виртуализации практически невозможно обнаружить, но если вы платите очень близко к мелким деталям и у вас есть внешние ссылки, есть способы , чтобы выяснить , что вы будучи виртуализировать. Это не должно вызывать несовместимости.
  • Это не. Ваш виртуализированный процессор не обладает теми же возможностями, что и физический. Например, инструкции по виртуализации Intel доступны только для основной операционной системы. Это не означает, однако, что вы не можете иметь виртуальную машину внутри виртуальной машины: это просто означает, что она будет чертовски медленной.
  • Операционные системы не должны быть адаптированы для виртуальных машин. Скорее наоборот.
  • Да, они в некоторой степени. Виртуализация программного обеспечения всегда будет работать. Аппаратная виртуализация обычно не является транзитивной (гостевые ОС не могут использовать аппаратную виртуализацию для размещения большего количества гостевых ОС).
  • Там должно быть что-то еще, но я думаю, что это хорошее начало.
2

Позвольте мне ответить по пунктам:

1 Предоставляет ли виртуальная машина среду, которая принципиально неотличима от физической машины? Конечно, будут некоторые практические различия (например, экранирующие вызовы гипервизора, фиктивные имена аппаратных компонентов и т.д.), Которые позволяют обнаруживать виртуальную машину, но будут ли какие-либо несовместимости?

Если вы игнорируете «экранирующие вызовы гипервизора, фиктивные имена аппаратных компонентов», все остальное считается ошибками. ... кроме, смотрите ниже.

2 Если среда полностью совместима с физической машиной, возможна ли вложенная виртуальная машина?

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

3 Если нет, значит ли это, что гостевая ОС должна быть специально адаптирована для работы внутри виртуальной машины? Если это так, то означает ли это, что большинство современных ОС уже адаптированы для большинства поставщиков виртуальных машин?

Вы почитали это. У нас ОС до виртуальной машины. Виртуальная машина адаптирована под ОС, а не наоборот. (есть некоторые исключения, например, старая версия Xen. Но это исключения)

4 Отличаются ли эти вещи для программной виртуализации от аппаратной?

см. 2

5 В чем разница между программной виртуализацией и аппаратной?

см. 4

2

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

VMWare (например) предоставляет инструменты и драйверы для загрузки в гостевую систему, но они не нужны на изолированной машине. Они делают возможным перетаскивание между хостом и гостем и некоторые другие полезные функции, но они не требуются для успешного запуска гостя.

IBM фактически впервые применила виртуализацию со своим продуктом VM (теперь z/VM), который может успешно запускать другие копии z/VM, запуская еще больше копий z/VM с z/OS и zLinux.

Конечно, могут быть некоторые ограничения на фактическую реализацию виртуальной машины, классическим примером является неспособность VMWare запускать OS/2, даже если она будет работать на реальном процессоре просто отлично.

Но это ограничение продукта, а не концепция виртуализации.

С точки зрения аппаратных / программных различий аппаратная виртуализация просто использует какой-то аспект фактического ЦП (или другого оборудования) для оказания помощи. Виртуализация чистого программного обеспечения - это просто эмуляция (и обычно ужасно медленная по сравнению с альтернативой).

2

Виртуальные машины пытаются обеспечить среду, которая достаточно хороша для запуска гостевой ОС и приложений. Поставщику практически невозможно отличить его от физического, поскольку есть временные эффекты, которые очень трудно скрыть (по крайней мере, в виртуальной машине, которая работает эффективно)

Вложенные виртуальные машины возможны с виртуально эмулируемыми виртуальными машинами (например, Bochs), но Virtual PC и VMware используют некоторую аппаратную поддержку, которая не предназначена для вложения.

Программная виртуализация эмулирует каждую инструкцию ЦП (иногда программные решения используют Ring-1 для собственного запуска кода Ring-0 в качестве оптимизации, и этот прием не может быть вложенным).

Аппаратная виртуализация использует специальный режим в процессоре, предназначенный для передачи управления гипервизору и установки дополнительного уровня таблиц страниц.

1

Программное обеспечение для виртуализации AFAIK легко эмулирует HAL (уровень аппаратной абстракции), поэтому гостевая ОС даже не представляет разницы. то есть: используются нормальные ОС.

0

Предоставляет ли виртуальная машина среду, которая принципиально неотличима от физической машины? Конечно, будут некоторые практические различия (например, экранирующие вызовы гипервизора, фиктивные имена аппаратных компонентов и т.д.), Которые позволяют обнаруживать виртуальную машину, но будут ли какие-либо несовместимости?

Доступ к оборудованию по-прежнему осуществляется через хост-систему.

Операционные системы ПК давно отделены от большинства аппаратных средств. Windows и Linux используют драйверы, которые являются прокси для аппаратного доступа. Из-за этого можно предоставлять "паравиртуализированные" драйверы, которые являются прокси-серверами для работы в виртуальной среде, что значительно упрощает реализацию, а не эмуляцию, где вам придется разрабатывать программы, которые на 100% воспроизводят все странное, а иногда и недокументированное поведение процессоров и оборудования.

Если среда полностью совместима с физической машиной, возможна ли вложенная виртуальная машина?

Инструкция VMXON, которая "включает" виртуализацию ЦП, не будет работать, когда ЦП "в" виртуальной машине. Если это происходит, происходит "выход из ВМ", то есть управление передается обратно гипервизору, и ОС хоста должна теперь решить, что делать (обычно эмулируя исключение "недопустимая инструкция"). При желании хост-операционная система может эмулировать эту инструкцию и остальную часть поведения виртуализации ЦП (это будет сложно и медленнее).

Если нет, значит ли это, что гостевая ОС должна быть специально адаптирована для работы внутри виртуальной машины? Если это так, то означает ли это, что большинство современных ОС уже адаптированы для большинства поставщиков виртуальных машин?

Смотри мой первый пункт. Существуют паравиртуализированные драйверы для VMWare и других гипервизоров. Само ядро ОС на самом деле не должно меняться, если только А) не является чем-то тесно связанным с конкретным оборудованием, таким как DOS и В), и решено, что изменение ОС лучше, чем эмуляция ожидаемого оборудования.

Отличаются ли эти вещи для программной виртуализации от аппаратной?

Программная виртуализация медленнее и, вероятно, менее безопасна.

В чем разница между программной виртуализацией и аппаратной?

Проще говоря, процессоры x86 долгое время имели два уровня привилегий: режим пользователя и режим супервизора или режим ядра. Поддержка аппаратной виртуализации добавляет уровень привилегий выше, чем у супервизора, то есть гипервизора. Примером различия является то, что MMU, который ОС использует для управления страницами памяти, расширен, чтобы позволить гипервизорам работать с ним. Это упрощает для гипервизора выделение и выделение памяти для конкретной виртуальной машины. IOMMU - это также аппаратная функция, которая также предоставляет множество средств, которые делают виртуализацию более эффективной.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .