Sie sind auf Seite 1von 18

Universidad de San Carlos de Guatemala

Escuela de Ciencias y Sistemas

Organización de Lenguajes y Compiladores 2

Sección: A

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

Nombre: Elder Alexander Prado Herrera

Carnet: 200611078

Fecha: Guatemala, 14 de noviembre de 2008.

1
Í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

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

3
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.

4
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

5
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.

6
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.

7
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

8
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

9
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,

10
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.

11
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

12
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.

13
 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.

14
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.

15
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.

16
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.

17
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

18

Das könnte Ihnen auch gefallen