Я был удивлен, узнав, что 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 не конфликтует с гипервизорами при использовании оборудования.