Virtualización para máquinas virtuales
- 11 minutos
Las máquinas virtuales son la columna vertebral de la informática en la nube. Al crear una instancia de EC2 en AWS o en una máquina virtual de Azure, el proveedor de servicios en la nube no dedica un servidor físico a la instancia o máquina virtual. En su lugar, crea una máquina virtual en un servidor físico. Esa máquina virtual puede ser una de las muchas hospedadas en el servidor. Pero debido a la virtualización, la máquina virtual tiene un aspecto similar a un servidor dedicado. Está aislada lógicamente de otras máquinas virtuales, y un programa errante que se bloquee o ponga en peligro a una máquina virtual no afectará a los programas que se ejecutan en otras máquinas virtuales, aunque compartan un host físico. Además, un servidor que hospeda dos máquinas virtuales puede ejecutar un sistema operativo (por ejemplo, Linux) en una máquina virtual y otro sistema operativo (como Windows) en la otra.
Las máquinas virtuales también se usan fuera de la informática en la nube. Por ejemplo, un producto conocido denominado Parallels permite a los usuarios de Mac ejecutar Windows y macOS en paralelo mediante el hospedaje de Windows en una máquina virtual. Los desarrolladores de software suelen usar máquinas virtuales para probar los programas, ya que las máquinas virtuales proporcionan un entorno coherente y aislado que se puede replicar fácilmente entre equipos.
Todas estas máquinas virtuales son instancias de máquinas virtuales del sistema, que virtualizan todo un sistema (máquina física). Pero también hay máquinas virtuales de proceso, que proporcionan la base para lenguajes de programación populares, como Java y C#. A continuación se examinarán los dos tipos, se analizará cómo funcionan y se verá por qué de las dos, son las máquinas virtuales del sistema las que proporcionan la base para la informática en la nube.
Máquinas virtuales de proceso
Una máquina virtual de proceso (Figura 1) es una máquina virtual capaz de admitir un proceso individual siempre que esté activo. Una máquina virtual de proceso finaliza cuando finaliza el proceso que hospeda. Desde la perspectiva de una máquina virtual de proceso, una máquina consta de un espacio de direcciones de memoria virtual, registros de nivel de usuario e instrucciones para ejecutar un programa. Según esta definición, un proceso en un sistema operativo de uso general también se puede denominar "máquina". Sin embargo, un proceso normal solo puede admitir archivos binarios de programa compilados para la arquitectura del procesador o la arquitectura del conjunto de instrucciones (ISA) de la máquina host. La ejecución de archivos binarios compilados para una ISA que no sea la del equipo host (por ejemplo, la ejecución de programas compilados para procesadores ARM en equipos con CPU Intel) no es compatible con los procesos normales. Pero una máquina virtual de proceso permite que eso suceda.
Figura 1: Proceso de máquina virtual.
Las máquinas virtuales de proceso admiten ISA que difieren de las ISA de host a través de la emulación, lo que permite que las interfaces y funcionalidades de un sistema (el origen) se implementen en un sistema con interfaces y funcionalidades diferentes (el destino). Un ejemplo de emulación es ejecutar un programa compilado para la familia de procesadores vintage 6502/6510 usados por los primeros equipos Apple en un procesador x86. La abstracción de la máquina virtual del proceso se proporciona mediante un fragmento de software de virtualización denominado runtime. El entorno de ejecución se sitúa sobre el sistema operativo de host y el hardware subyacente. Este entorno de ejecución es el que emula las instrucciones o llamadas del sistema cuando las ISA del invitado y el host son diferentes.
Las máquinas virtuales de proceso existen desde mediados de la década de los 60 y se usaron por primera vez para convertir los lenguajes intermedios generados por los compiladores en código máquina para el procesador del host, en parte para simplificar el proceso de portabilidad de los compiladores a nuevas arquitecturas de procesador. En la actualidad disfrutan de usos similares. Un máquina virtual Java (JVM), por ejemplo, es una máquina virtual de proceso que compila el código de bytes de Java (las instrucciones emitidas por un compilador de Java) en código máquina nativo y lo ejecuta en el equipo host. Los programas escritos en C# y otros lenguajes compatibles con Common Language Runtime (CLR) de Microsoft también emplean máquinas virtuales de proceso para compilar en código máquina las instrucciones del Lenguaje intermedio común (CIL) emitidas por los compiladores. Las máquinas virtuales de proceso cuyo propósito es ejecutar lenguajes intermedios generados por compiladores de lenguaje a veces se conocen como máquinas virtuales de lenguaje de alto nivel o máquinas virtuales HLL para abreviar.
En resumen, una máquina virtual de proceso es similar a un proceso normal que se ejecuta en un sistema operativo. Pero una máquina virtual de proceso permite, a través de la emulación, la ejecución de aplicaciones compiladas para una ISA diferente a la del equipo host. Además, las máquinas virtuales de proceso de HLL proporcionan la base para los lenguajes administrados más conocidos, como Java y C#. En este contexto, el término "administrado" hace referencia al hecho de que Java y C# administran la memoria en nombre de sus aplicaciones y proporcionan medidas de seguridad frente a errores de programación comunes como el uso indebido de punteros y la superación de los límites de las matrices en memoria.
Máquinas virtuales del sistema
A diferencia de las máquinas virtuales de proceso, una máquina virtual del sistema virtualiza la totalidad de un equipo mediante la virtualización de un conjunto completo de recursos de hardware, como procesadores, memoria y dispositivos de E/S. El software de virtualización, o hipervisor, que también se conoce como monitor de máquina virtual (VMM), se encuentra entre el hardware y el sistema operativo y crea la ilusión de que el sistema operativo y las aplicaciones que hospeda se ejecutan en máquinas independientes (figura 2).
Figura 2: Máquina virtual del sistema.
El hipervisor administra la asignación y el acceso a los recursos de hardware subyacentes. Permite que varias máquinas virtuales se ejecuten en paralelo y proporciona a cada una la ilusión de poseer todos esos recursos. La máquina física se denomina host y un sistema operativo que se ejecuta en una máquina virtual en un host se denomina sistema operativo invitado o sistema operativo invitado (figura 3). Todas las máquinas virtuales se pueden arrancar, apagar y reiniciar del mismo modo que un host normal. Una máquina virtual solo se puede ejecutar en un host a la vez, pero se puede apagar, cambiar a otro host e iniciar allí. Por tanto, mientras que una máquina virtual solo se puede ejecutar en un host en un momento dado, se puede migrar a otros hosts durante un período de tiempo.
Figura 3: Sistema único que hospeda varias máquinas virtuales.
Los primeros hipervisores se ejecutaron en sistemas centrales de IBM en la década de los 60. Los primeros hipervisores se implementaban completamente en software o dependían de hardware para mejorar el rendimiento. En realidad, algunos sistemas centrales se distribuían con hardware especial solo para admitir la virtualización. En la actualidad, los microprocesadores populares de Intel y AMD tienen compatibilidad integrada con la virtualización, una característica que se puede habilitar o deshabilitar en la mayoría de los equipos a través de la configuración del firmware. La compatibilidad nativa con la virtualización en las CPU es el motivo principal del aumento en popularidad de las máquinas virtuales a mediados de los años 2000. Dio lugar a una generación de hipervisores económicos pero totalmente destacados, como VMware, Hyper-V y VirtualBox, así como hipervisores de código abierto como Xen1. Incluso antes del auge de la informática en la nube, las organizaciones empezaron a usar estos hipervisores para virtualizar las cargas de trabajo en sus propios centros de datos. Esto aceleró la transición a la informática en la nube, ya que permitió a las organizaciones que ya usaban servidores virtualizados migrar mediante "lift-and-shift" cargas de trabajo a la nube a través de la carga de imágenes de máquina virtual existentes y la creación de máquinas virtuales a partir de ellas.
Los hipervisores también se usan en equipos de escritorio en productos como Parallels y Docker Desktop para Windows. Este último usa un hipervisor de host (Hyper-V o VirtualBox) para ejecutar contenedores de Docker en máquinas virtuales Linux hospedadas en Windows. Para los investigadores de seguridad, los hipervisores son muy valiosos, ya que una máquina virtual en peligro debido al malware no afecta a otras máquinas virtuales, al sistema operativo host ni al hardware subyacente. Una máquina virtual en peligro se puede desactivar rápidamente y, si es necesario, volver a crearse en su estado seguro sin ningún riesgo para el resto del sistema.
Como una máquina virtual de proceso, una máquina virtual del sistema puede admitir ISA diferentes a las del sistema host. Este tipo de máquina virtual se usa ampliamente en emuladores que permiten la ejecución en equipos de escritorio de juegos escritos para Xbox, PlayStation y otras plataformas de hardware. Los emuladores que se implementan de esta manera, a través de hipervisores que aprovechan la compatibilidad con la virtualización en las CPU, normalmente funcionan mejor que los emuladores en máquinas virtuales de proceso que virtualizan los conjuntos de instrucciones en su totalidad a través de software.
A diferencia de una máquina virtual de proceso, una máquina virtual del sistema puede presentar al sistema operativo y a las aplicaciones que hospeda recursos que se diferencian en cantidad y tipo con respecto al host físico. Por ejemplo, una máquina virtual del sistema puede proporcionar más procesadores, a veces denominados CPU virtuales o vCPU, que el sistema host.
En los centros de datos que ofrecen la informática en la nube como servicio a los clientes, se usan máquinas virtuales del sistema para virtualizar las cargas de trabajo y consolidar los servidores. A partir de este punto, cuando se use el término "máquina virtual" o "VM", se referirá a máquinas virtuales del sistema, a menos que se especifique lo contrario. En la lección siguiente, se describirá cómo las máquinas virtuales del sistema benefician a la informática en la nube y por qué esta podría incluso no existir (y ciertamente no ser tan rentable) sin la virtualización.
Referencias
- Barham et al. (2003). "Xen and The Art of Virtualization" (Xen y el arte de la virtualización), en las actas del 19.º simposio de ACM sobre principios de sistemas operativos (SOSP '2003). ACM, Nueva York, NY, EE. UU.
Comprobación de conocimientos
Comentarios
¿Le ha resultado útil esta página?
No
¿Necesita ayuda con este tema?
¿Desea intentar usar Ask Learn para aclarar o guiarle a través de este tema?