Введение

Бесплатное программное обеспечение для виртуализации и эмуляции
монитор виртуальной машины

QEMU (Quick Emulator) — это бесплатный эмулятор с открытым исходным кодом. Он эмулирует процессор компьютера посредством динамической двоичной трансляции и предоставляет набор различных моделей оборудования и устройств для эмулируемой машины, позволяя запускать различные гостевые операционные системы. QEMU может взаимодействовать с Kernel-based Virtual Machine (KVM) для запуска виртуальных машин с производительностью, близкой к нативной. QEMU также способен выполнять эмуляцию процессов пользовательского уровня, позволяя приложениям, скомпилированным для одной архитектуры, работать на другой. QEMU поддерживает эмуляцию различных архитектур, включая x86, ARM, PowerPC, RISC-V и другие.

Лицензирование

QEMU был написан Фабрисом Беллардом и является свободным программным обеспечением, распространяемым в основном под лицензией GNU General Public License (сокращенно GPL). Отдельные компоненты выпущены под лицензиями BSD, GNU Lesser General Public License (LGPL) или другими лицензиями, совместимыми с GPL.

Особенности

QEMU может сохранять и восстанавливать состояние виртуальной машины со всеми запущенными программами. Гостевым операционным системам не требуется внесение изменений для работы внутри QEMU. QEMU поддерживает эмуляцию различных архитектур, включая x86, MIPS64 (до Release 6), SPARC (sun4m и sun4u), ARM (Integrator/CP и Versatile/PB), SuperH, PowerPC (PReP и Power Macintosh), ETRAX CRIS, MicroBlaze и RISC V.

Виртуальная машина может взаимодействовать с различными типами физического оборудования хоста, включая жесткие диски пользователя, CD-ROM-приводы, сетевые карты, аудиоинтерфейсы и USB-устройства. USB-устройства могут быть полностью эмулированы, либо могут использоваться USB-устройства хоста, хотя для этого требуются права администратора и это не работает с некоторыми устройствами. Образы виртуальных дисков могут храниться в специальном формате (qcow или qcow2), который занимает только столько дискового пространства, сколько фактически использует гостевая ОС. Таким образом, эмулированный диск на 120 ГБ может занимать всего несколько сотен мегабайт на хосте. Формат QCOW2 также позволяет создавать образы-наложения, которые записывают разницу по отношению к другому (неизмененному) базовому файлу образа. Это предоставляет возможность восстановления содержимого эмулированного диска до предыдущего состояния. Например, базовый образ может содержать свежую установку операционной системы, работоспособность которой подтверждена, а затем используются образы-наложения. Если гостевая система станет неработоспособной (в результате вирусной атаки, случайного повреждения системы и т. д.), пользователь может удалить наложение и использовать более ранний образ диска. QEMU может эмулировать сетевые карты (разных моделей), которые используют подключение хост-системы посредством трансляции сетевых адресов (NAT), что позволяет гостевой системе использовать ту же сеть, что и хост. Виртуальные сетевые карты также могут подключаться к сетевым картам других экземпляров QEMU или к локальным TAP-интерфейсам. Сетевое подключение также может быть реализовано путем объединения интерфейса TUN/TAP, используемого QEMU, с физическим Ethernet-интерфейсом на хост-ОС с использованием функций объединения хост-ОС. QEMU интегрирует несколько служб для обеспечения взаимодействия между хост- и гостевыми системами, например, встроенный SMB-сервер и перенаправление сетевых портов (для обеспечения входящих подключений к виртуальной машине). Он также может загружать ядра Linux без загрузчика. QEMU не зависит от наличия графических методов вывода на хост-системе. Вместо этого он позволяет получить доступ к экрану гостевой ОС через встроенный VNC-сервер. Он также может использовать эмулированную последовательную линию без экрана для совместимых операционных систем. Эмуляция работы нескольких процессоров в режиме SMP возможна. QEMU не требует административных прав для запуска, если только не используются дополнительные модули ядра для повышения производительности (например, KQEMU) или определенные режимы его модели сетевого взаимодействия.

