Virtualización de aplicaciones , pasado y futuro

Una introducción a la virtualización de aplicaciones

Hoy, cuando usted oye la frase máquina virtual , probablemente piense en virtualización e hipervisores. Pero las VMs son simplemente un antiguo concepto de abstracción, un método común de abstraer una entidad de otra. Este artículo explora dos de las muchas tecnologías recientes de VM de fuente abierta: Dalvik (la VM central del sistema operativo Android) y Parrot (una tecnología de VM de fuente abierta para ejecutar eficientemente lenguajes dinámicos).

M. Tim Jones, Platform Architect, Intel

author photo - M. Tim JonesM. Tim Jones es arquitecto de firmware integrado y el autor de Artificial Intelligence: A Systems Approach GNU/Linux Application Programming (ahora en su segunda edición), AI Application Programming (en su segunda edición) y de BSD Sockets Programming from a Multilanguage Perspective. Su experiencia en ingeniería va desde el desarrollo de kernels para vehículos espaciales geo-sincronizados hasta arquitectura de sistemas incorporados y desarrollo de protocolos de redes. Tim trabaja en Intel y vive en Longmont, Colorado.



29-07-2011

Conéctese con Tim

Tim es uno de nuestros más populares y prolíficos autores. Navegue todos los artículos de Tim en developerWorks. Visite el perfil de Tim y conéctese con él, con otros autores y con colegas desarrolladores en la Comunidad developerWorks.

Virtualización de plataforma vs. virtualización de aplicación

Las máquinas virtuales (VMs), en su primera encarnación, fueron creadas por IBM hace 60 años como una forma para compartir sistemas principales grandes y costosos. Y aunque el concepto todavía se aplica en los sistemas IBM actuales, el concepto popular de una VM se ha ampliado y se ha aplicado a numerosas áreas que están por fuera de la virtualización.

Origen de la máquina virtual

El primer sistema operativo en soportar virtualización completa para VMs fue el Conversational Monitor System (CMS). El CMS soportaba tanto virtualización como para-virtualización. A comienzos de los años 1970, IBM introdujo la familia VM de sistemas, que ejecutaba múltiples sistemas operativos de usuario individual, sobre su VM Control Program—un hipervisor temprano tipo-1.

El área de la virtualización que IBM popularizó en los años 1960 se conoce como virtualización de plataforma (o sistema) . En esta forma de virtualización, la plataforma de hardware subyacente es virtualizada para ser compartida con cierto número de sistemas operativos y usuarios diferentes.

Otra aplicación de la VM es ofrecer la propiedad de independencia de máquina. Esta forma, llamada virtualización de aplicación (o proceso) , crea un entorno abstracto (para una aplicación), haciéndolo independiente del entorno físico.


Aspectos de las máquinas virtuales de aplicaciones

En el espacio de virtualización de aplicaciones, las VMs se utilizan para proporcionar un entorno independiente del hardware para la ejecución de aplicaciones. Por ejemplo, considere la Figura 1. En la parte superior está el lenguaje de alto nivel, que los desarrolladores usan para construir aplicaciones. Mediante un proceso de compilación, este código de alto nivel se compila en una representación intermedia llamada código objeto. En un entorno no virtualizado, este código objeto (que es independiente de la máquina) se compila en el código de la máquina nativa para ser ejecutado en la plataforma física. Pero en un entorno de virtualización de aplicación, el código objeto se interpreta dentro de una máquina abstracta para proporcionar la ejecución. La ventaja clave aquí es que el mismo código objeto puede ejecutarse en cualquier plataforma de hardware que soporte la máquina abstracta (el intérprete)).

Figura 1. VM de aplicación para independencia de plataforma
VM de aplicación para independencia de plataforma

Además de crear un entorno portátil en el cual ejecutar el código objeto, la virtualización de aplicación proporciona un entorno en el cual aislar la VM de otras aplicaciones que se estén ejecutando en el host. Esta configuración tiene numerosas ventajas, como una administración detallada de recursos y seguridad.

El código objeto de una VM también es llamado bytecode , definiendo específicamente un conjunto de instrucciones que ejecuta un intérprete. El término bytecode evolucionó desde implementaciones que implementaban eficientemente sus conjuntos de instrucciones virtuales como bytes individuales para simplicidad y desempeño.

Ahora, vamos a ver algunos de los usos históricos de la virtualización de aplicación y a explorar algunos de sus usos modernos.


Historia de la máquina virtual

Uno de los primeros usos de la virtualización de aplicación ocurrió en los años 1960, para el Basic Combined Programming Language (BCPL). El BCPL era un lenguaje imperativo desarrollado por Martin Richards en la Universidad de Cambridge y fue un precursor del lenguaje B que luego evolucionó hasta el lenguaje C que usamos hoy.

