QEMU (Quick Emulator [3] ) es un emulador gratuito y de código abierto . Emula el procesador de una computadora a través de una traducción binaria dinámica y proporciona un conjunto de diferentes modelos de hardware y dispositivos para la máquina, lo que le permite ejecutar una variedad de sistemas operativos invitados . Puede interoperar con la máquina virtual basada en kernel (KVM) para ejecutar máquinas virtuales a una velocidad casi nativa. QEMU también proporciona emulación para procesos a nivel de usuario, lo que permite que las aplicaciones compiladas para una arquitectura de procesador se ejecuten en otra. [4]
QEMU admite la emulación de varias arquitecturas, incluidas x86 , ARM , PowerPC , RISC-V y otras.
QEMU fue desarrollado por Fabrice Bellard y es un software libre . Sus diferentes componentes están licenciados bajo la Licencia Pública General GNU (GPL), la licencia BSD , la Licencia Pública General Reducida GNU (LGPL) u otras licencias compatibles con la GPL. [5]
QEMU tiene múltiples modos de funcionamiento: [6]
QEMU puede guardar y restaurar el estado de la máquina virtual con todos los programas en ejecución. Los sistemas operativos invitados no necesitan parches para ejecutarse dentro de QEMU.
QEMU admite la emulación de varias arquitecturas, incluidas x86, MIPS64 (hasta la versión 6), [9] SPARC (sun4m y sun4u), ARM (Integrator/CP y Versatile/PB), SuperH , PowerPC ( PReP y Power Macintosh ), ETRAX CRIS , MicroBlaze y RISC-V .
La máquina virtual puede interactuar con muchos tipos de hardware host físico, incluidos los discos duros del usuario, las unidades de CD-ROM, las tarjetas de red, las interfaces de audio y los dispositivos USB. Los dispositivos USB se pueden emular por completo o se pueden utilizar los dispositivos USB del host, aunque esto requiere privilegios de administrador y no funciona con algunos dispositivos.
Las imágenes de discos virtuales se pueden almacenar en un formato especial ( qcow o qcow2 ) que solo ocupa tanto espacio en disco como el que utiliza realmente el sistema operativo invitado. De esta manera, un disco emulado de 120 GB puede ocupar solo unos pocos cientos de megabytes en el host. El formato QCOW2 también permite la creación de imágenes superpuestas que registran la diferencia con otro archivo de imagen base (sin modificar). Esto proporciona la posibilidad de revertir el contenido del disco emulado a un estado anterior. Por ejemplo, una imagen base podría contener una nueva instalación de un sistema operativo que se sabe que funciona, y se utilizan las imágenes superpuestas. Si el sistema invitado se vuelve inutilizable (por un ataque de virus, destrucción accidental del sistema, etc.), el usuario puede eliminar la superposición y utilizar una imagen de disco emulada anterior.
QEMU puede emular tarjetas de red (de diferentes modelos) que comparten la conectividad del sistema host mediante la traducción de direcciones de red, lo que permite al invitado utilizar la misma red que el host. Las tarjetas de red virtuales también pueden conectarse a tarjetas de red de otras instancias de QEMU o a interfaces TAP locales . La conectividad de red también se puede lograr conectando una interfaz TUN/TAP utilizada por QEMU con una interfaz Ethernet no virtual en el sistema operativo host mediante las funciones de conexión de este último.
QEMU integra varios servicios para permitir la comunicación entre los sistemas host e invitados; por ejemplo, un servidor SMB integrado y redirección de puertos de red (para permitir conexiones entrantes a la máquina virtual). También puede arrancar núcleos Linux sin un cargador de arranque.
QEMU no depende de la presencia de métodos de salida gráfica en el sistema anfitrión. En cambio, puede permitir el acceso a la pantalla del sistema operativo invitado a través de un servidor VNC integrado . También puede utilizar una línea serial emulada, sin ninguna pantalla, con los sistemas operativos aplicables.
Es posible simular múltiples CPU ejecutando SMP .
QEMU no requiere derechos administrativos para ejecutarse a menos que se utilicen módulos de kernel adicionales para mejorar la velocidad (como KQEMU) o se utilicen ciertos modos de su modelo de conectividad de red.
El generador de código pequeño (Tiny Code Generator, TCG) tiene como objetivo eliminar la deficiencia de depender de una versión particular de GCC o de cualquier compilador, incorporando en su lugar el compilador (generador de código) a otras tareas realizadas por QEMU en tiempo de ejecución. Por lo tanto, toda la tarea de traducción consta de dos partes: bloques básicos de código de destino ( TB ) que se reescriben en operaciones TCG , una especie de notación intermedia independiente de la máquina, y posteriormente esta notación se compila para la arquitectura del host mediante TCG. Se realizan pases de optimización opcionales entre ellos, para un modo de compilador justo a tiempo (JIT).
TCG requiere código dedicado escrito para soportar cada arquitectura en la que se ejecuta, de modo que el JIT sepa a qué traducir las operaciones de TCG . Si no hay código JIT dedicado disponible para la arquitectura, TCG recurre a un modo de interpretación lento llamado TCG Interpreter (TCI). También requiere actualizar el código de destino para usar operaciones de TCG en lugar de las antiguas operaciones de dyngen .
A partir de la versión 0.10.0 de QEMU, TCG se entrega con la versión estable de QEMU. Reemplaza a dyngen , que dependía de GCC 3.x para funcionar. [10] [11]
KQEMU fue un módulo del núcleo de Linux , también escrito por Fabrice Bellard , que aceleró notablemente la emulación de huéspedes x86 o x86-64 en plataformas con la misma arquitectura de CPU. Esto funcionaba ejecutando código de modo de usuario (y opcionalmente algo de código del núcleo) directamente en la CPU del ordenador anfitrión, y utilizando emulación de procesador y periféricos solo para código de modo núcleo y modo real . KQEMU podía ejecutar código de muchos sistemas operativos invitados incluso si la CPU del anfitrión no soportaba la virtualización asistida por hardware . KQEMU fue inicialmente un producto de código cerrado disponible de forma gratuita, pero a partir de la versión 1.3.0pre10 (febrero de 2007), [12] se volvió a licenciar bajo la Licencia Pública General de GNU . Las versiones de QEMU a partir de la 0.12.0 (a partir de agosto de 2009 ) admiten una gran memoria, lo que las hace incompatibles con KQEMU. [13] Las versiones más nuevas de QEMU han eliminado por completo el soporte para KQEMU.[actualizar]
QVM86 fue un reemplazo directo bajo licencia GNU GPLv2 del entonces código cerrado KQEMU. Los desarrolladores de QVM86 interrumpieron su desarrollo en enero de 2007.
La máquina virtual basada en kernel ( KVM ) ha asumido en gran medida como la solución de virtualización asistida por hardware basada en Linux para su uso con QEMU a raíz de la falta de soporte para KQEMU y QVM86. [ cita requerida ] QEMU también puede usar KVM en otras arquitecturas como ARM y MIPS . [14]
Intel's Hardware Accelerated Execution Manager ( HAXM ) es una alternativa de código abierto [15] a KVM para la virtualización asistida por hardware basada en x86 en NetBSD, Linux, Windows y macOS utilizando Intel VT . A partir de 2013, [actualizar]Intel solicita principalmente su uso con QEMU para el desarrollo de Android. [16] A partir de la versión 2.9.0, el QEMU oficial incluye soporte para HAXM, bajo el nombre hax . [17]
QEMU también admite los siguientes aceleradores: [17]
Hypervisor.framework
se basa en Intel VT.QEMU admite los siguientes formatos de imagen de disco : [18]
.dmg
): solo lectura.hdd
( , .hds
) – Solo lectura.qcow2
, .qed
, .qcow
, .cow
).vdi
).vhd
).vmdk
).img
) que contienen contenidos sector por sector de un disco.iso
) que contienen contenidos sector por sector de un disco óptico (por ejemplo, sistemas operativos en vivo de arranque) [19]El modelo de objetos QEMU (QOM) proporciona un marco para registrar tipos que el usuario puede crear e instanciar objetos a partir de esos tipos. [20]
QOM ofrece las siguientes características:
Las soluciones de virtualización que utilizan QEMU pueden ejecutar varias CPU virtuales en paralelo. Para la emulación en modo usuario, QEMU asigna los subprocesos emulados a los subprocesos del host. Para la emulación completa del sistema, QEMU es capaz de ejecutar un subproceso del host para cada CPU virtual emulada (vCPU). Esto depende de que el invitado se haya actualizado para admitir la emulación del sistema en paralelo, actualmente ARM, Alpha, HP-PA, PowerPC, RISC-V, s390x, x86 y Xtensa. De lo contrario, se utiliza un solo subproceso para emular todas las CPU virtuales (vCPUS) que ejecuta cada vCPU de manera rotatoria.
VirtualBox , lanzado por primera vez en enero de 2007, utilizaba algunos de los dispositivos de hardware virtuales de QEMU y tenía un recompilador dinámico integrado basado en QEMU. Al igual que con KQEMU, VirtualBox ejecuta casi todo el código invitado de forma nativa en el host a través del VMM (Virtual Machine Manager) y utiliza el recompilador solo como un mecanismo de respaldo; por ejemplo, cuando el código invitado se ejecuta en modo real . [21] Además, VirtualBox realizó una gran cantidad de análisis de código y parches utilizando un desensamblador integrado para minimizar la recompilación. VirtualBox es gratuito y de código abierto (disponible bajo GPL ), excepto por ciertas características.
Xen , un monitor de máquina virtual, puede ejecutarse en modo HVM (máquina virtual de hardware), utilizando extensiones de virtualización de hardware x86 Intel VT-x o AMD-V y extensiones de virtualización ARM Cortex-A7 y Cortex-A15 . [22] Esto significa que en lugar de dispositivos paravirtualizados, un conjunto real de hardware virtual se expone al domU para usar controladores de dispositivos reales con los cuales comunicarse.
QEMU incluye varios componentes: emuladores de CPU, dispositivos emulados, dispositivos genéricos, descripciones de máquinas, interfaz de usuario y un depurador. Los dispositivos emulados y los dispositivos genéricos en QEMU conforman sus modelos de dispositivos para la virtualización de E/S. [23] Comprenden un IDE PIIX3 (con algunas capacidades rudimentarias de PIIX4), Cirrus Logic o video VGA emulado simple, emulación de red RTL8139 o E1000 y soporte ACPI. [24] Xen proporciona soporte APIC.
Xen-HVM tiene emulación de dispositivos basada en el proyecto QEMU para proporcionar virtualización de E/S a las máquinas virtuales. El hardware se emula a través de un demonio de "modelo de dispositivo" QEMU que se ejecuta como backend en dom0. A diferencia de otros modos de ejecución de QEMU (traducción dinámica o KVM), las CPU virtuales son completamente administradas por el hipervisor, que se encarga de detenerlas mientras QEMU emula los accesos de E/S asignados a la memoria.
KVM (Kernel-based Virtual Machine) es un módulo del kernel de FreeBSD y Linux que permite a un programa de espacio de usuario acceder a las características de virtualización de hardware de varios procesadores, con lo que QEMU puede ofrecer virtualización para huéspedes x86, PowerPC y S/390. Cuando la arquitectura de destino es la misma que la arquitectura del host, QEMU puede hacer uso de las características particulares de KVM, como la aceleración.
A principios de 2005, Win4Lin presentó Win4Lin Pro Desktop, basado en una versión "optimizada" de QEMU y KQEMU y que aloja versiones NT de Windows. En junio de 2006, [25] Win4Lin lanzó Win4Lin Virtual Desktop Server basado en la misma base de código. Win4Lin Virtual Desktop Server sirve sesiones de Microsoft Windows a clientes ligeros desde un servidor Linux.
En septiembre de 2006, Win4Lin anunció un cambio de nombre de la empresa a Virtual Bridges con el lanzamiento de Win4BSD Pro Desktop, una adaptación del producto a FreeBSD y PC-BSD. El soporte para Solaris llegó en mayo de 2007 con el lanzamiento de Win4Solaris Pro Desktop y Win4Solaris Virtual Desktop Server. [26]
SerialICE es una herramienta de depuración de firmware basada en QEMU que ejecuta el firmware del sistema dentro de QEMU mientras accede al hardware real a través de una conexión serial a un sistema host. Puede utilizarse como un reemplazo económico para los emuladores de hardware en circuito (ICE). [27]
WinUAE introdujo soporte para las placas CyberStorm PPC y Blizzard 603e usando el núcleo QEMU PPC en la versión 3.0.0. [28]
Unicorn es un marco de emulación de CPU basado en el emulador de CPU "TCG" de QEMU. A diferencia de QEMU, Unicorn se centra únicamente en la CPU : no se proporciona emulación de ningún periférico y se puede ejecutar directamente código binario sin procesar (fuera del contexto de un archivo ejecutable o una imagen del sistema). Unicorn es seguro para subprocesos y tiene múltiples enlaces e interfaces de instrumentación. [29]
Limbo es una máquina virtual X86 y ARM64 para Android basada en QEMU [30]. Es uno de los pocos programas de máquinas virtuales disponibles para Android capaces de emular Microsoft Windows, [31] aunque fue diseñado para emular Linux y DOS. A diferencia de otros emuladores basados en QEMU, no requiere que los usuarios escriban comandos para usarlo, sino que cuenta con una interfaz de usuario para configurar la configuración de la máquina virtual.
Es más popular en países en desarrollo de Asia, como India, Malasia y Tailandia en YouTube debido al alto uso del sistema operativo Android. [32] Limbo se eliminó de Google Play Store por razones desconocidas entre febrero de 2019 y diciembre de 2020, aunque aún se puede instalar desde el sitio web del desarrollador con una instalación APK (paquete de Android). [33] Limbo es conocido por tener una calidad de audio escalonada, con fallos y lenta, y no se han encontrado soluciones conocidas hasta 2023. [34] Limbo es generalmente desconocido en popularidad en comparación con otro software de máquinas virtuales, lo que hace que la resolución de problemas sea muy difícil.
Es necesario instalar una aplicación especial conocida como "Hacker's Keyboard" para utilizar muchas funciones del teclado que un teclado básico de Android no puede hacer en Limbo X86, como Ctrl, Alt, Del y las teclas de función. [35] Se recomienda instalar Hacker's Keyboard con un archivo APK debido a que Google Play Store indica que no es compatible con versiones más nuevas de Android; un archivo APK permite instalar Hacker's Keyboard en versiones más nuevas de Android. [36] [ verificación necesaria ]
QEMU puede emular la arquitectura i386 y x86_64. Además de la CPU (que también es configurable y puede emular varios modelos de CPU Intel, incluidos (a fecha de 3 de marzo de 2018) Sandy Bridge , [37] Ivy Bridge , [ 38] Haswell , [39] Broadwell [40] [41] y Skylake [39] ), se emulan los siguientes dispositivos:
La implementación de BIOS utilizada por QEMU a partir de la versión 0.12 es SeaBIOS . La implementación de BIOS VGA de SeaBIOS también se utiliza a partir de la versión 2.0.0. El firmware UEFI para QEMU es OVMF. [45]
QEMU emula los siguientes periféricos PowerMac :
Se utiliza OpenBIOS como firmware.
QEMU emula los siguientes periféricos PREP :
En el objetivo PREP se utiliza Open Hack'Ware , un BIOS compatible con Open Firmware .
QEMU puede emular la interfaz paravirtual sPAPR con los siguientes periféricos:
En el objetivo sPAPR, se utiliza otro BIOS compatible con Open Firmware, llamado SLOF.
QEMU emula el conjunto de instrucciones ARMv7 (y hasta ARMv5TEJ) con extensión NEON. [46] Emula sistemas completos como la placa Integrator/CP, la placa base Versatile, la placa base RealView Emulation, las PDA basadas en XScale, la PDA Palm Tungsten|E, las tabletas de Internet Nokia N800 y Nokia N810 , etc. QEMU también potencia el emulador de Android, que forma parte del SDK de Android (la mayoría de las implementaciones actuales de Android están basadas en ARM). A partir de la versión 2.0.0 de su Bada SDK, Samsung ha elegido QEMU para ayudar al desarrollo de dispositivos 'Wave' emulados.
En 1.5.0 y 1.6.0, se emulan Samsung Exynos 4210 (Cortex-A9 de doble núcleo) y Versatile Express ARM Cortex-A9 ARM Cortex-A15 . En 1.6.0, se emulan las instrucciones de 32 bits de la arquitectura ARMv8 (AArch64), pero no se admiten las instrucciones de 64 bits.
Se modela el SoC Zynq basado en Xilinx Cortex A9 con los siguientes elementos:
QEMU tiene soporte para arquitecturas SPARC de 32 y 64 bits .
Cuando el firmware de JavaStation (sun4m-Architecture) pasó a ser la versión 0.8.1 Proll , [47] un reemplazo de PROM utilizado en la versión 0.8.2, fue reemplazado por OpenBIOS .
QEMU emula los siguientes periféricos sun4m/sun4c/sun4d :
QEMU emula Sun4u (máquina similar a una PC UltraSPARC), Sun4v (máquina similar a una PC T1) o una máquina genérica Niagara (T1) con los siguientes periféricos:
QEMU admite los siguientes periféricos:
Periféricos compatibles: Del SoC Milkymist
Existen árboles externos que respaldan los siguientes objetivos:
{{cite web}}
: Mantenimiento de CS1: postscript ( enlace )HAXM ahora es de código abierto
Intel Hardware Accelerated Execution Manager (Intel® HAXM) es un motor de virtualización asistido por hardware (hipervisor) que utiliza la tecnología de virtualización Intel (Intel® VT) para acelerar la emulación de aplicaciones Android en una máquina host.