Etapas de Compilación sobre plataformas .Net

18
Universidad de San Carlos de Guatemala Escuela de Ciencias y Sistemas Organización de Lenguajes y Compiladores 2 Sección: A Nombre: Elder Alexander Prado Herrera Carnet: 200611078 Fecha: Guatemala, 14 de noviembre de 2008. Etapas de Compilación sobre plataformas .Net Framework utilizando XNA

Transcript of Etapas de Compilación sobre plataformas .Net

Page 1: Etapas de Compilación sobre plataformas .Net

1

Universidad de San Carlos de Guatemala

Escuela de Ciencias y Sistemas

Organización de Lenguajes y Compiladores 2

Sección: A

Nombre: Elder Alexander Prado Herrera

Carnet: 200611078

Fecha: Guatemala, 14 de noviembre de 2008.

Etapas de Compilación sobre plataformas .Net Framework utilizando XNA

Page 2: Etapas de Compilación sobre plataformas .Net

2

Índice

Tema Pág.

Introducción 3

Objetivos 4

Planteamiento del Problema 5

Marco Teórico

XNA 6

.Net Framework 6

El motor de .Net CLR 7

El Proceso de Compilación 8

El Proceso de Decisión ¿Por qué C#? 8

Compilar el Código a Código Intermedio 9

Compilar Código Intermedio a Código Nativo 9

Ejecución de Código 10

Presentación y Discusión de Resultados

Capas de XNA 11

Arquitectura Windows 11

Arquitectura XBOX 360 12

Arquitectura XNA Framework 12

Estructura de CLR 13

Analizando XNA 14

Conclusiones 16

Recomendaciones 17

Referencias Bibliográficas 18

Page 3: Etapas de Compilación sobre plataformas .Net

3

Introducción

En la actualidad, el desarrollo de software toma mayor fuerza y se convierte en una de las

principales fuentes de ingresos para millones de personas en el mundo. Pero todo esto no

sería posible si no existieran las herramientas que hoy en día conocemos para poder

desarrollar múltiples aplicaciones.

Al hablar de desarrollo de software, hoy en día aparece la nueva generación de videojuegos

y esta área día con día está creciendo, es por ello que surge XNA, una idea de Microsoft

con el fin de incentivar a todas aquellas personas que deseen iniciarse en la rama del

desarrollo de juegos, para sus plataformas Windows y XBOX 360.

Pero para lograr esto, antes debió existir alguna base para brindar soporte a esta innovadora

idea, y justamente la encontraron en la plataforma de .Net Framework, y es aquí donde

comienza todo, porque sobre esta plataforma se ejecutan los diferentes lenguajes de

programación incluidos en el Visual Studio.

Para comprender todo el proceso involucrado en la compilación de estos lenguajes,

independientemente de cuál sea el utilizado, nos adentramos al funcionamiento y proceso

de compilación de la plataforma .NET.

Pero para entender el funcionamiento de la plataforma de .Net, debemos tener muy en

cuenta, la herramienta que logra que esta plataforma funcione, que es el Common

Language Runtime, que es el encargado de administrar todo el proceso de compilación

sobre la plataforma de .Net.

Page 4: Etapas de Compilación sobre plataformas .Net

4

Objetivos

General

Observar y analizar el funcionamiento de una plataforma de programación y el

proceso que esta realiza para analizar y llevar hasta un lenguaje de bajo de nivel de

tal modo que sea compresible para el CPU.

Especifico

Entender y comprender como funciona el Proceso de Ejecución Administrativa, que

es la forma en la cual se desenvuelve la plataforma de .NET, además de ver que

procesos están involucrados en cada una de las diferentes fases y etapas por la cual

pasa los lenguajes sobre dicha plataforma.

Page 5: Etapas de Compilación sobre plataformas .Net

5

Planteamiento del Problema

Que es XNA: sus siglas No son un Acrónimo, quiere decir que no forman ninguna palabra.

XNA, es una Interfase de Programación desarrollada por Microsoft para el desarrollo de

videojuegos para las plataformas Xbox 360, Zune y Windows.

El propósito de esta investigación, es el poder apreciar como una herramienta, en este caso

