QEMU - QEMU

QEMU
Qemu logo.svg
Qemu linux.png
El sistema operativo gratuito ReactOS que se ejecuta dentro de QEMU, que se ejecuta como un proceso en Linux
Autor (es) original (es) Fabrice Bellard
Desarrollador (es) Equipo QEMU:
Peter Maydell, et al.
Lanzamiento estable
6.1.0  Edita esto en Wikidata / 24 de agosto de 2021 ; Hace 48 días ( 24 de agosto de 2021 )
Repositorio
Escrito en C
Sistema operativo Linux , Microsoft Windows , macOS y algunas otras plataformas UNIX
Escribe Hipervisor , emulador
Licencia GPLv2
Sitio web www .qemu .org Edita esto en Wikidata

QEMU es un hipervisor gratuito y de código abierto . Emula el procesador de la máquina a través de la 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 puede emular procesos a nivel de usuario, lo que permite que las aplicaciones compiladas para una arquitectura se ejecuten en otra.

Licencia

QEMU fue escrito por Fabrice Bellard y es software libre , principalmente bajo la Licencia Pública General GNU (GPL para abreviar). Varias partes se publican bajo la licencia BSD , GNU Lesser General Public License (LGPL) u otras licencias compatibles con GPL.

Modos de funcionamiento

QEMU tiene múltiples modos de funcionamiento:

Emulación de modo de usuario
En este modo, QEMU ejecuta programas únicos de Linux o Darwin / macOS que se compilaron para un conjunto de instrucciones diferente . Las llamadas al sistema se procesan en busca de endianness y discrepancias de 32/64 bits. La rápida compilación cruzada y la depuración cruzada son los principales objetivos de la emulación en modo de usuario.
Emulación del sistema
En este modo, QEMU emula un sistema informático completo, incluidos los periféricos . Se puede utilizar para proporcionar alojamiento virtual de varias computadoras virtuales en una sola computadora. QEMU puede arrancar muchos sistemas operativos invitados , incluidos Linux , Solaris , Microsoft Windows , DOS y BSD ; admite la emulación de varios conjuntos de instrucciones, incluidos x86 , MIPS , ARMv7 de 32 bits , ARMv8 , PowerPC , SPARC , ETRAX CRIS y MicroBlaze .
Alojamiento KVM
Aquí QEMU se ocupa de la configuración y migración de imágenes KVM . Todavía está involucrado en la emulación de hardware, pero la ejecución del invitado la realiza KVM según lo solicitado por QEMU.
Alojamiento Xen
QEMU solo participa en la emulación de hardware; la ejecución del invitado se realiza dentro de Xen y está totalmente oculta a QEMU.

Características

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), 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 de host físico, incluidos los discos duros del usuario, unidades de CD-ROM, tarjetas de red, interfaces de audio y 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 todos los dispositivos.