El BCPL, antes y ahora

Aunque el BCPL se originó en 1966, todavía está bajo un activo desarrollo actualmente por su creador, Martin Richards. El primer compilador del BCPL se escribió para el sistema IBM 7094 bajo el Compatible Time Sharing System, uno de los primeros sistemas operativos desarrollados de tiempo compartido. Actualmente, usted puede usar el BCPL en una variedad de sistemas, incluyendo Linux.

Aunque el BCPL tiene un lenguaje de alto nivel (similar a C), el código intermedio que generaba el compilador se llamó O-code (código objeto). El O-code podía ser interpretado en una máquina física (como una VM) o compilado a partir de O-code para el lenguaje de máquina nativa del host. Esta funcionalidad proporcionó numerosas ventajas en el contexto de independencia de máquina. Primero, al abstraer el O-code de la máquina física, este podía ser fácilmente interpretado por una variedad de hosts. Y segundo, el O-code podía ser compilado para la máquina nativa, lo cual permitía el desarrollo de un compilador y múltiples compiladores que traducen el O-code a instrucciones de máquina nativa (una tarea más simple). Esta independencia de máquina hizo que el lenguaje fuera portátil entre máquinas y por lo tanto popular debido a su disponibilidad.

A comienzos de los años 1970, la Universidad de California en San Diego, implementó el enfoque de VM para la ejecución de Pascal compilado. Llamaron a la representación intermedia p-code, el cual buscó la independencia del hardware subyacente para simplificar el desarrollo del compilador Pascal (en lugar de depender de una arquitectura abstracta de pseudo-máquina). El lenguaje Forth también aplicó VMs, concretamente, a arquitecturas de dirección-cero o basadas en apilamientos.

En 1972, Xerox PARC introdujo el lenguaje Smalltalkque dependía de una VM para ejecutarse. Smalltalk fue uno de los primeros lenguajes construidos alrededor del concepto de objetos. Tanto Smalltalk como p-code influenciaron fuertemente uno de los lenguajes basa dos en VM más prominentes que existe actualmente: el lenguaje Java. Java apareció por primera vez en 1995, desarrollado por Sun Microsystems, y desarrolló la idea de una programación independiente de la plataforma, mediante la Java Virtual Machine. Desde entonces, la tecnología Java se ha convertido en un bloque de construcción de las aplicaciones Web. Desde los scripts del lado del servidor hasta los applets del lado del cliente, la tecnología Java incrementó el conocimiento sobre las tecnologías de VM e introdujo tecnologías más nuevas que conectaron la interpretación y la ejecución nativa, usando técnicas de compilación justo-a-tiempo (JIT).

Muchos otros lenguajes introdujeron el concepto de VMs. El lenguaje Erlang (desarrollado por Ericsson) usa una VM para ejecutar códigos de bytes Erlang y también para interpretar Erlang del árbol abstracto de sintaxis de la fuente. El lenguaje liviano Lua (desarrollado por la Pontificia Universidad Católica de Río de Janeiro, en Brasil) incluye una VM basada en el registro. Cuando se ejecuta un programa Lua, este se traduce en códigos de bytes y luego se ejecuta en la VM. Más adelante, este artículo observa un código de bytes estándar que puede utilizarse para cualquier lenguaje.


Las máquinas virtuales hoy

El uso de las VMs para proporcionar una abstracción al host físico es un método común históricamente y hoy evoluciona y encuentra aplicación. Observemos algunas de las soluciones de fuente abierta más recientes que presionan el concepto de VMs hacia el futuro.

Dalvik VM

Dalvik es una tecnología de VM de fuente abierta desarrollada por Google para el sistema operativo Android. Android es un kernel Linux modificado que incorpora una pila de software para dispositivos móviles (Figura 2). A diferencia de muchas tecnologías de VM que dependen de arquitecturas basadas en apilamientos, la Dalvik VM es una arquitectura virtual basada en registro (vea Recursos para más información sobre la arquitectura y el conjunto de instrucciones). Aunque las arquitecturas basadas en apilamientos son conceptualmente simples y eficientes, pueden introducir nuevas ineficiencias, como tamaños de programa más grandes (debido al mantenimiento del apilamiento).

Figura 2. Arquitectura simple de un apilamiento de software Dalvik
Arquitectura simple de un apilamiento de software Dalvik

Como Dalvik es la arquitectura de VM, descansa en un lenguaje de alto nivel compilado en códigos de bytes que la VM entiende. En lugar de reinventar la rueda, Dalvik depende del lenguaje Java como el lenguaje de alto nivel para el desarrollo de aplicaciones. Dalvik también depende de una herramienta especial llamada dx para convertir archivos de clase Java en ejecutables de VM Dalvik. Para desempeño, la VM puede también modificar el ejecutable Dalvik (dex) para optimizaciones adicionales, incluyendo compilación JIT, que traduce las instrucciones dex en instrucciones nativas para desempeño nativo. Este proceso también es conocido como traducción dinámica y es una técnica popular para aumentar el desempeño de las tecnologías de VM.