XNA, aunque trabaja su programación con un lenguaje de alto nivel (C#), este debe pasar

por un proceso de compilación el cual involucra una serie de etapas, pasando por código

intermedio(MISIL) hasta llegar al lenguaje maquina, además tocar puntos importantes

como lo es el funcionamiento de la maquina virtual de .Net Framework y como define el

ambiente de ejecución para los programas y como es que sobre esta plataforma se realiza la

compilación en tiempo de ejecución.

Esta investigación está enfocada en el proceso de ejecución administrativa y en los pasos

que este realiza:

1. Elegir un compilador: Para obtener los beneficios que proporciona Common

Language Runtime, se deben utilizar uno o más compiladores de lenguaje

orientados al tiempo de ejecución, en este caso C#.

2. Compilar el código a Lenguaje intermedio de Microsoft (MSIL): La compilación

convierte el código fuente en MSIL y genera los metadatos requeridos.

3. Compilar MSIL a código nativo: En tiempo de ejecución, un compilador Just-In-

Time (JIT) convierte MSIL en código nativo. Durante esta compilación, el código

debe pasar un proceso de comprobación que examina el MSIL y los metadatos para

averiguar si el código garantiza la seguridad de tipos.

4. Ejecutar código: Common Language Runtime proporciona la infraestructura que

permite que la ejecución tenga lugar, así como una amplia gama de servicios que se

pueden utilizar durante la ejecución

Page 6: Etapas de Compilación sobre plataformas .Net

6

Marco Teórico

XNA

Es un conjunto de aplicaciones y librerías desarrolladas sobre la plataforma de .NET, este

conjunto de herramientas fue realizado con el objetivo de crear una línea de los lenguajes

.NET para el desarrollo de video juegos.

Fue realizado con el fin de crear comunidades sobre plataformas Microsoft, entiéndase en

ello Windows y XBOX 360.

Sus principales propósitos son:

La creación de videojuegos mucho más fácil y accesible

Establecer una comunidad activa de desarrolladores de videojuegos

Promover en instituciones académicas el uso de este tipo de plataformas

Unificar estas dos plataformas en la medida de lo posible

Una de las metas primordiales en el desarrollo bajo XNA, es eliminar elementos de

programación que puedan volver tedioso el trabajo, elementos tales como:

Crear una ventana

Enumerar los aparatos gráficos y sus características,

Crear dispositivos de representación 3D (Direct3D)

Manejar punteros y direcciones a objetos e interfaces

Fueron removidos con el fin de que el programador se base únicamente en el desarrollo de

código del videojuego.

.NET FRAMEWORK

El .Net Framework es el modelo de programación de código administrado de Microsoft

para la construcción de aplicaciones que brindan experiencias de usuarios visualmente

espectaculares, una comunicación segura y uniforme, y la habilidad de presentar una gama

de procesos comerciales.

Es un componente de la plataforma Windows, la cual tiene como objetivos principales,

crear un entorno de programación orientado a objetos. Está basado en un motor llamado

CLR el cual controla todo .NET. Brinda varias soluciones predefinidas para necesidades

generales de la programación de aplicaciones, y administra la ejecución de los programas

desarrollados.

En el .NET Framework se incluyen clases, interfaces y tipos de valor que aumentan la

velocidad y optimizan el proceso de desarrollo, proporcionando acceso a la funcionalidad

del sistema.

Page 7: Etapas de Compilación sobre plataformas .Net

7

Para facilitar la interoperabilidad entre lenguajes, los tipos de .NET Framework cumplen la

especificación de lenguaje común (CLS) y, por tanto, se pueden utilizar en todos los

lenguajes de programación cuyo compilador satisfaga los requisitos de CLS.

.NET Framework es literalmente una infraestructura que permite que los programas

creados sobre esta plataforma ser independientes en el sistema operativo MS Windows

98/2000/Server2003/XP/XP64/Vista32/Vista64. El conjunto de todos los lenguajes .NET

no compilan directamente código de CPU si no a un código intermedio llamado MSIL

generado a través de CLR, que es convertido a código CPU en tiempo de ejecución

El Motor de .NET, CLR (Common Languaje Runtime)

Es el lenguaje base de .NET Framework y reúne todos los lenguajes que maneja .NET en

uno solo. Realmente es el verdadero entorno de ejecución de .NET donde son cargadas

todas las aplicaciones desarrolladas.

Esta herramienta compila el código fuente en un código intermedio, el MSIL y para

ejecutarlo toma otro paso que es genera el código maquina a través del compilador JIT para

ejecutarlo en la plataforma del cliente.

Common Language Runtime permite facilitar el diseño de los componentes y de las

aplicaciones en las cuales, los objetos interactúan entre lenguajes distintos. Los objetos

utilizados en lenguajes que son diferentes pueden relacionarse y comunicarse entre sí, lo

cual permite que se integren sus comportamientos de una manera adecuada.

Esta unión entre diferentes lenguajes, es posible porque los compiladores y las herramientas

de lenguajes orientados al motor en tiempo de ejecución utilizan un sistema de tipos común

definido por el motor en tiempo de ejecución, y los lenguajes siguen las reglas en tiempo de

ejecución para definir nuevos tipos, así como para crear, utilizar, almacenar y enlazar tipos.

Entre las ventajas al utilizar un motor en tiempo de ejecución tenemos:

Mejoras en el rendimiento.

Capacidad para utilizar fácilmente componentes desarrollados en otros lenguajes.

Tipos extensibles que proporciona una biblioteca de clases

Nuevas características del lenguaje como herencia, interfaces y sobrecarga para la

programación orientada a objetos; compatibilidad con el uso de subprocesos libres

que permite la creación de multiprocesos; aplicaciones escalables; compatibilidad

con los atributos personalizados y el control de excepciones estructurado.

Page 8: Etapas de Compilación sobre plataformas .Net

8

Proceso de Compilación

El proceso de compilación de .NET es llamado “Proceso de Ejecución Administrativa” el

cual se divide en 4 fases:

Seleccionar un Compilador: esta etapa no lo nombraremos ya que para esta

investigación el compilador ya fue elegido, dado que XNA utiliza el lenguaje C#.

Además que para obtener los beneficios del CLR, deben ser elegidos lenguajes

orientados al tiempo de ejecución, como lo son los soportados por la plataforma

.NET Framework.

Compilar el Código a Lenguaje Intermedio de Microsoft (MSIL): cualquier

código escrito en cualquiera de los lenguajes soportados por la plataforma .NET, los

transforma a un código intermedio CIL, llamado por Microsoft MSIL.

Compilar MSIL a Código Maquina: para esta etapa es utilizado el compilador un

compilador Just-in-Time (JIT) el cual convertirá el código intermedio a lenguaje

maquina. Durante esta etapa, se debe verificar que tanto el código intermedio como

los datos cumplen con la seguridad establecida.

Ejecutar Código: el CLR proporciona toda la estructura para permitir la ejecución

y todos los servicios que esta pueda necesitar en cualquier momento.

El Proceso de Decisión ¿Porque C#?

Entre las razones más importantes que motivaron a elegir C# como lenguaje para

desarrollar para la plataforma XNA encontramos:

Esta es una de las preguntas que todo el mundo realiza, y los motivos son variados entre

ellos tenemos:

El Aspecto Comercial: para publicitar y promover el lenguaje y la plataforma .NET

Rendimiento: la plataforma .NET fue desarrollada sobre C# es por ello que es el

lenguaje más rápido en .NET.

C # como lenguaje de programación es uno de los más factibles para la enseñanza

en los lugares que actualmente están dedicados juego la academia de desarrollo de

software.

Las versiones Express de Visual Studio son libres, esto permite que todas las

personas interesadas puedan tener acceso a la base de herramientas de desarrollo de

Page 9: Etapas de Compilación sobre plataformas .Net

9

Compilar el Código a Código Intermedio (MSIL)

El significado de MSIL es Microsoft Intermediate Language, este código es generado

cuando compilamos un código fuente en cualquier lenguaje de .NET, este lenguaje es

similar al Bytecode de java, vale recalcar que MSIL es un lenguaje intermedio común para

todo los S.O que soporten .NET Framework.

En el proceso de compilación de código administrado, el compilador transforma el código

fuente en Lenguaje Intermedio de Microsoft (MSIL), que no es más que un conjunto de

instrucciones independiente de la CPU que se pueden convertir de forma eficaz en lenguaje

maquina. En MSIL están incluidas instrucciones para cargar, almacenar, inicializar y llamar

a métodos en los objetos, así como también instrucciones para operaciones lógicas y

aritméticas, flujo de control, acceso directo a la memoria, control de excepciones y otras

operaciones.

Antes de proceder a ejecutar código, se debe transformar MSIL al código específico de la

CPU, es decir, a lenguaje maquina, generalmente mediante un compilador Just-In-Time

(JIT). Common Language Runtime proporciona uno o varios compiladores JIT para cada

arquitectura de equipo compatible, por lo que se puede compilar y ejecutar el mismo

conjunto de MSIL en cualquier arquitectura compatible.

Cuando el compilador genera MSIL, también crea metadatos. Los metadatos describen los

tipos que aparecen en el código, incluidas las definiciones de los tipos, las firmas de los

miembros de tipos, los miembros a los que se hace referencia en el código y otros datos que

el motor en tiempo de ejecución utiliza en tiempo de ejecución. El lenguaje intermedio de

Microsoft y los metadatos se incluyen en un archivo ejecutable portable denominado PE,

que se basa y extiende el PE de Microsoft publicado y el formato Common Object File

Format (COFF) utilizado tradicionalmente para contenido ejecutable. Este tipo de archivo,

que contiene el código MSIL o código nativo así como metadatos, permite que el sistema

operativo reconozca imágenes de Common Language Runtime. El que los metadatos junto

al Lenguaje intermedio de Microsoft (MSIL) permite generar código autodescriptivo, con

lo cual las bibliotecas de tipos y el Lenguaje de definición de interfaces son innecesarios. El

motor en tiempo de ejecución busca, ubica y extrae los metadatos del archivo cuando son

necesarios durante la ejecución.

Compilar el Código MSIL a Código Nativo

Durante esta compilación, el código debe pasar un proceso de comprobación que examina

el MSIL para garantizar que el proceso sea satisfactorio, y para esta ejecutar esta acción se

utiliza el compilador JIT, el cual compila y ejecuta al mismo tiempo.

Para poder ejecutar MSIL, primero debe convertir éste, mediante un compilador Just-In-

Time (JIT) de .NET Framework, a código nativo. Common Language Runtime brinda un

Page 10: Etapas de Compilación sobre plataformas .Net

10

compilador JIT para cada arquitectura de CPU compatible con .Net Framework, por lo que

los programadores pueden escribir un conjunto de MSIL que se puede compilar mediante

un compilador JIT y ejecutar en equipos con diferentes arquitecturas.

La compilación JIT tiene como característica, que nunca, durante la ejecución se llamará a

parte del código. En vez de utilizar tiempo y memoria para convertir todo el MSIL de un

archivo ejecutable portable (PE) a código nativo, convierte el MSIL necesario durante la

ejecución y almacena el código nativo resultante para que este pueda ser accesible en las

llamadas posteriores.

El motor en tiempo de ejecución nos brinda otra alternativa de compilación denominada

generación de código en el momento de la instalación. Esta generación de código en el

momento de la instalación convierte el MSIL a código nativo, así como lo realiza el

compilador JIT normal, aunque convierte mayores unidades de código a la vez,

almacenando el código nativo resultante para poder utilizarlo posteriormente al cargar y

ejecutar el ensamblado.

Como parte de la compilación MSIL en código nativo, el código debe pasar un proceso de

comprobación, aunque esta etapa puede saltearse si así se desea. Aquí en esta etapa se

comprueba el MSIL y los metadatos para determinar si el código garantiza la seguridad de

tipos, lo cual significa que el código sólo tiene acceso a aquellas ubicaciones de la memoria

para las que está autorizado.

Cuando hablamos de seguridad nos referimos al control de acceso a recursos, como

componentes de la aplicación, datos y hardware. Cuando se planea una aplicación, es

primordial tener en cuenta los requisitos de seguridad.

Ejecución de Código

Para realizar la última etapa, que es realmente cuándo podremos observar nuestros

resultados, regresamos a tocar el tema CLR porque, es este, el que permite que la ejecución

se lleve a cabo.

Common Language Runtime nos brinda la estructura que permite que la ejecución

administrada tenga lugar, además de una gran cantidad de servicios que pueden ser

utilizados durante la ejecución. Para poder ejecutar un método, primero se debe compilar a

código específico del procesador. Los métodos para los que se genera MSIL son

compilados mediante un compilados JIT cuando se les llama por primera vez y, a

continuación, se ejecutan. La próxima vez que se ejecuta el método, se ejecuta el código

nativo existente resultante de la compilación JIT. El proceso de compilación JIT y, a

continuación, este proceso es repetido hasta finalizar la ejecución.

Mientras se ejecuta, el código administrado recibe servicios como la recolección de

elementos que no son utilizados, seguridad, interoperabilidad con código no administrado,

Page 11: Etapas de Compilación sobre plataformas .Net

11

compatibilidad de depuración entre lenguajes diferentes y compatibilidad mejorada con el

control de versiones y la implementación.

Presentación y Discusión de Resultados

Capas de XNA

Arquitectura Windows

Los programas de usuario no pueden accesar directamente al hardware.

Page 12: Etapas de Compilación sobre plataformas .Net

12

Arquitectura XBOX 360

El Hypervisor impone la seguridad sobre el XBOX 360.

El Hypervisor solo habilita las posiciones de memoria que serán utilizadas.

Arquitectura XNA Framework

Se ejecuta por separado el código Administrado y el espacio de dirección de memoria del

usuario.

Las transiciones del usuario supervisor son costosas

Page 13: Etapas de Compilación sobre plataformas .Net

13

Estructura Interna del CLR

Es el encargado de proveer lo que se llama co- administrado, es decir, un entorno que

provee servicios automáticos al código que se ejecuta. Los servicios son variados:

Cargador de clases: permite cargar en memoria las clases.

Compilador MSIL a nativo: transforma código intermedio de alto nivel

independiente del hardware que lo ejecuta a código de máquina propio del

dispositivo que lo ejecuta.

Administrador de código: coordina toda la operación de los distintos subsistemas

del Common Language Runtime.

Recolector de basura: elimina de memoria objetos no utilizados.

Motor de seguridad: administra la seguridad del código que se ejecuta.

Motor de depuración: permite hacer un seguimiento de la ejecución del código aún

cuando se utilicen lenguajes distintos.

Page 14: Etapas de Compilación sobre plataformas .Net

14

Verificador de tipos: controla que las variables de la aplicación usen el área de

memoria que tienen asignado.

Administrador de excepciones: maneja los errores que se producen durante la

ejecución del código.

Soporte de multiproceso (hilos): permite ejecutar código en forma paralela.

Empaquetador de COM: coordina la comunicación con los componentes COM para

que puedan ser usados por el .NET Framework.

Soporte de la Biblioteca de Clases Base: interfaz con las clases base del .NET

Framework. Esto quiere decir que existen tipos de estructuras como es la de java y

la .NET

Analizando XNA Framework sobre:

XBOX 360

XNA Framework, Monitorea remotamente el rendimiento.

Información Básica del Garbage Collector

Controla si se tienen problemas con el Framework Compact

No es suficiente para diagnosticar problemas

Muestra la cantidad de llamadas a sistema

No brinda suficiente ayuda con los cuellos de botella.

Page 15: Etapas de Compilación sobre plataformas .Net

15

Windows

Es similar en ambas plataformas

Mide el juego sobre Windows

Los resultados generalmente son aplicados sobre el XBOX 360

Existen gran cantidad de herramientas para Windows.

Page 16: Etapas de Compilación sobre plataformas .Net

16

Conclusiones

El proceso de ejecución administrativa, es una serie de etapas las cuales describen el

funcionamiento sobre la plataforma .Net.

El CLR junto con el JIT son realmente la base sobre la plataforma de desarrollo

.Net, pero es el CLR el que controla todo.

MSIL es el lenguaje intermedio utilizado por la plataforma de .Net aunque su

verdadero nombre es CIL (Common Intermediate Language), se podría hablar de

que este lenguaje es multiplataforma ya que podría ser ejecutado en Linux gracias al

Proyecto Mono, el cual brinda una plataforma similar a la de .Net Framework.

Para el desarrollo sobre XNA se utilizo el lenguaje C# debido a su popularidad en el

ambiente de desarrolladores y su simplicidad de aprendizaje.

Page 17: Etapas de Compilación sobre plataformas .Net

17

Recomendaciones

La plataforma de programación de .Net hoy en día es una de las más utilizadas en el

área profesional de desarrollo de software y todo informático debe estar al tanto de

todos los sucesos que tengan que ver con ella, y estar actualizados debido a que es

cambiada cada periodo de tiempo.

XNA fue básicamente creado para personas que desean iniciarse en el área de

programación de juegos, pero no sería extraño que en poco tiempo se convirtiera en

una de las áreas de desarrollo más solicitada por las grandes compañías.

El funcionamiento de todo entorno de programación debería ser estudiado para

comprender mejor su funcionamiento, entender las bases de su estructura.

Page 18: Etapas de Compilación sobre plataformas .Net

18

Referencias Bibliográficas

http://msdn.microsoft.com/es-es/library/k5532s8a(VS.80).aspx

http://creators.xna.com/en-US/

http://msdn.microsoft.com/es-es/library/k1s94fta(VS.80).aspx

http://xna.animered.net/index.php?Itemid=14&id=13&option=com_content&task=view

http://xna.animered.net/index.php?Itemid=14&id=8&option=com_content&task=view