мне кажется, что Type2 - это чисто программная виртуализация
Не путайте виртуализацию типа 1 с типом 2 и оборудования с программным обеспечением. На самом деле между аппаратным и программным обеспечением существует нечто среднее: есть полное аппаратное обеспечение (HVM), «частичное» аппаратное обеспечение (PVM) и чистое программное обеспечение (SW).
Попробую уточнить, расширив все 6 комбинаций:
Тип 1 + Полное оборудование (HVM) - Это позволяет гипервизору, например Xen HVM, загружать неизмененную гостевую ОС. Это на самом деле медленно, потому что гипервизор должен декодировать «телеграфные сообщения», которые гостевая ОС пытается отправить на оборудование. (т.е. запись на диск требует многократного сохранения байтов в ячейке 0xblahblah.)
Тип 1 + Паравиртуализация (PVM) - Это когда вы немного модифицируете гостевую ОС, чтобы вызвать гипервизор напрямую для некоторых задач, таких как дисковый ввод-вывод. Это быстрее, потому что гость просто говорит «здесь, напишите эту страницу байтов» и ему не нужно делать (виртуализированный) ввод-вывод для каждого байта. Вы знаете, что делаете PVM при установке специальных драйверов. Конечно, иногда в ОС уже встроены виртуальные драйверы. Например, любое современное ядро Linux при загрузке автоматически переключится в режим PVM, когда обнаружит, что оно работает под Xen, KVM, UML и т. Д.
Type 1 + Pure Software (SW) - Я не уверен, существует ли он, но его будет не так сложно построить. Поскольку программная эмуляция медленная, накладные расходы на загрузку реальной ОС и запуск Type 2 не имеют большого значения.
Тип 2 + Полное оборудование (HVM) - Это позволяет загружать немодифицированную Windows под VirtualBox или KVM. Вы знаете, что это тип 2, когда вы можете перезагрузить всех ваших гостей и по-прежнему воспроизводить MP3 в фоновом режиме:)
Тип 2 + Паравиртуализация (PVM) - Это происходит каждый раз, когда вы устанавливаете гостевые драйверы или загружаете современное ядро Linux под VirtualBox / KVM.
Type 2 + Pure Software (SW) - ранние версии Bochs и Qemu. (В последних версиях также есть режимы с аппаратной поддержкой.) Вы можете сказать, что они являются «чистым программным обеспечением», потому что они позволяют запускать программное обеспечение, которое вы обычно не можете запустить без него. (т.е. я запускаю Windows '95 под Bochs на процессоре ARM и загружаю дистрибутив ARM на x86 под Qemu.)
Существует также другая тема, которая отличается от описанной выше:
Контейнерная техника . Контейнеры типа Docker / Rkt / LXD не помещаются в приведенную выше таблицу. Приложения в контейнерах - это обычные программы, вызывающие ядро обычными способами, без участия гипервизора.
Просто контейнеры используют функции ядра в cgroups и пространствах имен, чтобы приложение "чувствовало", что оно находится в виртуальной машине. Каждый контейнер получает «разделенное» представление системы: это собственная файловая система, свои собственные идентификаторы пользователей, свои собственные идентификаторы процессов, свое собственное имя хоста + IP-адрес и т. Д. Но снаружи вы можете видеть все процессы во всех контейнерах с помощью ' пс.