Como se muestra en la Figura 2, un ejecutable Dalvik (junto con una instancia de la VM) es aislado como un proceso individual en el espacio de usuario Linux. La VM Dalvik ha sido diseñada para soportar la ejecución de múltiples VMs (en procesos independientes) simultáneamente.

La VM Dalvik no está implementada en el tiempo de ejecución del estándar Java y por lo tanto, no hereda las licencias sobre este. En lugar de ello, Dalvik es una implementación limpia publicada bajo licencia de Apache 2.0.

Parrot

Otro interesante proyecto de VM de fuente abierta es Parrot. Parrot es otra tecnología de VM basada en registro diseñada para ejecutar eficientemente lenguajes dinámicos (lenguajes que realizan ciertas operaciones en el momento de ejecución, que normalmente se ejecutan en el momento de la compilación, como alterar el sistema de tipo).

Parrot fue diseñada originalmente como un tiempo de ejecución para Perl6, pero es un entorno flexible para la ejecución de códigos de bytes para muchos lenguajes (vea la Figura 3). Parrot soporta varios formularios de ingreso de información, como Parrot Abstract Syntax Tree (PAST), que es útil para los escritores de compilador; el Parrot Intermediate Representation (PIR), que es una representación de alto nivel que puede ser escrita por personas o automáticamente por compiladores; y el Parrot Assembly (PASM), que está por debajo de la representación intermedia pero que es útil tanto para personas como para compiladores. Cada formulario se traduce y ejecuta en código de byte Parrot en la VM Parrot.

Figura 3. Arquitectura simple de la VM Parrot
Arquitectura simple de la VM Parrot

Parrot soporta un gran número de lenguajes, pero un aspecto que la hace tan interesante es su soporte tanto de lenguaje dinámico como de lenguaje estático, incluyendo soporte específico para lenguajes funcionales. El Listado 1 muestra un uso simple de PASM. Para instalar Parrot con Ubuntu, simplemente use apt-get:

sudo apt-get install parrot

La siguiente sesión ilustra un programa simple de manipulación de cadena de caracteres en Parrot. Note que aunque Parrot implementa este código como un conjunto, es mucho más rico en atributos que el conjunto al que usted puede estar acostumbrado(a). Las instrucciones en Parrot usan la sintaxis dest,src , de manera que el Listado 1 muestra una cadena de caracteres siendo cargada con texto. La instrucción length determina la longitud de la cadena de caracteres y la carga en un registro entero. La instrucción print emite el argumento para una salida estándar (stdout), y concat implementa la concatenación de cadena de caracteres.

Listado 1. Ejemplo PASM
$ more test.pasm
set	S1, "Parrot"
set	S2, "VM"
length	I1, S1
print	I1
print	"\n"

concat	S3, S1, S2
print	S3
print	"\n"

end

$ parrot test.pasm
6
ParrotVM
$

Usted encontrará un rico conjunto de instrucciones dentro de Parrot (vea Recursos para más detalles). Los autores optaron por riqueza de recursos sobre minimalismo, facilitando la codificación y construcción de compiladores para Parrot VM.

Incluso con el alto nivel de abstracción que proporciona el PASM, el PIR es incluso más confortable para programadores de alto nivel. El Listado 2 proporciona un programa de ejemplo escrito en PIR y ejecutado por la VM Parrot. Este ejemplo declara una sub-rutina llamada square que eleva el número al cuadrado y lo retorna. Este proceso es llamado por la sub-rutina principal (etiquetada con :main para decirle a Parrot que lo ejecute primero) para imprimir el resultado.

Listado 2. Ejemplo de PIR
$ more test.pir
.sub square
  .param int arg
  arg *= arg
  .return(arg)
.end

.sub main :main
  .local int value
  value = square(19)
  print value
  print "\n"
.end
$ parrot test.pir
361
$

Parrot proporciona un rico entorno de virtualización de aplicación, para el desarrollo de aplicaciones independientes del tipo de máquina que también busquen alta eficiencia. Usted puede encontrar un gran número de lenguajes que soporten primeros planos de compilador diseñados para Parrot, incluyendo C, Lua, Python, Scheme, Smalltalk, y muchos otros.


Otros usos de las máquinas virtuales de aplicación

Hasta ahora, usted ha visto los usos históricos de la virtualización de aplicaciones, incluyendo dos ejemplos presentes. Dalvik está potenciando el desarrollo de aplicaciones con las terminales actuales, y Parrot proporciona una infraestructura eficiente para escritores de compilador, para lenguajes estáticos y dinámicos. Pero el concepto de virtualización de aplicación está siendo implementado en otras numerosas áreas externas al enfoque que hemos explorado hasta ahora.

