Вы находитесь на странице: 1из 7

Máquinas Virtuales

Universidad Nacional Autónoma de México


Facultad de Ingeniería

Todo lo que siempre quiso saber so-


bre Máquinas Virtuales pero nunca
se atrevió a preguntar

Estructura y Programación de Computadoras.


Profesora Gloria Ramírez R.

uye
Incl ión
en
n vers
CD
co DF!
m a to P
for

Héctor Zárate Rea


Máquinas Virtuales

Índice

Introducción 3

Definición 3

Java Virtual Machine 3

Instrucciones Básicas 4

Common Language Infrastructure 5

Conclusiones 6

Bibliografía 7

Héctor Zárate - Máquinas Virtuales 2


Máquinas Virtuales

Introducción
Basado en el temario de la asignatura, y apegándose a los puntos que este mismo sugiere, este
trabajo aborda el tema de Máquinas Virtuales.

No es un trabajo lleno de oscuras menciones técnicas producto del copy-paste, tampoco intenta
develar los misterios más entrañables de las maquinas virtuales, pero sí tiene el propósito de ex-
poner el concepto de una forma clara.

Definición
Una máquina virtual es simplemente una computadora abstracta, una computadora o máquina
emulada a partir de software. Una idea para nada nueva y cuyo término acuño IBM en 1959.

Existen varios tipos de ellas, con ciertas diferencias entre si, pero a grandes rasgos todas son muy
parecidas al siguiente diagrama:

Más software

Software (Máquina Virtual)

Hardware

Una máquina virtual es como una capa intermedia entre el hardware de la computadora y algún
software y puede encargarse de funciones como traducir instrucciones o simular el funcionamien-
to de una computadora específica.

Hay desde las más complejas que emulan una computadora en su totalidad (Incluyendo tarjetas
de video, discos duros, etc.), hasta otras más sencillas y especializadas que brindan solo una ca-
pa de abstracción entre plataformas de hardware y software muy específico. En este trabajo anali-
zaremos dos de las maquinas virtuales más populares.

Java Virtual Machine


Bien, tenemos ya una idea general de lo que es una maquina virtual. Ahora revisemos una de las
máquinas virtuales más empleadas y populares: Java Virtual Machine.

Java Virtual Machine es, sin duda, la parte nuclear del lenguaje de programa-
ción Java. De hecho, es imposible correr una aplicación en Java sin algún
tipo de Maquina Virtual de Java de por medio.

Al ejecutar algún programa en este lenguaje, las instrucciones de este no


son ejecutadas directamente por el procesador ni por el hardware de la
computadora. Son ejecutadas por un software (Sí, una máquina virtual)
que las interpreta y lleva a cabo una acción sobre el hardware a partir
de estas.

De cierta manera, un programa en Java no es ejecutado por el proce-


sador de la computadora, sino que es ejecutado por un procesador
‘virtual’.

Y es precisamente esto lo que dota al lenguaje Java de su virtud más


grande: Portatilidad.

La portatilidad es la capacidad de un software de compilarse o eje-


cutarse en varios ambientes (Sistemas Operativos) sin necesidad de
modificaciones sustantivas en su código.

Héctor Zárate - Máquinas Virtuales 3


Máquinas Virtuales

Al tener una aplicación hecha en Java es posible ejecutarla en cualquier computadora que cuente
con una maquina virtual de Java, sin importar si es una computadora personal con Windows, Mac
OS (Yey!) o FreeBSD, un teléfono con una curiosa distribución de Linux, la computadora de un
avión o hasta el mismo Mars Rover que justo ahora esta en Marte fotografiando marcianos 1. Y si
requerimos ejecutar la aplicación en otra plataforma (Donde no haya una maquina virtual de Java
aún) no tenemos que re-escribir la aplicación, sino simplemente, escribir una nueva maquina vir-
tual que brindará compatibilidad entre la nueva plataforma y cualquier aplicación hecha en Java.

Instrucciones Básicas
Los procesadores virtuales de las maquinas virtuales hacen uso de instrucciones muy primitivas al
igual que un procesador de verdad, esto incluye instrucciones para operaciones aritméticas, con-
trol de flujo, etc.

Haré algunas comparaciones de instrucciones de un procesador 80x86 con su equivalente en el


procesador de la Maquina Virtual de Java.

El siguiente ejemplo guarda un número entero (El número 10) en un registro para un procesador
80x86:

mov AX, 10 ; mover 10 al registro AX

Su equivalente en Java:

bipush 10 ; mover 10 al stack


istore_1 ; guardar el 10 del stack en la variable local 1

Un segundo ejemplo: Vamos a guardar dos números, el 5 y el 10, y después sumarlos. :P La ver-
sión para el famosísimo 80x86:

mov AX, 5 ; Guardar el 5 en AX


mov BX, 10 ; Guardar el 10 en BX
add AX, BX ; Sumar!

La versión para Java:

bipush 5 ; mover 5 al stack


bipush 10 ; mover 10 al stack
iadd ; sumar los dos últimos registros del stack

istore_1 ; sacar el registro del stack y guardarlo en la va-


riable 1

Como es evidente, el procesador de la Maquina Virtual de Java utiliza un stack y variables nume-
radas en lugar de registros. Sin embargo, el funcionamiento es muy parecido al de un procesador
común y corriente (Léase 80x86).