Крошечный генератор кода

Маленький генератор кода (TCG) призван устранить зависимость от конкретной версии GCC или любого компилятора, интегрируя компилятор (генератор кода) в другие задачи, выполняемые QEMU во время работы. Вся задача трансляции таким образом состоит из двух этапов: основные блоки целевого кода (TB) переписываются на операции TCG – своего рода машинно-независимое промежуточное представление, которое затем компилируется TCG для архитектуры хоста. Между этими этапами могут выполняться необязательные проходы оптимизации для режима компиляции "на лету" (JIT). TCG требует наличия специализированного кода для поддержки каждой архитектуры, чтобы JIT знал, во что транслировать операции TCG. Если для архитектуры недоступен специализированный JIT-код, TCG переключается в медленный режим интерпретации, называемый TCG Interpreter (TCI). Также необходимо обновить целевой код для использования операций TCG вместо устаревших операций Dyngen. Начиная с версии QEMU 0.10.0, TCG поставляется вместе со стабильными релизами QEMU, заменяя dyngen, который требовал GCC 3.x для работы.

Параллельная эмуляция

Решения виртуализации, использующие QEMU, способны выполнять несколько виртуальных процессоров параллельно. Для эмуляции пользовательского режима QEMU сопоставляет эмулируемые потоки с потоками хоста. Для эмуляции всей системы QEMU может запускать отдельный поток хоста для каждого эмулируемого виртуального процессора (vCPU). Это зависит от того, была ли гостевая операционная система обновлена для поддержки параллельной эмуляции системы, которая в настоящее время поддерживается для архитектур ARM, Alpha, HP PA, PowerPC, RISC V, s390x, x86 и Xtensa. В противном случае для эмуляции всех виртуальных процессоров (vCPU) используется один поток, который выполняет каждый vCPU поочередно.

Виртуальная коробка

VirtualBox, впервые выпущенный в январе 2007 года, использовал некоторые виртуальные аппаратные устройства QEMU и имел встроенный динамический рекомпилятор, основанный на QEMU. Как и KQEMU, VirtualBox запускает почти весь гостевой код непосредственно на хосте посредством VMM (Менеджера виртуальных машин) и использует рекомпилятор только как запасной механизм, например, когда гостевой код выполняется в реальном режиме. Кроме того, VirtualBox проводил обширный анализ кода и его исправление, используя встроенный дизассемблер, чтобы минимизировать необходимость в рекомпиляции. VirtualBox является бесплатным и имеет открытый исходный код (распространяется по лицензии GPL), за исключением некоторых функций.

Ксен-ХВМ

Xen, монитор виртуальных машин, может работать в режиме HVM (аппаратная виртуальная машина), используя аппаратные расширения виртуализации Intel VT-x или AMD-V для x86 и расширения виртуализации ARM Cortex-A7 и Cortex-A15. Это означает, что вместо паравиртуализированных устройств, domU предоставляется реальный набор виртуального оборудования для использования реальных драйверов устройств для взаимодействия с ним. QEMU включает в себя несколько компонентов: эмуляторы ЦП, эмулируемые устройства, универсальные устройства, описания машин, пользовательский интерфейс и отладчик. Эмулируемые и универсальные устройства в QEMU формируют модели устройств для виртуализации ввода-вывода. Они включают в себя PIIX3 IDE (с некоторыми базовыми возможностями PIIX4), эмулируемую видеокарту Cirrus Logic или простую VGA, эмуляцию сетевых карт RTL8139 или E1000 и поддержку ACPI. Поддержка APIC обеспечивается Xen. Xen HVM использует эмуляцию устройств на основе проекта QEMU для обеспечения виртуализации ввода-вывода в виртуальных машинах. Аппаратное обеспечение эмулируется с помощью демона "модель устройства" QEMU, работающего как бэкенд в dom0. В отличие от других режимов работы QEMU (динамическая трансляция или KVM), виртуальные ЦП полностью контролируются гипервизором, который отвечает за их остановку во время эмуляции QEMU доступа к памяти, отображаемой во ввод-вывод.

КВМ

