Академический Документы
Профессиональный Документы
Культура Документы
uye
Incl ión
en
n vers
CD
co DF!
m a to P
for
Índice
Introducción 3
Definición 3
Instrucciones Básicas 4
Conclusiones 6
Bibliografía 7
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
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 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 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.
El siguiente ejemplo guarda un número entero (El número 10) en un registro para un procesador
80x86:
Su equivalente en Java:
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:
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.
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.
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):
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
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
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.