Почему OS X допускает одновременное использование нескольких программ виртуализации, в то время как другие системы этого не делают?

Я был удивлен, узнав, что VirtualBox и докер HyperKit могут одновременно запускать виртуальные машины в OS X. Использование разных гипервизоров одновременно невозможно в Windows или Linux. Почему это работает на OS X?

1 ответ

Позвольте мне попытаться ответить на этот не очень простой вопрос.

Существует два типа гипервизоров, которые обобщены в Википедии:

Тип-1, нативные или голые металлические гипервизоры

Эти гипервизоры работают непосредственно на оборудовании хоста для управления оборудованием и управления гостевыми операционными системами. По этой причине их иногда называют железными гипервизорами.

Тип-2 или размещенные гипервизоры

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

Hyper-V относится к типу 1, что означает, что после установки он становится компьютером. По сути, установка функции Hyper-V означает, что установленная версия Windows является просто виртуальной машиной, которой, однако, выделено 100% аппаратных ресурсов.

VirtualBox и VMWare для Windows относятся к типу 2, что означает, что они работают под Windows как обычные программы, в которых процессоры эмулируются как потоки, поэтому теоретически могут работать под гипервизором типа 1, таким как Hyper-V.

Проблема возникает, когда аппаратная виртуализация используется для эмуляции разнородных процессоров, а именно Intel VT-x и AMD-V. Такое оборудование требуется для эмуляции, например, 32-разрядного процессора на 64-разрядном компьютере.

Аппаратная виртуализация может иметь только одного владельца (или пользователя). Это означает, что только один гипервизор может использовать его одновременно и исключает использование двух гипервизоров типа 2, работающих на одном компьютере.

Кроме того, специально для упомянутого Docker, это не гипервизор. Как объясняет Вкипедия:

Docker - это компьютерная программа, которая выполняет виртуализацию на уровне операционной системы, также известную как "контейнеризация".

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

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