KVM (Kernel based Virtual Machine) — это модуль ядра FreeBSD и Linux, который предоставляет программам пользовательского пространства доступ к функциям аппаратной виртуализации различных процессоров, позволяя QEMU предлагать виртуализацию для гостевых систем x86, PowerPC и S/390. Когда целевая архитектура совпадает с архитектурой хоста, QEMU может использовать специальные возможности KVM, такие как ускорение.

Win4Lin Pro Desktop (Программный стол Win4Lin)

В начале 2005 года Win4Lin представила Win4Lin Pro Desktop, основанный на оптимизированной версии QEMU и KQEMU и предназначенный для запуска версий Windows NT. В июне 2006 года Win4Lin выпустила Win4Lin Virtual Desktop Server, созданный на той же кодовой базе. Win4Lin Virtual Desktop Server предоставляет доступ к сеансам Microsoft Windows на тонких клиентах с Linux-сервера. В сентябре 2006 года Win4Lin объявила об изменении названия компании на Virtual Bridges одновременно с выпуском Win4BSD Pro Desktop – портированной версии продукта для FreeBSD и PC BSD. Поддержка Solaris была добавлена в мае 2007 года с выпуском Win4Solaris Pro Desktop и Win4Solaris Virtual Desktop Server.

Серия

SerialICE — это инструмент отладки прошивки, основанный на QEMU, который позволяет запускать системную прошивку внутри QEMU и одновременно получать доступ к реальному оборудованию через последовательное соединение с хост-системой. Это может служить недорогой заменой аппаратным эмуляторам схем (ICE).

WinUAE

WinUAE в версии 3.0.0 добавила поддержку плат CyberStorm PPC и Blizzard 603e, используя ядро QEMU PPC.

Единорог

Unicorn – это фреймворк для эмуляции процессоров, основанный на эмуляторе процессоров "TCG" в QEMU. В отличие от QEMU, Unicorn фокусируется исключительно на центральном процессоре: эмуляция каких-либо периферийных устройств не предусмотрена, и сырой бинарный код (вне контекста исполняемого файла или образа системы) может быть запущен непосредственно. Unicorn потокобезопасен и предоставляет множество привязок и интерфейсов для инструментирования.

Эмулятор Limbo X86 для ПК

Limbo – виртуальная машина X86 и ARM64 для Android, основанная на QEMU. Это одно из немногих программных обеспечений для виртуальных машин, доступных для Android, способное эмулировать Microsoft Windows, хотя изначально оно разрабатывалось для эмуляции Linux и DOS. В отличие от других эмуляторов на базе QEMU, для использования не требуется ввод команд, вместо этого предусмотрен пользовательский интерфейс для настройки параметров виртуальной машины. Limbo особенно популярен в развивающихся странах Азии, таких как Индия, Малайзия и Таиланд, благодаря популярности операционной системы Android, особенно на YouTube. Limbo был удален из Google Play Store по неизвестным причинам в период с февраля 2019 года по декабрь 2020 года, однако его все еще можно установить с сайта разработчика, используя APK-файл (пакет Android). Limbo известен прерывистым и запаздывающим качеством звука, и по состоянию на 2023 год исправить эту проблему не удалось. Limbo малоизвестен по сравнению с другим программным обеспечением для виртуальных машин, что затрудняет поиск и устранение неполадок. Для использования многих функций клавиатуры, недоступных на стандартной клавиатуре Android в Limbo X86, таких как Ctrl, Alt, Del и функциональные клавиши, требуется установить специальное приложение "Клавиатура хакера". Рекомендуется устанавливать "Клавиатуру хакера" с помощью APK-файла, так как Google Play Store заявляет о несовместимости с новыми версиями Android, однако APK-файл позволяет установить приложение на более поздние версии Android.

Спарк

QEMU поддерживает как 32-разрядную, так и 64-разрядную архитектуры SPARC. Когда прошивка JavaStation (архитектура sun4m) достигла версии 0.8.1 Proll, замена ПЗУ, использовавшаяся в версии 0.8.2, была заменена на OpenBIOS.