Arquitecturas de ordenadores y compiladores cruzados
1. ARQUITECTURAS DE
ORDENADORES Y
COMPILADORES CRUZADOS
PUCESI
ESCUELA DE INGENIERIA EN SISTEMAS
COMPILADORES; ING. DIEGO BAROJA; 5TO INGENIERÍA
2. ARQUITECTURAS DE ORDENADORES
En la disciplina de Procesadores de Lenguaje los compiladores
ocupan una posición privilegiada, dado que son las
herramientas más utilizadas por los profesionales de la
Informática para el desarrollo de aplicaciones. En el caso
particular del desarrollo de compiladores es necesario tener
definidos tres pilares básicos:
La definición léxica, sintáctica y semántica del lenguaje
fuente a compilar.
La estructura interna del compilador
La arquitectura del ordenador y su repertorio de
instrucciones que constituirá el lenguaje objeto
COMPILADORES; ING. DIEGO BAROJA; 5TO
INGENIERÍA
3. ARQUITECTURAS DE ORDENADORES
Los dos primeros pilares se tratarán en los apartados siguientes, con
el tercer pilar tan sólo trata de resaltarse la relación intima entre las
tecnologías de compilación y las arquitecturas de ordenadores, y los
problemas que plantea la rápida evolución de éstas últimas.
El desarrollo de nuevas arquitecturas de ordenadores que
origina a su vez las correspondientes generaciones de
microprocesadores con sus repertorios de instrucciones
planteándose entre otros estos dos problemas:
• ¿Cómo se pueden ejecutar las aplicaciones desarrolladas
para otras arquitecturas de ordenadores en la nueva
arquitectura?
• Dado que un compilador es un programa demasiado
complejo para escribirlo directamente en lenguaje máquina
COMPILADORES; ING. DIEGO BAROJA; 5TO
INGENIERÍA
4. ARQUITECTURAS DE ORDENADORES
¿Con qué se escribe el primer compilador?
Las dos cuestiones anteriores están ligadas entre sí, sin
embargo el primer problema planteado no sólo es aplicable a la
construcción de nuevas arquitecturas, también se aparece
cuando es necesaria la compatibilidad de aplicaciones entre
diferentes sistemas operativos y arquitecturas de ordenadores.
Las soluciones habitualmente empleadas para resolver este
problema es el empleo de alguna de las técnicas y herramientas
presentadas en la fig. 10 y que se comentan a continuación.
COMPILADORES; ING. DIEGO BAROJA; 5TO
INGENIERÍA
5. ARQUITECTURAS DE ORDENADORES
Intérpretes software o emuladores software. Un
intérprete software de código binario es un programa que
lee una a una las instrucciones binarias de la arquitectura
antigua que están en un fichero ejecutable, y las
interpreta. Los intérpretes no son muy rápidos, pero se
pueden construir y adaptar a distintas arquitecturas sin
excesivos costes de desarrollo. Se puede aumentar el
rendimiento de los intérpretes creando una caché que
permita almacenar formas intermedias de instrucciones
que ya se interpretaron previamente.
COMPILADORES; ING. DIEGO BAROJA; 5TO
INGENIERÍA
6. ARQUITECTURAS DE ORDENADORES
Ejemplos comerciales de intérpretes software binario son los
emuladores de DOS para distintos sistemas operativos (por ejemplo
SoftPCÒ de Insignia Solutions). Otro ejemplo son los intérpretes de
la máquina abstracta JVM (Java Virtual Machine) para distintas
plataformas y que permiten ejecutar los códigos binarios
denominados bytecode (ficheros con la extensión .class).
Emuladores hardware. Un emulador hardware trabaja de
forma similar a un intérprete de software, pero está
implementado en hardware de forma que decodifica las
instrucciones de la arquitectura antigua y las traduce a la nueva
arquitectura.
COMPILADORES; ING. DIEGO BAROJA; 5TO
INGENIERÍA
7. ARQUITECTURAS DE ORDENADORES
Un emulador hardware es mucho más rápido que un intérprete
software, sin embargo sólo se puede diseñar para una máquina
específica. Un ejemplo son los microprocesadores Java que
emulan la máquina abstracta JVM (Java Virtual Machine),
también denominados por Sun arquitecturas PicoJava.
COMPILADORES; ING. DIEGO BAROJA; 5TO
INGENIERÍA
8. ARQUITECTURAS DE ORDENADORES
Traductores entre códigos binarios o ensambladores. Son
conjuntos de instrucciones de la nueva arquitectura que
reproducen el comportamiento de un programa en la
arquitectura antigua. Habitualmente, la información de la
máquina antigua se almacena en registros de la nueva
máquina. Los programas traducidos a nivel binario o
ensamblador son más rápidos que los intérpretes software o
emuladores hardware, pero más lentos que los programas
construidos con compiladores nativos, que aprovechan al
máximo la arquitectura de la nueva máquina. Ejemplos de
traductores binarios son los desarrollados por DEC para
traducir instrucciones de las arquitecturas VAXÒ y MIPSÒ a
la nueva arquitectura ALPHAÒ.
COMPILADORES; ING. DIEGO BAROJA; 5TO
INGENIERÍA
9. ARQUITECTURAS DE ORDENADORES
Compiladores nativos. Los programas fuente antiguos se
pueden volver a recompilar compiladores desarrollados
para la nueva arquitectura, aprovechando al máximo sus
características. Esta es la opción que produce la mejor
calidad de código objeto en la nueva arquitectura, y por
consiguiente la mayor velocidad con respecto a las
opciones comentadas anteriormente. En el siguiente
apartado se explican los compiladores cruzados, como
una herramienta para portar compiladores y software
entre distintas arquitecturas.
COMPILADORES; ING. DIEGO BAROJA; 5TO
INGENIERÍA
10. ARQUITECTURAS DE ORDENADORES
Otro problema clásico en arquitectura de ordenadores es como
medir el rendimiento de las diferentes arquitecturas y
compararlas entre sí [PATT90]. Actualmente las pruebas de
rendimiento más ampliamente aceptadas son las pruebas
SPEC, desarrolladas por el organismo System Performance
Evaluation Corporation y que están especializadas en medir el
rendimiento en plataformas que utilizan microprocesadores
diferentes. Una versión de las pruebas data de 1992, y con
versiones diferentes para operaciones con enteros (SPECint92)
y para operaciones con punto flotante (SPECfp92) [SHAR94].
COMPILADORES; ING. DIEGO BAROJA; 5TO
INGENIERÍA
11. COMPILADORES CRUZADOS
Uno de los problemas que se plantea es desarrollar los primeros compiladores en
una arquitectura nueva, dado que un compilador es un programa demasiado
complejo para escribirlo directamente en lenguaje máquina.
Sin embargo cuando se trabaja con un nuevo tipo de microprocesador, alguien
tiene que escribir el primer compilador. Otro problema que se plantea es como se
puede ejecutar el código antiguo de otras arquitecturas en la nueva arquitectura.
Sin embargo esta tarea se puede realizar más cómodamente en una máquina
donde ya se dispongan herramientas software, los compiladores cruzados se
encargaran del resto del trabajo.
Se denomina compilador cruzado (en inglés cross-compiler) a un compilador
que se ejecuta en una máquina pero el código objeto es para otra máquina.
Supóngase que se escribe un compilador cruzado para un nuevo lenguaje L,
siendo el lenguaje de implementación S, y el lenguaje objeto es el código de una
máquina N (nueva). Usando una notación en T, se tiene:
COMPILADORES; ING. DIEGO BAROJA; 5TO
INGENIERÍA
12. COMPILADORES CRUZADOS
Si ya existe un compilador del lenguaje S, que se ejecuta en una máquina
M y genera un código para la máquina M, es decir usando la notación en T
COMPILADORES; ING. DIEGO BAROJA; 5TO
INGENIERÍA
13. COMPILADORES CRUZADOS
Si LSN se ejecuta a través de SMM, entonces se tiene un compilador LMN , es
decir un compilador de L a N que se ejecuta en
M. Este proceso se puede ilustrar en la figura 13, que muestra juntos los
diagramas en T de estos compiladores.
Cuando los diagramas en T se colocan juntos como en la figura 13, nótese que el lenguaje de
implementación S del compilador LSN debe ser el mismo que el lenguaje fuente del
compilador ya existente SMM, y además el lenguaje objeto M del compilador ya existente
debe ser el mismo que el lenguaje de implementación de LMN. Los tres diagramas en T de la
figura 13 pueden ponerse en forma de ecuación:
COMPILADORES; ING. DIEGO BAROJA; 5TO LSN + SMM = LMN
INGENIERÍA
14. COMPILADORES CRUZADOS
Ejemplo 4.1: Traductor cruzado Z80-80x86
LSN + SMM = LMN
A. González González en su Proyecto Fin de Carrera de la E.U. de
Informática de Oviedo [GONZ91], construye un traductor cruzado
entre ensamblador para el microprocesador Z80 y los
microprocesadores de la familia 80x86.
COMPILADORES; ING. DIEGO BAROJA; 5TO
INGENIERÍA
16. COMPILADORES CRUZADOS
Las entradas al preprocesador EQN se tratan como si fuesen un
lenguaje de programación y se aplica la tecnología de los
traductores, con lo que se consiguen los siguientes beneficios:
Fácil implementación
Posibilidad de evolución del lenguaje
La primera versión del compilador EQN se escribió en lenguaje C, y
generaba los comandos para el formateador de texto TROFF
En el siguiente diagrama se muestra un compilador cruzado para
EQN, ejecutado sobre un ordenador PDP-11 de DECÒ, así se
obtuvo la ejecución de EQNCTROFF a través del compilador de C
del PDP-11 (C1111).
COMPILADORES; ING. DIEGO BAROJA; 5TO
INGENIERÍA