Un uso particularmente interesante es similar probablemente se está ejecutando en la computadora que usted está usando en este momento. Los sistemas que utilizan la interfaz Extensible Firmware Interface (EFI), que es un reemplazo de la BIOS, pueden implementar controladores de firmware en lo que se conoce como el EFI Byte Code (EBC). El firmware de sistemas incluye un intérprete que es invocado cuando se carga una imagen EBC. Este concepto también está implementado en Open Firmware de Sun Microsystems usando Forth (un lenguaje que incluye su propia VM).

En el mundo de los juegos, el uso de virtualización de aplicaciones no es nuevo. Muchos juegos modernos incluyen scripting de comportamiento de personajes que no son jugadores y de otros aspectos del juego, usando lenguajes que ejecutan códigos de bytes (como Lua). Pero el concepto de virtualización de aplicaciones en los juegos en realidad va mucho más atrás.

Infocom, la compañía que introdujo las aventuras basadas en texto como Zork, vio el valor de la independencia del tipo de máquina en 1979. Infocom creó una VM llamada la Z-machine (nombrada en honor a Zork). La Z-machine fue una VM que permitió llevar un juego de aventura más fácilmente a otras arquitecturas. En lugar de tener que llevar toda la aventura al nuevo sistema, se podía llevar un intérprete que representaba a la Z-machine. Esta funcionalidad simplificó el proceso de transporte hacia otros sistemas que podían tener un soporte de lenguaje diferente y arquitecturas de máquina totalmente diferentes. Aunque la meta de Infocom era facilitar el transporte entre las arquitecturas de su época, su trabajo continúa simplificando el transporte y da como resultado que estos juegos son accesibles a una nueva generación (incluso en plataformas móviles).

Otras aplicaciones en juegos de las VM incluyen la ScummVM (que proporciona un entorno de VM para la Script Creation Utility para el lenguaje de scripting Maniac Mansion (SCUMM) (creado en 1987). SCUMM fue desarrollado por LucasArts para simplificar el desarrollo de juegos de aventuras gráficas. ScummVM se utiliza ahora en un gran número de juegos de aventura gráficos y de texto, en una variedad de plataformas.


Avanzando

Así como la virtualización de plataforma (o sistema) ha cambiado la forma en la que aprovisionamos y administramos tanto servidores como PCs de escritorio, la virtualización de aplicaciones continúa proporcionando mecanismos eficientes para abstraer una aplicación de su sistema host. Dada la popularidad de este enfoque, será interesante ver una evolución del software y del hardware para hacer aún más flexible y eficiente la virtualización de aplicaciones.

Recursos

Aprender

Obtener los productos y tecnologías

  • Dalvik es el entorno VM para el sistema operativo Android. Dalvik fue desarrollado por Dan Bornstein y actualmente Google lo mantiene como parte de Android. Aprenda más sobre la máquina Dalvik mediante sus códigos de bytes (disponible en la documentación para el usuario). También puede aprender más sobre Dalvik en Introduction to Android development (Frank Ableson, developerWorks, mayo de 2009).
  • Parrot es una VM diseñada para ejecutar lenguajes estáticos y dinámicos mediante una variedad de representaciones intermedias sobre código de bytes Parrot. Parrot está disponible como una fuente abierta y puede utilizarse con numerosos lenguajes. Para aprender más sobre el conjunto de instrucciones Parrot, consulte los opcodes disponibles dentro de él.
  • Las VMs de aplicaciones son populares en el mundo de los desarrolladores de juegos. Uno de los primeros usos lo hizo Infocom en sus juegos de aventura en texto (como Zork). Usted puede aprender más sobre la VM de Infocom llamada Z-machine, así como sobre los intérpretes que existen para diferentes plataformas. Otra aplicación de las VMs fue el SCUMM, usado por LucasArts en aventuras gráficas. SCUMM ha sido implementada como fuente abierta como ScummVM y está reviviendo juegos antiguos sobre nuevo hardware.
  • Evalúe productos de IBM de la forma que mejor se ajuste a usted: Descargue una prueba de producto, ensaye un producto en línea, use un producto en un entorno en nube, o pase algunas horas en el SOA Sandbox aprendiendo a implementar la Arquitectura Orientada a Servicios con eficiencia.

Comentar

  • Participe en la Comunidad My developerWorks. Conéctese con otros usuarios developerWorks mientras explora los blogs, foros, grupos y wikis dirigidos a desarrolladores.

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Linux
ArticleID=680710
ArticleTitle=Virtualización de aplicaciones , pasado y futuro
publish-date=07292011