1Bien, aún no hay declaraciones oficiales sobre los marcianos, pero sí muchas fotografías que fue-
ron obtenidas gracias a la utilización de tecnologías de Java.
Java Everywehere in action. Java. 2004.

Héctor Zárate - Máquinas Virtuales 4


Máquinas Virtuales

Me limitaré a mencionar estos dos ejemplos en lugar de insertar una tabla llena de instrucciones
las cuales pueden ser revisadas con detenimiento en cualquier libro que cubra el tema2.

Common Language Infrastructure


Common Languaje Intrastructure es un estándar hecho para lograr que software programado en
distintos lenguajes pueda ser ejecutado en distintos ambientes. Fue creado por la Asociación eu-
ropea ECMA (European Computer Manufacturers Association) y la última publicación del estándar,
la 4ta. edición, puede ser revisada en el sitio de la asociación. 3

Revisemos como funciona en la implementación realizada por Microsoft para su plataforma .NET
(Yep, se trata de otra máquina virtual muy parecida a la de Java):

Inicialmente, un compilador convierte el código fuente


escrito en C#, Visual Basic, ASP Script, o cualquier len-
guaje del estándar, en una especie de código ejecutable Visual Basic, C# u otros
llamado MSIL (Microsoft’s Intermediate Language). Esta
es una característica única que brinda independencia
sobre el lenguaje en que el desarrollador trabaja. Ya que MSIL
cada lenguaje se traduce a MSIL, el usuario que utilice la
aplicación necesita de una sola máquina virtual: La
Common Lenguage Runtime (CLR) y se evita así el pro-
blema de tener un runtime diferente para cada lenguaje. EXE

Al iniciar el programa, ese código MSIL es compilado por


la CLR a un código de bajo nivel correspondiente a la
Voila!
arquitectura de la computadora y finalmente es ejecuta-
do. Este último paso es otra diferencia importante entre la
Maquina Virtual de Java y CLR. En Java, la aplicación es
interpretada línea por línea a medida que es necesario, mientras que la CLR compila todo el pro-
grama antes de ejecutarse.

Y así finalmente, tenemos un estándar que nos permite desarrollar aplicaciones en distintos len-
guajes (Cross-language también) y que nos permite llevarlos a distintas plataformas solucionando
sin muchos de los problemas que esto representaba.

Common a
L ng ua ge Ru n time
A todos aquellos del fas- cada lenguaje, porque ya
cinante oficio de las esta aquí venida de Europa,
computadoras; diseña- la plataforma unificadora
dores, analistas y pro- repleta de ventajas para
gramadores de sistemas. desarrolladores y usuarios
Olvídense del interminable finales!
conjunto de runtimes para

2Para Java, la guía más importante probablemente sea: The Java Virtual Machine Specification,
Second Edition, editado por Sun. http://java.sun.com/docs/books/jvms/

3 http://www.ecma-international.org/publications/standards/Ecma-335.htm

Héctor Zárate - Máquinas Virtuales 5


Máquinas Virtuales

Conclusiones El
que el CLI sea una especi-
Actualmente hay muchos proyectos implementan-
ficación pública ha permitido que
do el estándar ECMA-335, entre los que destacan
implementaciones hechas por terceros
Mono y la implementación de Microsoft que fue
puedan ser construidas sin problema alguno,
la que ya revisamos. como es el caso de la plataforma de desarro-
llo Mono. Que ha permitido que aplicaciones
Al respecto y en exclusiva, César Natarén,
escritas para el sistema operativo creado por
quien es un importante desarrollador en el pro-
la compañía de Redmond se puedan utilizar en el
yecto Mono4, nos brinda una
sistema operativo Linux y otros sistemas
comentario experto5 acer- operativos libres ademas de una gran
ca del estándar CLI. variedad de arquitecturas de compu-
tadoras.

La utilización de máquinas
virtuales implica muchas
ventajas como la capacidad
de escribir una sola aplica-
ción en distintos lenguajes sin
necesidad de preocuparse por las
interfaces entre estos o la más importante que seguramente es la portatilidad.

Pero bien, si las máquinas virtuales son una maravilla, ¿porqué no son utilizadas siempre? A cam-
bio de estas ventajas, las aplicaciones son un poco más lentas debido a la capa intermedia de
abstracción, pero la comparación es semejante a lo que pasó entre el ensamblador y los lenguajes
de alto nivel: No cabe duda que un programa escrito en ensamblador será mas eficiente, pero las
ventajas que tendría hacer lo mismo en un lenguaje de alto nivel son innumerables.

4César López Natarén is mainly, the man behind the JavaScript compiler for the Mono project.
www.mono-project.com

5 Desde su centro de operaciones a la 1:30 del Miércoles 6 de Junio de 2007.

Héctor Zárate - Máquinas Virtuales 6


Máquinas Virtuales

Bibliografía
MEYER, Jon. JAVA Virtual Machine, O’Reilly, USA, 1997.

ENGEL, Joshua. Programming for the Java Virtual Machine, Addison-Wesley, USA, 1999.

WHITTINGTON, Jason. Shared Source CLI Provides Source Code for a FreeBSD Implementa-
tion of .NET, MSDN Magazine, Julio de 2002.

Héctor Zárate - Máquinas Virtuales 7

Вам также может понравиться