Можем ли мы подделать процессор и оперативную память с помощью гипервизора?
Я много слышу о "Гипервизоры не являются эмуляторами. Если вам нужно эмулировать другие аппаратные спецификации, чем у вашего компьютера, вам нужно использовать эмулятор, а не гипервизор".
Хорошо, но вчера я видел это видео на YouTube - нажмите здесь - где показано, как установить Win 95 на современные macOS с VMware Fusion.
Странно для меня то, что в 17:39 вы могли видеть, что виртуальная машина Win 95 - это "Pentium Pro с 64 МБ ОЗУ".
Хм! Итак, Fusion как-то подделал процессор и оперативную память, верно? Но это не эмулятор, верно? Так значит ли это, что любой гипервизор может подделать процессор и оперативную память?
2 ответа
На момент выпуска Windows 95 имел код только для распознавания CPUID до Pentium Pro. Любой процессор не ниже Pentium Pro называется "Pentium Pro".
Основное отличие заключается в том, что гипервизор не может эмулировать код процессора. Весь код должен работать на оригинальном процессоре.
Гипервизор эмулирует BIOS, который сообщает ОС доступные аппаратные спецификации; включая оперативную память, порядок загрузки и периферийные устройства.
Когда вы говорите о VMWare Fusion, то, как это работает, зависит от того, как достигается виртуализация. Согласно википедии, VMWare Fusion использует аппаратную виртуализацию, динамическую двоичную трансляцию и паравиртуализацию.
В случае аппаратной виртуализации @Strom является верным, и гостевые инструкции могут выполняться непосредственно на центральном процессоре хоста. Помимо ответа @Strom, вы можете подделать тип процессора, перехватывая и эмулируя инструкцию cpuid, как я упоминал ранее.
В случае паравиртуализации вы заменяете критические инструкции вызовами гипервизора, который эмулирует инструкцию от имени гостя. Итак, вы снова эмулируете инструкцию cpuid, чтобы "подделать" тип процессора. Имейте в виду, что для этого требуется модифицированная, следовательно, паравиртуализированная гостевая операционная система.
Наконец, динамическая двоичная трансляция сканирует гостевой код на предмет критических инструкций во время выполнения и либо заменяет их ловушками в гипервизоре, достигая некоторого вида "живой паравиртуализации", либо переводит блоки гостевого кода в эквивалентные блоки кода хоста, которые изменяют состояние виртуальной машины. в соответствии с исходным гостевым кодом (например, как работает эмулятор полной системы QEMU). В результате вы снова можете "подделать" тип процессора, эмулируя инструкцию cpuid. Обратите внимание, что в этом случае guest и host могут иметь одинаковую архитектуру, но в этом нет необходимости.
Конечно, комбинация вышеупомянутых методов также возможна.
Что касается виртуализации основной памяти, то гипервизор полностью контролирует оборудование, поэтому вы можете просто настроить виртуальную машину с 64 МБ основной памяти. ВМ не может "видеть" больше, чем это из-за методов, кратко описанных выше.
Пожалуйста, имейте в виду, что это просто очень краткий обзор виртуализации, и я постарался сделать его кратким и информативным, поэтому я знаю, что мои объяснения частично не очень точны. Если вы действительно интересуетесь виртуализацией, я рекомендую прочитать "Виртуальные машины: универсальные платформы для систем и процессов" или статьи на тему Popek & Goldberg и "Xen и искусство виртуализации".