stringtranslate.com

Máquina virtual

En informática, una máquina virtual ( VM ) es la virtualización o emulación de un sistema informático . Las máquinas virtuales se basan en arquitecturas informáticas y proporcionan la funcionalidad de una computadora física. Sus implementaciones pueden involucrar hardware especializado, software o una combinación de ambos. Las máquinas virtuales se diferencian y están organizadas según su función, como se muestra aquí:

Algunos emuladores de máquinas virtuales, como QEMU y los emuladores de consolas de videojuegos , están diseñados para emular también (o "imitar virtualmente") diferentes arquitecturas de sistemas, permitiendo así 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 particionar los recursos de una computadora a través del kernel . Los términos no son universalmente intercambiables.

Definiciones

Máquinas virtuales del sistema

Popek y Goldberg definieron originalmente una "máquina virtual" como "un duplicado eficiente y aislado de una máquina informática real". [1] El uso actual incluye máquinas virtuales que no tienen correspondencia directa con ningún hardware real. [2] El hardware físico del "mundo real" que ejecuta la VM generalmente se denomina "host", y la máquina virtual emulada en esa máquina generalmente se denomina "invitada". Un host puede emular a varios invitados, cada uno de los cuales puede emular diferentes sistemas operativos y plataformas de hardware.

El deseo de ejecutar múltiples sistemas operativos fue el motivo inicial de las máquinas virtuales, para 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 la precedió históricamente. CP/CMS de IBM , los primeros sistemas que permitieron la virtualización completa , implementaron el tiempo compartido proporcionando a cada usuario un sistema operativo de usuario único, el Conversational Monitor System (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 compromiso excesivo de memoria para gestionar el uso compartido de memoria entre múltiples máquinas virtuales en un sistema operativo de computadora. Es posible compartir páginas de memoria que tengan contenidos idénticos 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 denominada fusión de la misma página del núcleo (KSM). Esto es especialmente útil para páginas de solo lectura, como aquellas que contienen segmentos de código, como es el caso de múltiples máquinas virtuales que ejecutan el mismo software, bibliotecas de software, servidores web, componentes de middleware, etc. o similares. Los sistemas operativos invitados no necesitan ser compatible con el hardware del host, lo que hace posible ejecutar diferentes sistemas operativos en la misma computadora (por ejemplo, Windows , Linux o versiones anteriores de un sistema operativo) para admitir software futuro. [3]

El uso de máquinas virtuales para soportar 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 novedoso y no probado que aún se encuentra en etapa de desarrollo, por lo que se ejecuta dentro de una zona de pruebas . Las máquinas virtuales tienen otras ventajas para el desarrollo de sistemas operativos y pueden incluir un acceso de depuración mejorado y reinicios más rápidos. [4]

Con frecuencia se utilizan varias máquinas virtuales que ejecutan su propio sistema operativo invitado para la consolidación del servidor. [5]

Procesar máquinas virtuales

Una máquina virtual de proceso, a veces denominada máquina virtual de aplicación o entorno de ejecución administrado (MRE), se ejecuta como una aplicación normal dentro de un sistema operativo host y admite un único proceso. Se crea cuando se inicia ese proceso y se destruye cuando sale. Su propósito es proporcionar un entorno de programación independiente de la plataforma que abstraiga detalles del hardware o sistema operativo subyacente y permita que un programa se ejecute de la misma manera en cualquier plataforma. [ cita necesaria ]

Una VM de proceso proporciona una abstracción de alto nivel: la de un lenguaje de programación de alto nivel (en comparación con la abstracción ISA de bajo nivel de la VM del sistema). Las máquinas virtuales de proceso se implementan mediante un intérprete ; Se puede lograr un rendimiento comparable al de los lenguajes de programación compilados mediante el uso de la compilación justo a tiempo . [ cita necesaria ]

Este tipo de VM se ha vuelto popular entre el lenguaje de programación Java , que se implementa mediante la máquina virtual Java . Otros ejemplos incluyen la máquina virtual Parrot y .NET Framework , que se ejecuta en una máquina virtual llamada Common Language Runtime . Todos ellos pueden servir como capa de abstracción para cualquier lenguaje informático. [ cita necesaria ]

Un caso especial de máquinas virtuales de proceso son los sistemas que abstraen los mecanismos de comunicación de un grupo de computadoras (potencialmente heterogéneo) . Una máquina virtual de este tipo no consta de un único proceso, sino de un proceso por máquina física en el clúster. Están diseñados para facilitar la tarea de programar aplicaciones simultáneas al permitir que el programador se centre en algoritmos en lugar de en los mecanismos de comunicación proporcionados por la interconexión y el sistema operativo. No ocultan el hecho de que se produce comunicación y, como tales, no intentan presentar el clúster como una sola máquina. [ cita necesaria ]

A diferencia de otras máquinas virtuales de proceso, estos sistemas no proporcionan un lenguaje de programación específico, sino que están integrados en un lenguaje existente; normalmente, un sistema de este tipo proporciona enlaces para varios lenguajes (por ejemplo, C y Fortran ). [ cita necesaria ] Algunos ejemplos son la máquina virtual paralela (PVM) y la interfaz de paso de mensajes (MPI).

Historia

Tanto las máquinas virtuales de sistemas como las máquinas virtuales de procesos datan de la década de 1960 y siguen siendo áreas de desarrollo activo.

Las máquinas virtuales del sistema surgieron del tiempo compartido , como se implementó notablemente en el Sistema de tiempo compartido compatible (CTSS). El tiempo compartido permitió que varios usuarios usaran una computadora al mismo tiempo : cada programa parecía tener acceso completo a la máquina, pero solo se ejecutaba un programa a la vez, y el sistema cambiaba entre programas en intervalos de tiempo, guardando y restaurando el estado cada vez. Esto evolucionó hasta convertirse en máquinas virtuales, especialmente a través de los sistemas de investigación de IBM: el M44/44X , que usaba virtualización parcial , y el CP-40 y SIMMON , que usaban virtualización completa , y fueron los primeros ejemplos de hipervisores . La primera arquitectura de máquina virtual ampliamente disponible fue la CP-67 /CMS (consulte Historia de CP/CMS para obtener más detalles). Una distinción importante fue entre usar múltiples máquinas virtuales en un sistema host para tiempo compartido, como en M44/44X y CP-40, y usar una máquina virtual en un sistema host para creación de prototipos, como en SIMMON. Los emuladores , con emulación de hardware de sistemas anteriores por compatibilidad, se remontan al IBM System/360 en 1963, [6] [7] mientras que la emulación de software (entonces llamada "simulación") es anterior a ella.

Las máquinas virtuales de proceso surgieron originalmente como plataformas abstractas para un lenguaje intermedio utilizado como representación intermedia de un programa por un compilador ; Los primeros ejemplos datan de alrededor de 1966. Un ejemplo temprano de 1966 fue la máquina O-code , una máquina virtual que ejecuta código O (código objeto) emitido por la interfaz del compilador BCPL . Esta abstracción permitió trasladar fácilmente el compilador a una nueva arquitectura mediante la implementación de un nuevo back-end que tomó el código O existente y lo compiló en código de máquina para la máquina física subyacente. El lenguaje Euler utilizó un diseño similar, con el lenguaje intermedio denominado P (portátil). [8] Esto fue popularizado alrededor de 1970 por Pascal , notablemente en el sistema Pascal-P (1973) y el compilador Pascal-S (1975), en el que se denominó código p y la máquina resultante como máquina de código p . Esto ha sido influyente, y las máquinas virtuales en este sentido a menudo se han denominado generalmente máquinas de código p. Además de ser un lenguaje intermedio, el código p de Pascal también fue ejecutado directamente por un intérprete que implementaba la máquina virtual, especialmente en UCSD Pascal (1978); esto influyó en los intérpretes posteriores, en particular la máquina virtual Java (JVM). Otro ejemplo temprano fue SNOBOL4 (1967), que fue escrito en SNOBOL Implementation Language (SIL), un lenguaje ensamblador para una máquina virtual, que luego se dirigió a máquinas físicas mediante la transpilación a su ensamblador nativo a través de un macro ensamblador . [9] Sin embargo, desde entonces las macros han caído en desgracia, por lo que este enfoque ha sido menos influyente. Las máquinas virtuales de proceso fueron un enfoque popular para implementar los primeros software de microcomputadoras, incluidos Tiny BASIC y juegos de aventuras, desde implementaciones únicas como Pyramid 2000 hasta un motor de propósito general como la máquina z de Infocom , que según Graham Nelson es "posiblemente". la máquina virtual más portátil jamás creada". [10]

Se produjeron avances significativos en la implementación de Smalltalk -80, [11] particularmente la implementación de Deutsch/Schiffmann [12] que impulsó la compilación justo a tiempo (JIT) como un enfoque de implementación que utiliza una máquina virtual de procesos. [13] Las máquinas virtuales Smalltalk notables posteriores fueron VisualWorks , Squeak Virtual Machine , [14] y Strongtalk . [15] Un lenguaje relacionado que produjo una gran innovación en máquinas virtuales fue el lenguaje de programación Self , [16] que fue pionero en la optimización adaptativa [17] y la recolección de basura generacional . Estas técnicas tuvieron éxito comercial en 1999 en la máquina virtual HotSpot Java. [18] Otras innovaciones incluyen una máquina virtual basada en registros, para adaptarse mejor al hardware subyacente, en lugar de una máquina virtual basada en pilas, que se acerca más al lenguaje de programación; En 1995, esto fue pionero en la máquina virtual Dis para el lenguaje Limbo .

Virtualización completa

Diagrama lógico de virtualización completa.

En la virtualización completa, la máquina virtual simula suficiente hardware para permitir que un sistema operativo "invitado" no modificado (uno diseñado para el mismo conjunto de instrucciones ) se ejecute de forma aislada. Este enfoque fue pionero en 1966 con IBM CP-40 y CP-67 , predecesores de la familia VM .

Los ejemplos fuera del campo de mainframe incluyen Parallels Workstation , Parallels Desktop para Mac , VirtualBox , Virtual Iron , Oracle VM , Virtual PC , Virtual Server , Hyper-V , VMware Fusion , VMware Workstation , VMware Server (descontinuado, anteriormente llamado GSX Server), VMware Tecnología ESXi , QEMU , Adeos , Mac-on-Linux, Win4BSD, Win4Lin Pro y Egenera vBlade.

Virtualización asistida por hardware

En la virtualización asistida por hardware, el hardware proporciona soporte arquitectónico que facilita la creación de un monitor de máquina virtual y permite que los sistemas operativos invitados se ejecuten de forma aislada. [19] La virtualización asistida por hardware se introdujo por primera vez en IBM System/370 en 1972, para su uso con VM/370 , el primer sistema operativo de máquina virtual ofrecido por IBM como producto oficial. [20]

En 2005 y 2006, Intel y AMD proporcionaron hardware adicional para soportar la virtualización. Sun Microsystems (ahora Oracle Corporation ) añadió características similares en sus procesadores UltraSPARC T-Series en 2005. Ejemplos de plataformas de virtualización adaptadas a dicho hardware incluyen KVM , VMware Workstation , VMware Fusion , Hyper-V , Windows Virtual PC , Xen , Parallels Desktop para Mac , Oracle VM Server para SPARC , VirtualBox y Parallels Workstation .

En 2006, se descubrió que el soporte de hardware x86 de 32 y 64 bits de primera generación rara vez ofrecía ventajas de rendimiento sobre la virtualización de software. [21]

Virtualización a nivel de sistema operativo

En la virtualización a nivel de sistema operativo, un servidor físico se virtualiza a nivel de sistema operativo, lo que permite que varios servidores virtualizados aislados y seguros se ejecuten en un único servidor físico. Los entornos de sistemas operativos "invitados" comparten la misma instancia en ejecución del sistema operativo que el sistema host. Por lo tanto, el mismo núcleo del sistema operativo también se utiliza para implementar los entornos "invitados", y las aplicaciones que se ejecutan en un entorno "invitado" determinado lo ven como un sistema independiente. La implementación pionera fueron las cárceles de FreeBSD ; otros ejemplos incluyen Docker , Solaris Containers , OpenVZ , Linux-VServer , LXC , AIX Workload Partitions , Parallels Virtuozzo Containers y iCore Virtual Accounts .

Ver también

Referencias

  1. ^ Popek, Gerald J .; Goldberg, Robert P. (1974). "Requisitos formales para arquitecturas virtualizables de tercera generación" (PDF) . Comunicaciones de la ACM . 17 (7): 412–421. doi :10.1145/361011.361073. S2CID  12680060.
  2. ^ ab Smith, James E.; Nair, Ravi (2005). "La arquitectura de las máquinas virtuales". Computadora . 38 (5): 32–38, 395–396. doi :10.1109/MC.2005.173. S2CID  6578280.
  3. ^ Oliphant, Patricio. "Maquinas virtuales". Computación virtual. Archivado desde el original el 29 de julio de 2016 . Consultado el 23 de septiembre de 2015 . Algunas personas usan esa capacidad para configurar una máquina virtual separada que ejecuta Windows en una Mac, lo que les brinda acceso a la gama completa de aplicaciones disponibles para ambas plataformas.
  4. ^ "Reinicios de servidor súper rápidos: otra razón por la que la virtualización es genial". vmwarez.com . 2006-05-09. Archivado desde el original el 14 de junio de 2006 . Consultado el 14 de junio de 2013 .
  5. ^ "Consolidación y contención de servidores con infraestructura virtual" (PDF) . VMware . 2007. Archivado (PDF) desde el original el 28 de diciembre de 2013 . Consultado el 29 de septiembre de 2015 .
  6. ^ Pugh, Emerson W. (1995). Construyendo IBM: dando forma a una industria y su tecnología . MIT. pag. 274.ISBN 978-0-262-16147-3.
  7. ^ Pugh, Emerson W .; et al. (1991). Sistemas 360 y principios de 370 de IBM . MIT. págs. 160-161. ISBN 978-0-262-16123-7.
  8. ^ Wirth, Niklaus Emil ; Weber, Helmut (1966). EULER: una generalización de ALGOL y su definición formal: Parte II, Comunicaciones de la Asociación de Maquinaria de Computación. vol. 9. Nueva York: ACM . págs. 89–99.
  9. ^ Griswold, Ralph E. La implementación macro de SNOBOL4 . San Francisco, CA: WH Freeman and Company, 1972 ( ISBN 0-7167-0447-1 ), Capítulo 1. 
  10. ^ Nelson, Graham A. "Acerca de los intérpretes". Informar sitio web . Archivado desde el original el 3 de diciembre de 2009 . Consultado el 7 de noviembre de 2009 .
  11. ^ Goldberg, Adela ; Robson, David (1983). Smalltalk-80: el lenguaje y su implementación . Serie Addison-Wesley en Ciencias de la Computación. Addison-Wesley . ISBN 978-0-201-11371-6.
  12. ^ Alemán, L. Peter ; Schiffman, Allan M. (1984). "Implementación eficiente del sistema Smalltalk-80". POPL . Salt Lake City, Utah: ACM. doi :10.1145/800017.800542. ISBN 0-89791-125-3.
  13. ^ Aycock, John (2003). "Una breve historia del justo a tiempo". Computación ACM. Sobrevivir. 35 (2): 97-113. doi :10.1145/857076.857077. S2CID  15345671.
  14. ^ Ingalls Jr., Daniel "Dan" Henry Holmes ; Kaehler, Ted; Maloney, Juan; Wallace, Scott; Kay, Alan Curtis (1997). "Regreso al futuro: la historia de Squeak, un Smalltalk práctico escrito en sí mismo". OOPSLA '97: Actas de la 12ª conferencia ACM SIGPLAN sobre programación, sistemas, lenguajes y aplicaciones orientados a objetos . Nueva York, NY, Estados Unidos: ACM Press. págs. 318–326. doi :10.1145/263698.263754. ISBN 0-89791-908-4.
  15. ^ Bracha, Gilad ; Griswold, David (1993). "Strongtalk: verificación de tipos de Smalltalk en un entorno de producción". Actas de la octava conferencia anual sobre sistemas, lenguajes y aplicaciones de programación orientada a objetos . OOPSLA '93. Nueva York, NY, Estados Unidos: ACM. págs. 215-230. doi : 10.1145/165854.165893 . ISBN 978-0-89791-587-8.
  16. ^ Ungar, David Michael ; Smith, Randall B. (diciembre de 1987). "Yo: El poder de la simplicidad". Avisos ACM SIGPLAN . 22 (12): 227–242. doi :10.1145/38807.38828. ISSN  0362-1340.
  17. ^ Hölzle, Urs ; Ungar, David Michael (1994). "Optimización de llamadas enviadas dinámicamente con comentarios de tipo en tiempo de ejecución". PLDI . Orlando, Florida, Estados Unidos: ACM. págs. 326–336. doi :10.1145/178243.178478. ISBN 0-89791-662-X.
  18. ^ Paleczny, Michael; Vick, Cristóbal; Haga clic, acantilado (2001). "El compilador del servidor Java HotSpot". Actas del Simposio de investigación y tecnología de máquinas virtuales Java sobre el Simposio de investigación y tecnología de máquinas virtuales Java . vol. 1. Monterey, California: Asociación USENIX.
  19. ^ Uhlig, rico; Neiger, Gil; Rodgers, Dion; Santoni, Amy L.; Martíns, Fernando CM; Anderson, Andrés V.; Bennett, Steven M .; Kägi, Alain; Leung, Félix H.; Smith, Larry (mayo de 2005). "Tecnología de virtualización de Intel". Computadora . 38 (5): 48–56. doi :10.1109/MC.2005.163. S2CID  18514555.
  20. ^ Randal, A. (2019). Lo ideal versus lo real: revisando la historia de las máquinas y contenedores virtuales.
  21. ^ Adams, Keith; Agesen, Ole (21 de octubre de 2006). Una comparación de técnicas de software y hardware para la virtualización x86 (PDF) . ASPLOS'06 21 a 25 de octubre de 2006. San José, California, Estados Unidos. Archivado (PDF) desde el original el 20 de agosto de 2010. Sorprendentemente, encontramos que el soporte de hardware de primera generación rara vez ofrece ventajas de rendimiento sobre las técnicas de software existentes. Atribuimos esta situación a los altos costos de transición de VMM/guest y a un modelo de programación rígido que deja poco espacio para la flexibilidad del software en la gestión de la frecuencia o el costo de estas transiciones.

Otras lecturas

enlaces externos