De Wikipedia, la enciclopedia libre
Saltar a navegación Saltar a búsqueda

En informática, una máquina virtual ( VM ) es la virtualización / 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, software o una combinación de ellos.

Las máquinas virtuales difieren y están organizadas por su función, que se muestra aquí:

  • Las máquinas virtuales del sistema (también denominadasmáquinas virtuales de virtualización completa ) proporcionan un sustituto de una máquina real. Proporcionan la funcionalidad necesaria para ejecutar sistemas operativos completos . Un hipervisor utiliza la ejecución nativa para compartir y administrar hardware, lo que permite múltiples entornos que están aislados entre sí, pero que existen en la misma máquina física. Los hipervisores modernos utilizan virtualización asistida por hardware, hardware específico de virtualización, principalmente de las CPU del host.
  • Las máquinas virtuales de proceso están diseñadas para ejecutar programas informáticos en un entorno independiente de la plataforma.

Algunos emuladores de máquinas virtuales, como QEMU y emuladores de consolas de videojuegos , están diseñados para emular también (o "imitar virtualmente") diferentes arquitecturas de sistemas, lo que permite 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 [ editar ]

Máquinas virtuales del sistema [ editar ]

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 máquina virtual generalmente se conoce como el "host", y la máquina virtual emulada en esa máquina generalmente se conoce como el "invitado". Un host puede emular 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, 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ó. 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 para un solo usuario, 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 sobrecompromiso de memoria para administrar la memoria compartida entre múltiples máquinas virtuales en un sistema operativo de computadora. 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 mapearlas a la misma página física mediante una técnica denominada fusión de la misma página del kernel.(KSM). Esto es especialmente útil para páginas de solo lectura, como las que contienen segmentos de código, que es 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 para 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 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. [4]

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

Procesar máquinas virtuales [ editar ]

Una máquina virtual de proceso, a veces denominada máquina virtual de aplicación o entorno de tiempo de ejecución administrado (MRE), se ejecuta como una aplicación normal dentro de un sistema operativo host y admite un solo 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 abstrae los detalles del hardware o sistema operativo subyacente y permite que un programa se ejecute de la misma manera en cualquier plataforma.

Una máquina virtual 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 máquina virtual 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 requerida ]

Este tipo de máquina virtual se ha vuelto popular con 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.

Un caso especial de máquinas virtuales de proceso son los sistemas que abstraen los mecanismos de comunicación de un clúster de computadoras (potencialmente heterogéneo) . Dicha máquina virtual no consta de un solo 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 concurrentes al permitir que el programador se concentre en los 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 la comunicación tiene lugar y, como tales, no intentan presentar el clúster como una sola máquina. [ cita requerida ]

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 idiomas (por ejemplo, C y Fortran ). [ cita requerida ] Algunos ejemplos son la máquina virtual paralela (PVM) y la interfaz de paso de mensajes (MPI). No son estrictamente máquinas virtuales porque las aplicaciones que se ejecutan en la parte superior aún tienen acceso a todos los servicios del sistema operativo y, por lo tanto, no se limitan al modelo del sistema.

Historia [ editar ]

Tanto las máquinas virtuales de sistema como las máquinas virtuales de proceso datan de la década de 1960 y continúan 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 en ese momento, y el sistema cambiaba entre programas en intervalos de tiempo, guardando y restaurando el estado cada vez. Esto se convirtió 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 Historial de CP / CMS para obtener más detalles). Una distinción importante fue entre el uso de varias máquinas virtuales en un sistema host para compartir el tiempo, como en M44 / 44X y CP-40, y el uso de una máquina virtual en un sistema host para la creación de prototipos, como en SIMMON. Los emuladores , con emulación de hardware de sistemas anteriores para compatibilidad, se remontan al IBM System / 360 en 1963, [6] [7] mientras que la emulación de software (entonces llamada "simulación") es anterior.

