Предоставляет ли виртуальная машина среду, которая принципиально неотличима от физической машины? Конечно, будут некоторые практические различия (например, экранирующие вызовы гипервизора, фиктивные имена аппаратных компонентов и т.д.), Которые позволяют обнаруживать виртуальную машину, но будут ли какие-либо несовместимости?
Доступ к оборудованию по-прежнему осуществляется через хост-систему.
Операционные системы ПК давно отделены от большинства аппаратных средств. Windows и Linux используют драйверы, которые являются прокси для аппаратного доступа. Из-за этого можно предоставлять "паравиртуализированные" драйверы, которые являются прокси-серверами для работы в виртуальной среде, что значительно упрощает реализацию, а не эмуляцию, где вам придется разрабатывать программы, которые на 100% воспроизводят все странное, а иногда и недокументированное поведение процессоров и оборудования.
Если среда полностью совместима с физической машиной, возможна ли вложенная виртуальная машина?
Инструкция VMXON, которая "включает" виртуализацию ЦП, не будет работать, когда ЦП "в" виртуальной машине. Если это происходит, происходит "выход из ВМ", то есть управление передается обратно гипервизору, и ОС хоста должна теперь решить, что делать (обычно эмулируя исключение "недопустимая инструкция"). При желании хост-операционная система может эмулировать эту инструкцию и остальную часть поведения виртуализации ЦП (это будет сложно и медленнее).
Если нет, значит ли это, что гостевая ОС должна быть специально адаптирована для работы внутри виртуальной машины? Если это так, то означает ли это, что большинство современных ОС уже адаптированы для большинства поставщиков виртуальных машин?
Смотри мой первый пункт. Существуют паравиртуализированные драйверы для VMWare и других гипервизоров. Само ядро ОС на самом деле не должно меняться, если только А) не является чем-то тесно связанным с конкретным оборудованием, таким как DOS и В), и решено, что изменение ОС лучше, чем эмуляция ожидаемого оборудования.
Отличаются ли эти вещи для программной виртуализации от аппаратной?
Программная виртуализация медленнее и, вероятно, менее безопасна.
В чем разница между программной виртуализацией и аппаратной?
Проще говоря, процессоры x86 долгое время имели два уровня привилегий: режим пользователя и режим супервизора или режим ядра. Поддержка аппаратной виртуализации добавляет уровень привилегий выше, чем у супервизора, то есть гипервизора. Примером различия является то, что MMU, который ОС использует для управления страницами памяти, расширен, чтобы позволить гипервизорам работать с ним. Это упрощает для гипервизора выделение и выделение памяти для конкретной виртуальной машины. IOMMU - это также аппаратная функция, которая также предоставляет множество средств, которые делают виртуализацию более эффективной.