En informática, una máquina virtual de sistema es una máquina virtual que proporciona una plataforma de sistema completa y admite la ejecución de un sistema operativo (SO) completo . [1] Por lo general, estos emulan una arquitectura existente y se construyen con el propósito de proporcionar una plataforma para ejecutar programas donde el hardware real no está disponible para su uso (por ejemplo, ejecutar en plataformas obsoletas), o de tener múltiples instancias de máquinas virtuales que conducen a un uso más eficiente de los recursos informáticos, tanto en términos de consumo de energía como de rentabilidad (conocida como virtualización de hardware , la clave para una computación en la nubemedio ambiente), o ambos. Una máquina virtual fue definida originalmente por Popek y Goldberg como "un duplicado eficiente y aislado de una máquina real".
Máquinas virtuales del sistema
Ventajas de la máquina virtual del sistema:
- Pueden coexistir varios entornos de SO en el mismo disco duro principal, con una partición virtual que permite compartir archivos generados en el sistema operativo "host" o en el entorno virtual "invitado". Las instalaciones de software adjunto, la conectividad inalámbrica y la replicación remota, como la impresión y el envío de faxes, se pueden generar en cualquiera de los sistemas operativos invitados o host. Independientemente del sistema, todos los archivos se almacenan en el disco duro del sistema operativo host.
- El aprovisionamiento de aplicaciones, el mantenimiento, la alta disponibilidad y la recuperación ante desastres son inherentes al software de la máquina virtual seleccionada.
- Puede proporcionar entornos de hardware emulados diferentes de la arquitectura del conjunto de instrucciones del host (ISA), mediante emulación o mediante compilación Just-In-Time .
Las principales desventajas de las máquinas virtuales son:
- Una máquina virtual es menos eficiente que una máquina real cuando accede indirectamente al disco duro del host.
- Cuando varias máquinas virtuales se ejecutan simultáneamente en el disco duro del host real, las máquinas virtuales adjuntas pueden exhibir un rendimiento variable y / o inestable (velocidad de ejecución y protección contra malware). Esto depende de la carga de datos impuesta al sistema por otras VM, a menos que el software de VM seleccionado proporcione aislamiento temporal entre las máquinas virtuales .
- Las protecciones de malware para máquinas virtuales no son necesariamente compatibles con el "host" y pueden requerir software por separado.
Varias máquinas virtuales que ejecutan su propio sistema operativo invitado se utilizan con frecuencia para la consolidación del servidor a fin de evitar la interferencia de máquinas virtuales independientes en la misma plataforma de máquina real.
El deseo de ejecutar varios sistemas operativos fue la motivación inicial para las máquinas virtuales, a fin de permitir el tiempo compartido entre varios sistemas operativos de una sola tarea. En algunos aspectos, una máquina virtual de sistema puede considerarse una generalización del concepto de memoria virtual que históricamente la precedió. El CP / CMS de IBM , los primeros sistemas que permiten la virtualización completa , implementaron el tiempo compartido al proporcionar a cada usuario un sistema operativo de un solo usuario, el CMS . A diferencia de la memoria virtual, una máquina virtual del sistema autorizaba al usuario a escribir instrucciones privilegiadas en su código. Este enfoque tenía ciertas ventajas, como agregar dispositivos de entrada / salida no permitidos por el sistema estándar. [2]
A medida que la tecnología evoluciona la memoria virtual con fines de virtualización, se pueden aplicar nuevos sistemas de sobrecompromiso de memoria para administrar la memoria compartida entre múltiples máquinas virtuales en un sistema operativo de computadora real. Es posible compartir "páginas de memoria" que tienen contenido idéntico entre varias máquinas virtuales que se ejecutan en la misma máquina física, lo que puede resultar en asignarlas a la misma página física mediante una técnica conocida como Kernel SamePage Merging . Esto es particularmente útil para páginas de solo lectura, como aquellas que contienen segmentos de código; en particular, ese sería el caso de varias máquinas virtuales que ejecutan el mismo software o uno similar, bibliotecas de software, servidores web, componentes de middleware, etc. Los sistemas operativos invitados no necesitan ser compatibles con el hardware del host, por lo que es posible ejecutar diferentes sistemas operativos en la misma computadora (por ejemplo, Microsoft Windows , Linux o versiones anteriores de un sistema operativo) para admitir software futuro.
El uso de máquinas virtuales para admitir sistemas operativos invitados separados es popular en lo que respecta a los sistemas integrados . Un uso típico sería ejecutar un sistema operativo en tiempo real simultáneamente con un sistema operativo complejo preferido, como Linux o Windows. Otro uso sería para software nuevo y no probado que aún se encuentra en la etapa de desarrollo, por lo que se ejecuta dentro de una caja de arena . Las máquinas virtuales tienen otras ventajas para el desarrollo del sistema operativo y pueden incluir un acceso de depuración mejorado y reinicios más rápidos. [3]
Técnicas
Se utilizan diferentes técnicas de virtualización, según el uso deseado. La ejecución nativa se basa en la virtualización directa del hardware en bruto subyacente, por lo que proporciona múltiples "instancias" de la misma arquitectura en la que se basa una máquina real, capaz de ejecutar sistemas operativos completos. Algunas máquinas virtuales también pueden emular diferentes arquitecturas y permitir la ejecución de aplicaciones de software y sistemas operativos escritos para otra CPU o arquitectura. La virtualización a nivel de sistema operativo permite dividir los recursos de una computadora a través del soporte del kernel para múltiples instancias de espacio de usuario aislado , que generalmente se denominan contenedores y pueden verse y sentirse como máquinas reales para los usuarios finales . Algunas arquitecturas de computadora son capaces de virtualización asistida por hardware , lo que permite una virtualización completa eficiente mediante el uso de capacidades de hardware específicas de virtualización, principalmente de las CPU del host.
Virtualización del hardware en bruto subyacente (ejecución nativa)
Este enfoque se describe como virtualización completa del hardware y se puede implementar mediante un hipervisor de tipo 1 o tipo 2 : un hipervisor de tipo 1 se ejecuta directamente en el hardware y un hipervisor de tipo 2 se ejecuta en otro sistema operativo, como Linux o Windows. . Cada máquina virtual puede ejecutar cualquier sistema operativo compatible con el hardware subyacente. De este modo, los usuarios pueden ejecutar dos o más sistemas operativos "invitados" diferentes simultáneamente, en computadoras virtuales "privadas" separadas.
El sistema pionero que utilizó este concepto fue el CP-40 de IBM , la primera versión (1967) del CP / CMS de IBM (1967-1972) y el precursor de la familia VM de IBM (1972-presente). Con la arquitectura de VM, la mayoría de los usuarios ejecutan un sistema operativo de computación interactiva de un solo usuario relativamente simple , CMS , como "invitado" en la parte superior del programa de control de VM ( VM-CP ). Este enfoque hizo que el diseño del CMS fuera simple, como si se ejecutara solo; el programa de control proporciona silenciosamente servicios de gestión de recursos y multitarea "entre bastidores". Además de la comunicación CMS y otras tareas del sistema se realizan mediante VM multitarea (RSCS, GCS, TCP / IP, UNIX), y los usuarios pueden ejecutar cualquiera de los otros sistemas operativos de IBM, como MVS , incluso un nuevo CP o ahora z / OS . Incluso el CMS simple podría ejecutarse en un entorno con subprocesos (LISTSERV, TRICKLE). z / VM es la versión actual de VM y se utiliza para admitir cientos o miles de máquinas virtuales en un mainframe determinado. Algunas instalaciones usan Linux en IBM Z para ejecutar servidores web , donde Linux se ejecuta como sistema operativo dentro de muchas máquinas virtuales.
La virtualización completa es particularmente útil en el desarrollo de sistemas operativos, cuando se puede ejecutar código nuevo experimental al mismo tiempo que versiones más antiguas y estables, cada una en una máquina virtual separada. El proceso puede incluso ser recursivo : IBM depuró nuevas versiones de su sistema operativo de máquina virtual, VM , en una máquina virtual que se ejecuta en una versión anterior de VM, e incluso utilizó esta técnica para simular nuevo hardware. [NB 1]
La arquitectura estándar del conjunto de instrucciones x86, tal como se utiliza en las PC modernas, en realidad no cumple con los requisitos de virtualización de Popek y Goldberg . En particular, no existe un modo de ejecución en el que todas las instrucciones sensibles de la máquina siempre se intercepten, lo que permitiría la virtualización por instrucción.
A pesar de estas limitaciones, varios paquetes de software han logrado proporcionar virtualización en la arquitectura x86 , aunque la recompilación dinámica de código privilegiado, tal como la implementó VMware por primera vez , incurre en cierta sobrecarga de rendimiento en comparación con una VM que se ejecuta en una arquitectura virtualizable de forma nativa como IBM. Sistema / 370 o Motorola MC68020 . Por ahora, varios otros paquetes de software como Virtual PC , VirtualBox , Parallels Workstation y Virtual Iron logran implementar la virtualización en hardware x86.
Intel y AMD han introducido características en sus procesadores x86 para permitir la virtualización en hardware .
Además de la virtualización de los recursos de una sola máquina, se pueden combinar varios nodos independientes en un clúster y acceder a ellos como una sola máquina virtual NUMA . [4]
Emulación de un sistema no nativo
Las máquinas virtuales también pueden desempeñar el papel de un emulador , lo que permite ejecutar aplicaciones de software y sistemas operativos escritos para otra arquitectura de procesador de computadora .
Virtualización a nivel de sistema operativo
Virtualización a nivel de sistema operativo es un servidor de virtualización tecnología que virtualiza los servidores en un sistema operativo (kernel) capa. Se puede considerar como partición: un solo servidor físico se divide en múltiples particiones pequeñas (también llamadas entornos virtuales (VE), servidores privados virtuales (VPS), invitados, zonas, etc.); cada una de estas particiones se ve y se siente como un servidor real, desde el punto de vista de sus usuarios.
Por ejemplo, Solaris Zones admite varios sistemas operativos invitados que se ejecutan bajo el mismo sistema operativo, como Solaris 10. [5] Los sistemas operativos invitados pueden usar el mismo nivel de kernel con la misma versión del sistema operativo, o pueden ser una copia separada del sistema operativo. con una versión de kernel diferente utilizando Solaris Kernel Zones. [6] Las zonas nativas de Solaris también requieren que el sistema operativo del host sea una versión de Solaris; otros sistemas operativos de otros fabricantes no son compatibles. [ cita requerida ] Sin embargo, las zonas con marca de Solaris deberían usarse para tener otros sistemas operativos como zonas. [ cita requerida ]
Otro ejemplo son las particiones de carga de trabajo del sistema (WPAR), introducidas en la versión 6.1 del sistema operativo IBM AIX. Las WPAR del sistema son particiones de software que se ejecutan en una instancia del entorno del sistema operativo AIX global.
La arquitectura de nivel de sistema operativo tiene una sobrecarga baja que ayuda a maximizar el uso eficiente de los recursos del servidor. La virtualización introduce solo una sobrecarga insignificante y permite ejecutar cientos de servidores privados virtuales en un solo servidor físico. Por el contrario, enfoques como la virtualización completa (como VMware ) y la paravirtualización (como Xen o UML ) no pueden alcanzar tal nivel de densidad, debido a la sobrecarga de ejecutar múltiples kernels. Por otro lado, la virtualización a nivel de sistema operativo no permite ejecutar diferentes sistemas operativos (es decir, diferentes kernels), aunque son posibles diferentes bibliotecas, distribuciones, etc. Se utilizan diferentes técnicas de virtualización, según el uso deseado. La ejecución nativa se basa en la virtualización directa del hardware en bruto subyacente, por lo que proporciona múltiples "instancias" de la misma arquitectura en la que se basa una máquina real, capaz de ejecutar sistemas operativos completos. Algunas máquinas virtuales también pueden emular diferentes arquitecturas y permitir la ejecución de aplicaciones de software y sistemas operativos escritos para otra CPU o arquitectura. La virtualización a nivel de sistema operativo permite dividir los recursos de una computadora a través del soporte del kernel para múltiples instancias de espacio de usuario aislado, que generalmente se denominan contenedores y pueden parecer máquinas reales para los usuarios finales. Algunas arquitecturas de computadora son capaces de virtualización asistida por hardware, lo que permite una virtualización completa eficiente mediante el uso de capacidades de hardware específicas de virtualización, principalmente de las CPU del host.
Hardware habilitado para virtualización
Entre los ejemplos de hardware habilitado para virtualización se incluyen los siguientes:
- Alcatel-Lucent 3B20D / 3B21D emulado en off-the-shelf comerciales ordenadores con sistema de 3B2OE o 3B21E [ aclaración necesaria ]
- ARM TrustZone
- Boston Circuits gCore (grid-on-chip) con 16 núcleos ARC 750D y módulo de virtualización de hardware Time-machine.
- Freescale PowerPC MPC8572 y MPC8641D
- Mainframes IBM System / 360 Modelo 67 , System / 370 , System / 390 y zSeries
- IBM Power Systems
- x86 :
- AMD-V (anteriormente llamado Pacifica)
- Intel VT-x (anteriormente llamado Vanderpool)
- HP vPAR y nPAR basado en células
- Sistemas GE y Honeywell Multics [ aclaración necesaria ]
- Honeywell 200/2000 Systems Liberator reemplaza los sistemas IBM 14xx
- Honeywell Level 62/64/66 [ cita requerida ]
- Modelos IBM System / 360 y System / 370 con emuladores que admiten programas para sistemas IBM más antiguos
- Minicomputadoras Honeywell Level 6 emuladas al predecesor 316/516/716 minis [ cita requerida ]
- Oracle Corporation (anteriormente Sun Microsystems ) SPARC sun4v ( SPARC M6 , T5 , T4 , T3 , UltraSPARC T1 y T2 ): utilizado por Oracle VM Server para SPARC , también conocido como "Dominios lógicos"
- Las CPU Xerox Sigma 6 se modificaron para emular los sistemas GE / Honeywell 600/6000 [ cita requerida ]
Ver también
- Imagen de la máquina de Amazon
- Contenedores de Linux
- Hipervisor de almacenamiento
- Máquina de Turing universal
- Dispositivo virtual
- Dispositivo de respaldo virtual
- Imagen de disco virtual
- Escape de la máquina virtual
Notas
- ^ Consulte Historia de CP / CMS para conocer el uso de máquinas virtuales por parte de IBM para el desarrollo de sistemas operativos y la simulación de nuevo hardware
Referencias
- ^ "Máquinas virtuales: virtualización frente a emulación" . Consultado el 11 de marzo de 2011 .
- ^ Smith y Nair, págs. 395–396
- ^ Reinicios superrápidos del servidor: otra razón por la que la virtualización es espectacular. Archivado el 14 de junio de 2006 en Wayback Machine . vmwarez.com (9 de mayo de 2006). Consultado el 14 de junio de 2013.
- ^ Matthew Chapman y Gernot Heiser. vNUMA: un multiprocesador virtual de memoria compartida. Actas de la Conferencia Técnica Anual de USENIX 2009, San Diego, CA, EE.UU., junio de 2009 [1]
- ^ "Descripción general de las zonas de Oracle Solaris" . docs.oracle.com . Consultado el 26 de junio de 2015 .
- ^ "Acerca de las zonas del kernel de Oracle Solaris" . docs.oracle.com . Consultado el 26 de junio de 2015 .
Otras lecturas
- James E. Smith, Ravi Nair, Virtual Machines: Versatile Platforms for Systems and Processes , Morgan Kaufmann, mayo de 2005, ISBN 1-55860-910-5 , 656 páginas (cubre tanto máquinas virtuales de proceso como de sistema)
- Craig, Iain D. Máquinas virtuales . Springer , 2006, ISBN 1-85233-969-1 , 269 páginas (cubre solo máquinas virtuales de proceso)
enlaces externos
- The Reincarnation of Virtual Machines, artículo sobre ACM Queue por Mendel Rosenblum, cofundador de VMware