Las imágenes de disco virtual se pueden almacenar en un formato especial ( qcow o qcow2 ) que solo ocupa tanto espacio en disco como el sistema operativo invitado realmente usa. De esta forma, 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 brinda la posibilidad de revertir el contenido del disco emulado a un estado anterior. Por ejemplo, una imagen base podría contener una instalación nueva de un sistema operativo que se sabe que funciona, y se utilizan las imágenes superpuestas. Si el sistema invitado se vuelve inutilizable (a través de 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 al realizar la traducción de direcciones de red, lo que permite que el invitado use 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 mediante un puente entre una interfaz TUN / TAP utilizada por QEMU con una interfaz Ethernet no virtual en el sistema operativo host utilizando las funciones de puenteo del sistema operativo host.

QEMU integra varios servicios para permitir que los sistemas host e invitado se comuniquen; 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 kernels de Linux sin un gestor de arranque.

QEMU no depende de la presencia de métodos de salida gráfica en el sistema anfitrión. En cambio, puede permitir que uno acceda a la pantalla del sistema operativo invitado a través de un servidor VNC integrado. También puede utilizar una línea serie emulada, sin ninguna pantalla, con los sistemas operativos aplicables.

Es posible simular varias CPU que ejecutan 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.

Pequeño generador de código

El Tiny Code Generator (TCG) tiene como objetivo eliminar la deficiencia de depender de una versión particular de GCC o cualquier compilador, en lugar de incorporar el compilador (generador de código) en 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 de TCG , una especie de notación intermedia independiente de la máquina y, posteriormente, TCG compila esta notación para la arquitectura del host. Se realizan pasadas de optimización opcionales entre ellos, para un modo de compilador Just -In-Time (JIT).

TCG requiere un código dedicado escrito para admitir todas las arquitecturas en las que se ejecuta, de modo que el JIT sepa a qué traducir las operaciones de TCG . Si no hay un código JIT dedicado disponible para la arquitectura, TCG recurre a un modo de intérprete lento llamado TCG Interpreter (TCI). También requiere actualizar el código de destino para usar las operaciones de TCG en lugar de las antiguas operaciones de dyngen .

A partir de la versión 0.10.0 de QEMU , TCG se envía con la versión estable de QEMU. Reemplaza al dyngen , que se basó en GCC 3.x para funcionar.

Acelerador

KQEMU era un módulo del kernel de Linux , también escrito por Fabrice Bellard , que aceleró notablemente la emulación de invitados x86 o x86-64 en plataformas con la misma arquitectura de CPU. Este trabajó mediante la ejecución de modo de usuario del código (y opcionalmente algo de código kernel) directamente en la CPU del ordenador anfitrión, y mediante el uso del procesador y la emulación periférica sólo para modo de núcleo y de modo real código. KQEMU podría ejecutar código desde muchos sistemas operativos invitados incluso si la CPU del host no admitía la virtualización asistida por hardware . KQEMU era inicialmente un producto de código cerrado disponible de forma gratuita, pero a partir de la versión 1.3.0pre10 (febrero de 2007), se volvió a obtener la licencia bajo la Licencia Pública General GNU . Las versiones de QEMU que comienzan con 0.12.0 (a partir de agosto de 2009) admiten una gran memoria, lo que las hace incompatibles con KQEMU. Las versiones más recientes de QEMU han eliminado por completo la compatibilidad con KQEMU.

QVM86 fue un reemplazo directo con licencia GNU GPLv2 para el entonces KQEMU de código cerrado. Los desarrolladores de QVM86 dejaron de desarrollarse en enero de 2007.

La máquina virtual basada en kernel ( KVM ) se ha convertido principalmente en 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. QEMU también puede usar KVM en otras arquitecturas como ARM y MIPS .

Hardware Accelerated Execution Manager ( HAXM ) de Intel es una alternativa de código abierto a KVM para la virtualización asistida por hardware basada en x86 en NetBSD, Linux, Windows y macOS con Intel VT . A partir de 2013, Intel solicita principalmente su uso con QEMU para el desarrollo de Android. A partir de la versión 2.9.0, la QEMU oficial incluye soporte para HAXM, bajo el nombre hax .

QEMU también admite los siguientes aceleradores:

  • hvf , Apple está Hypervisor.frameworkbasado en Intel VT.
  • whpx , la plataforma de hipervisor de Windows de Microsoft basada en Intel VT o AMD-V.
  • tcg , el propio Tiny Code Generator de QEMU . Este es el predeterminado.

Formatos de imagen de disco compatibles

QEMU admite los siguientes formatos de imagen de disco :

Emulación asistida por hardware

El procesador Loongson -3 compatible con MIPS agrega 200 nuevas instrucciones para ayudar a QEMU a traducir las instrucciones x86; esas nuevas instrucciones reducen la sobrecarga de ejecutar instrucciones de estilo x86 / CISC en la canalización MIPS. Con mejoras adicionales en QEMU por parte de la Academia China de Ciencias , Loongson-3 logra un promedio del 70% del rendimiento de ejecutar binarios nativos mientras ejecuta binarios x86 desde nueve puntos de referencia. A junio de 2020, no se ha publicado ningún código fuente para esta bifurcación, por lo que el reclamo no se puede verificar de forma independiente.

Emulación paralela

Las soluciones de virtualización que utilizan QEMU pueden ejecutar varias CPU virtuales en paralelo. Para la emulación en modo de usuario, QEMU asigna subprocesos emulados a subprocesos de host. Para la emulación completa del sistema, QEMU es capaz de ejecutar un subproceso de host para cada CPU virtual emulada (vCPU). Esto depende de que el invitado se haya actualizado para admitir la emulación del sistema paralelo, actualmente ARM, Alpha, HP-PA, PowerPC, RISC-V, s390x, x86 y Xtensa. De lo contrario, se utiliza un único subproceso para emular todo el CPUS virtual (vCPUS) que ejecuta cada vCPU de manera rotatoria.

Integración

VirtualBox

VirtualBox , lanzado por primera vez en enero de 2007, usaba algunos de los dispositivos de hardware virtual 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 de invitado de forma nativa en el host a través de VMM (Virtual Machine Manager) y usa el recompilador solo como mecanismo de reserva, por ejemplo, cuando el código de invitado se ejecuta en modo real . Además, VirtualBox realizó muchos análisis de código y parches utilizando un desensamblador incorporado para minimizar la recompilación. VirtualBox es gratuito y de código abierto (disponible bajo GPL ), excepto por ciertas características.

Xen-HVM

Xen , un monitor de máquina virtual, puede ejecutarse en modo HVM (máquina virtual de hardware), utilizando las extensiones de virtualización x86 de hardware Intel VT-x o AMD-V y la extensión de virtualización ARM Cortex-A7 y Cortex-A15 . Esto significa que en lugar de dispositivos paravirtualizados, se expone un conjunto real de hardware virtual a la domU para usar controladores de dispositivos reales con los que hablar.

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 de QEMU componen sus modelos de dispositivos para la virtualización de E / S. Comprenden un PIIX3 IDE (con algunas capacidades rudimentarias de PIIX4), Cirrus Logic o video simple emulado VGA, emulación de red RTL8139 o E1000 y soporte ACPI. El soporte APIC lo proporciona Xen.

Xen-HVM tiene una emulación de dispositivo 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 se administran completamente al hipervisor, que se encarga de detenerlas mientras QEMU emula los accesos de E / S asignados en memoria.

KVM

KVM (máquina virtual basada en kernel) es un módulo de kernel de FreeBSD y Linux que permite a un programa de espacio de usuario acceder a las funciones de virtualización de hardware de varios procesadores, con lo que QEMU puede ofrecer virtualización para invitados x86, PowerPC y S / 390. Cuando la arquitectura de destino es la misma que la arquitectura del host, QEMU puede hacer uso de características particulares de KVM, como la aceleración.

Escritorio Win4Lin Pro

A principios de 2005, Win4Lin introdujo Win4Lin Pro Desktop, basado en una versión 'ajustada' de QEMU y KQEMU y aloja versiones NT de Windows. En junio de 2006, 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 del 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 de Solaris siguió en mayo de 2007 con el lanzamiento de Win4Solaris Pro Desktop y Win4Solaris Virtual Desktop Server.

SerialICE

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 en serie a un sistema host. Esto se puede utilizar como un reemplazo económico para emuladores en circuito de hardware (ICE).

WinUAE

WinUAE introdujo soporte para las placas CyberStorm PPC y Blizzard 603e usando el núcleo QEMU PPC en la versión 3.0.0.

Unicornio

Unicorn es un marco de emulación de CPU basado en el emulador de CPU "TCG" de QEMU. A diferencia de QEMU, unicornio se centra en la CPU única : no se proporciona la emulación de los periféricos y código binario (fuera del contexto de un archivo ejecutable o una imagen del sistema) se puede ejecutar directamente. Unicorn es seguro para subprocesos y tiene múltiples enlaces e interfaces de instrumentación.

Plataformas de hardware emuladas

x86

Además de la CPU (que también es configurable y puede emular varios modelos de CPU Intel, incluidos (a partir del 3 de marzo de 2018) Sandy Bridge , Ivy Bridge , Haswell , Broadwell y Skylake ), 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 del BIOS VGA proviene de Plex86 / Bochs . El firmware UEFI para QEMU es OVMF.

PowerPC

PowerMac

QEMU emula los siguientes periféricos PowerMac :

  • Puente PCI UniNorth
  • Tarjeta gráfica compatible con PCI-VGA que asigna las extensiones VESA Bochs
  • Dos interfaces PMAC-IDE con soporte para disco duro y CD-ROM.
  • Adaptador PCI NE2000
  • RAM no volátil
  • VIA-CUDA con teclado y mouse ADB .

OpenBIOS se utiliza como firmware.

DEBERES

QEMU emula los siguientes periféricos PREP :

  • Puente PCI
  • Tarjeta gráfica compatible con PCI VGA con extensiones VESA Bochs
  • Dos interfaces IDE con soporte para disco duro y CD-ROM
  • Unidad de disquete
  • Adaptador de red NE2000
  • Interfaz de serie
  • PREP RAM no volátil
  • Teclado y mouse compatibles con PC

En el objetivo PREP, se utiliza Open Hack'Ware , un BIOS compatible con Open-Firmware .

IBM System p

QEMU puede emular la interfaz sPAPR paravirtual con los siguientes periféricos:

  • Puente PCI, para acceder a dispositivos virtio, gráficos compatibles con VGA, USB, etc.
  • Adaptador de red de E / S virtual, controlador SCSI e interfaz en serie
  • sPAPR RAM no volátil

En el destino sPAPR, se utiliza otro BIOS compatible con Open-Firmware, llamado SLOF.

BRAZO

ARM32

QEMU arrancó en el puerto ARM de Fedora 8

QEMU emula el conjunto de instrucciones ARMv7 (y hasta ARMv5TEJ) con la extensión NEON. Emula sistemas completos como la placa Integrator / CP, placa base versátil, placa base de emulación RealView, PDA basadas en XScale, Palm Tungsten | E PDA, tabletas de Internet Nokia N800 y Nokia N810, etc. QEMU también alimenta el emulador de Android que es 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 en dispositivos 'Wave' emulados.

En 1.5.0 y 1.6.0 se emula Samsung Exynos 4210 (dual-core Cortex a9) 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 las instrucciones de 64 bits no son compatibles.

El SoC Zynq basado en Xilinx Cortex A9 está modelado, con los siguientes elementos:

  • CPU Zynq-7000 ARM Cortex-A9
  • Zynq-7000 ARM Cortex-A9 MPCore
  • Contador de temporizador triple
  • Controlador de memoria DDR
  • Controlador DMA (PL330)
  • Controlador de memoria estática (NAND / NOR Flash)
  • Controlador de periféricos SD / SDIO (SDHCI)
  • Controlador Zynq Gigabit Ethernet
  • Controlador USB (EHCI: solo compatible con host)
  • Controlador Zynq UART
  • Controladores SPI y QSPI
  • Controlador I2C

ARM64

SPARC

QEMU admite arquitecturas SPARC de 32 y 64 bits .

Cuando el firmware de JavaStation (sun4m-Architecture) se convirtió en la versión 0.8.1 , Proll , un reemplazo de PROM utilizado en la versión 0.8.2, fue reemplazado por OpenBIOS .

SPARC32

QEMU emula los siguientes periféricos sun4m / sun4c / sun4d :

  • IOMMU o IO-UNIT
  • Búfer de fotogramas TCX (tarjeta gráfica)
  • Lanza (Am7990) Ethernet
  • RAM no volátil M48T02 / M48T08
  • E / S esclavas: temporizadores, controladores de interrupción, puertos serie Zilog , teclado y lógica de encendido / reinicio
  • Controlador ESP SCSI con soporte para disco duro y CD-ROM
  • Unidad de disquete (no en SS-600MP)
  • Dispositivo de sonido CS4231 (solo en SS-5, aún no funciona)

SPARC64

Emulando Sun4u (máquina tipo PC UltraSPARC), Sun4v (máquina tipo PC T1) o máquina genérica Niagara (T1) con los siguientes periféricos:

  • Puente PCI UltraSparc IIi APB
  • Tarjeta compatible con PCI VGA con extensiones VESA Bochs
  • Ratón y teclado PS / 2
  • RAM no volátil M48T59
  • Puertos seriales compatibles con PC
  • 2 interfaces PCI IDE con soporte para disco duro y CD-ROM
  • Disco flexible

MicroBlaze

Periféricos compatibles:

  • MicroBlaze con / sin MMU, incluido
  • Periféricos del controlador de interrupción y temporizador AXI
  • Controlador de memoria externa AXI
  • Controlador AXI DMA
  • Xilinx AXI Ethernet
  • AXI Ethernet Lite
  • AXI UART 16650 y UARTLite
  • Controlador AXI SPI

LatticeMico32

Periféricos compatibles: del Milkymist SoC

  • UART
  • VGA
  • Tarjeta de memoria
  • Ethernet
  • pfu
  • Temporizador

CRIS

OpenRISC

Otros

Existen árboles externos que apoyan los siguientes objetivos:

Ver también

Referencias

enlaces externos