Las máquinas virtuales de proceso surgieron originalmente como plataformas abstractas para un lenguaje intermedio utilizado como la representación intermedia de un programa por un compilador ; Los primeros ejemplos datan de alrededor de 1966. Un ejemplo de principios de 1966 fue la máquina de código O , una máquina virtual que ejecuta código O (código objeto) emitido por la interfaz del compilador BCPL . Esta abstracción permitió que el compilador se trasladara fácilmente a una nueva arquitectura mediante la implementación de un nuevo back-end que tomaba el código O existente y lo compilaba en código de máquina para la máquina física subyacente. El EulerEl lenguaje usó un diseño similar, con el lenguaje intermedio llamado 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 una máquina de código p . Esto ha sido influyente, y las máquinas virtuales en este sentido se han denominado a menudo 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, notablemente en UCSD Pascal (1978); Esto influyó en los intérpretes posteriores, en particularMáquina virtual Java (JVM). Otro ejemplo temprano fue SNOBOL4 (1967), que se escribió en SNOBOL Implementation Language (SIL), un lenguaje ensamblador para una máquina virtual, que luego se apuntó a las máquinas físicas mediante la transpilación a su ensamblador nativo a través de un ensamblador de macros . [9] Sin embargo, las macros han caído en desgracia, por lo que este enfoque ha sido menos influyente. Las máquinas virtuales de proceso eran un enfoque popular para la implementación de 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 , queGraham Nelson sostiene que 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 Just-In-Time (JIT) como un enfoque de implementación que utiliza la máquina virtual de proceso. [13] Más tarde, las VM más notables de Smalltalk fueron VisualWorks , Squeak Virtual Machine , [14] y Strongtalk . [15] Un lenguaje relacionado que produjo mucha innovación en las máquinas virtuales fue el lenguaje de programación Self , [16] que fue pionero en la optimización adaptativa [17]y recolección de basura generacional . Estas técnicas demostraron ser comercialmente exitosas en 1999 en la máquina virtual HotSpot Java. [18] Otras innovaciones incluyen tener una máquina virtual basada en registros, para que coincida mejor con el hardware subyacente, en lugar de una máquina virtual basada en pilas, que es una combinación más cercana al lenguaje de programación; en 1995, esto fue iniciado por la máquina virtual Dis para el lenguaje Limbo . OpenJ9 es una alternativa para HotSpot JVM en OpenJDK y es un proyecto de eclipse de código abierto que afirma un mejor inicio y un menor consumo de recursos en comparación con HotSpot.

Virtualización completa [ editar ]

Diagrama lógico de virtualización completa

En la virtualización completa, la máquina virtual simula suficiente hardware para permitir que un SO "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 Workstation , VMware Server (descontinuado, anteriormente llamado GSX Server), VMware ESXi , QEMU , Adeos , Mac-on-Linux, Win4BSD, Win4Lin Pro y tecnología Egenera vBlade.

Virtualización asistida por hardware [ editar ]

En la virtualización asistida por hardware, el hardware proporciona soporte arquitectónico que facilita la construcció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 respaldar la virtualización. Sun Microsystems (ahora Oracle Corporation ) agregó 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 [ editar ]

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 solo servidor físico. Los entornos del sistema operativo "invitado" comparten la misma instancia en ejecución del sistema operativo que el sistema host. Por lo tanto, el mismo kernel 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 Cuentas virtuales iCore .

Ver también [ editar ]

  • Imagen de la máquina de Amazon
  • Contenedores de Linux
  • Kit de desarrollo nativo
  • Paravirtualización
  • Hipervisor de almacenamiento
  • Máquina de Turing universal
  • Dispositivo virtual
  • Dispositivo de respaldo virtual
  • Imagen de disco virtual
  • Máquina virtual DOS (VDM)
  • Escape de la máquina virtual

Referencias [ editar ]

  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. ^ a b Smith, James E .; Nair, Ravi (2005). "La Arquitectura de Máquinas Virtuales" . Computadora . 38 (5): 32–38, 395–396. doi : 10.1109 / MC.2005.173 . S2CID 6578280 . 
  3. ^ Oliphant, Patrick. "Máquinas 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 ejecute Windows en una Mac, dándoles acceso a la gama completa de aplicaciones disponibles para ambas plataformas.
  4. ^ "Reinicios del servidor súper rápido: 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 Early 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 . 9 . Nueva York: ACM . págs. 89–99.
  9. ^ Griswold, Ralph E. La macro implementación 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 al sitio web . Archivado desde el original el 3 de diciembre de 2009 . Consultado el 7 de noviembre de 2009 .
  11. ^ Goldberg, Adele ; 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. ^ Deutsch, 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 just-in-time". Computación ACM. Surv. 35 (2): 97-113. doi : 10.1145 / 857076.857077 . S2CID 15345671 .  
  14. ^ Ingalls Jr., Daniel "Dan" Henry Holmes ; Kaehler, Ted; Maloney, John; 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 orientada a objetos, sistemas, lenguajes y aplicaciones . Nueva York, NY, EE.UU .: ACM Press. págs. 318–326. doi : 10.1145 / 263698.263754 . ISBN 0-89791-908-4.
  15. ^ Bracha, Gilad ; Griswold, David (1993). "Strongtalk: Typechecking 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, EE.UU .: 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 sencillez". 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, Christopher; Haga clic en Cliff (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 . 1 . Monterey, California: Asociación USENIX.
  19. ^ Uhlig, Rich; Neiger, Gil; Rodgers, Dion; Santoni, Amy L .; Martins, Fernando CM; Anderson, Andrew V .; Bennett, Steven M .; Kägi, Alain; Leung, Felix 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 frente a lo real: revisando la historia de las máquinas virtuales y los contenedores.
  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-25 de octubre de 2006. San José, California, EE. UU. 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 VMM / invitado y 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.

Lectura adicional [ editar ]

  • 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 las máquinas virtuales de proceso como las 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 [ editar ]

  • Mendel Rosenblum (31 de agosto de 2004). "La reencarnación de las máquinas virtuales" . Cola de ACM . Vol. 2 no. 5.
  • Sandia National Laboratories ejecuta 1 millón de kernels de Linux como máquinas virtuales
  • El diseño de la máquina virtual Inferno por Phil Winterbottom y Rob Pike