máquinas virtuales

7
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. Héctor Zárate Rea Máquinas Virtuales Incluye CD con versión en formato PDF!

Upload: hector-zarate

Post on 06-Jun-2015

10.121 views

Category:

Documents


4 download

DESCRIPTION

Breve resúmen sobre máquinas virtuales.

TRANSCRIPT

Page 1: Máquinas Virtuales

Universidad Nacional Autónoma de MéxicoFacultad 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.

Héctor Zárate Rea

Máquinas Virtuales

Incluye

CD con versión en

formato PDF!

Page 2: 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

Máquinas Virtuales

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

Page 3: Máquinas Virtuales

IntroducciónBasado 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ónUna 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:

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 MachineBien, 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.

Hardware

Software (Máquina Virtual)

Más software

Máquinas Virtuales

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

Page 4: 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 marcianos1. 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ásicasLos 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).

Máquinas Virtuales

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

1 Bien, 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.

Page 5: 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 InfrastructureCommon 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 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 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.

Al iniciar el programa, ese código MSIL es compilado por la CLR a un código de bajo nivel correspondiente a la 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.

MSIL

Visual Basic, C# u otros

EXE

Voila!

Máquinas Virtuales

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

2 Para 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

A todos aquellos del fas-cinante oficio de las computadoras; diseña-dores, analistas y pro-gramadores de sistemas.

Olvídense del interminable conjunto de runtimes para

cada lenguaje, porque ya esta aquí venida de Europa, la plataforma unificadora repleta de ventajas para desar rolladores y usuarios finales!

Common Language Runtime

Page 6: Máquinas Virtuales

ConclusionesActualmente hay muchos proyectos implementan-do el estándar ECMA-335, entre los que destacan Mono y la implementación de Microsoft que fue la que ya revisamos.

Al respecto y en exclusiva, César Natarén, quien es un importante desarrollador en el pro-yecto Mono4, nos brinda una comentario experto5 acer-ca del estándar CLI.

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.

Máquinas Virtuales

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

4 Cé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.

El

que el CLI sea una especi-

ficación pública ha permitido que

implementaciones hechas por terceros

puedan ser construidas sin problema alguno,

como es el caso de la plataforma de desarro-

llo Mono. Que ha permitido que aplicaciones

escritas para el sistema operativo creado por

la compañía de Redmond se puedan utilizar en el

sistema operativo Linux y otros sistemas

operativos libres ademas de una gran

variedad de arquitecturas de compu-

tadoras.

Page 7: 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.

Máquinas Virtuales

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