Можем ли мы подделать процессор и оперативную память с помощью гипервизора?

Я много слышу о "Гипервизоры не являются эмуляторами. Если вам нужно эмулировать другие аппаратные спецификации, чем у вашего компьютера, вам нужно использовать эмулятор, а не гипервизор".

Хорошо, но вчера я видел это видео на 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 и искусство виртуализации".

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