Vous êtes sur la page 1sur 4

Arquitectura del computador

i

Casi todas las computadoras digitales construidas desde 1940 se basan en la arquitectura de Von
Neumann. La arquitectura de las computadoras ha tenido un efecto crucial en el diseo de los lenguajes.
Muchos de los lenguajes ms populares de los pasados 45 aos han sido diseados en funcin del hardware
en uso en ese momento y se los conoce como lenguajes imperativos. En una computadora tipo Von
Neumann, tanto los datos como las instrucciones se almacenan en la misma memoria. La Unidad Central de
Procesamiento (CPU) ejecuta las instrucciones y est separada de la memoria. Por lo tanto los datos y las
instrucciones se deben transmitir desde la MC hasta la CPU. Los resultados de las operaciones realizadas
en la CPU deben ser devueltos a la memoria.
Debido al uso de la arquitectura de Von Neumann, las principales caractersticas de los lenguajes
imperativos son: las variables que modelan las celdas de memoria; las sentencias de asignacin que estn
basadas en la transmisin de los datos y la forma iterativa de la repeticin que es la forma ms eficiente
de ejecutar una iteracin en este tipo de arquitectura. Los operandos en las expresiones se transmiten
desde la MC a la CPU y el resultado de evaluar la expresin se transporta hacia la celda de memoria
representada por la parte izquierda de la asignacin. La iteracin se ejecuta ms rpidamente en una
mquina de Von Neumann porque las instrucciones se almacenan en celdas contiguas de la memoria. Esta
eficiencia desalienta el uso de la recursin para la repeticin, a pesar de que la recursin suele ser ms
natural.
Un lenguaje funcional es aqul en el que la computacin se realiza aplicando funciones a parmetros
dados. La programacin no incluye el tipo de las variables usado en los lenguajes imperativos, las
asignaciones y las iteraciones. A pesar de que muchos informticos han expuesto una gran cantidad de
caractersticas beneficiosas de los lenguajes funcionales, como LISP, no es probable que puedan desplazar
a los lenguajes imperativos hasta que se disee una computadora cuya arquitectura sea diferente a la de
Von Neumann y que permita mejorar la eficiencia de la ejecucin de los programas escritos en lenguajes
funcionales.
Las computadoras con arquitectura paralela que aparecieron en los ltimos 20 aos representan una
promesa para acelerar la ejecucin de los programas escritos en lenguajes funcionales, pero no ha sido
suficiente como para hacerlos competitivos frente a los programas escritos en lenguajes imperativos. En
realidad, a pesar de que existen formas elegantes de utilizar la arquitectura paralela para ejecutar
programas escritos en lenguajes funcionales, la mayora de las computadoras paralelas se usan para
ejecutar programas escritos usando lenguajes imperativos.

Mtodos de implementacin
La CPU o procesador est compuesto por circuitos que ejecutan un conjunto de operaciones primitivas o
instrucciones de mquina como las operaciones aritmticas y lgicas. En la mayora de las computadoras,
algunas de estas instrucciones, denominadas macroinstrucciones, realmente se implementan con un
conjunto de instrucciones de an ms bajo nivel llamadas microinstrucciones. Estas microinstrucciones no
son objeto de estudio a nivel de software, pero s lo son a nivel de hardware.
El lenguaje de mquina de una computadora es su conjunto de macroinstrucciones y es el nico lenguaje
que el hardware comprende. Tericamente, se puede construir una computadora con un lenguaje de alto
nivel como su lenguaje de mquina, pero sera muy compleja y costosa. Adems resultara muy inflexible
porque sera muy difcil, casi imposible, usarla con otros lenguajes de alto nivel. La mejor decisin al
construir una mquina es implementar en hardware un lenguaje de muy bajo nivel que provea las
operaciones primitivas ms comnmente usadas y que requiera un software del sistema para crear una
interfaz con los programas escritos en lenguajes de ms alto nivel.
El software que facilita la creacin de una interfaz entre los lenguajes de alto nivel y la computadora
es llamado lenguaje de implementacin del sistema. Este lenguaje no puede ser el nico software en una
computadora, tambin requiere una coleccin de programas a los que se denomina Sistema Operativo (SO)
que contiene primitivas de ms alto nivel que las del lenguaje de mquina. Estas primitivas permiten el
manejo de los recursos del sistema, operaciones de entrada y salida, la administracin del sistema de
archivos, los editores de texto y/o de programas y una gran variedad de otras funciones. El SO y las
implementaciones del lenguajes son capas sobre la interfaz del lenguaje de mquina de la computadora.
Estas capas pueden interpretarse como mquinas virtuales que proveen interfaces para el usuario a altos
niveles. Por ejemplo un SO y un compilador C proveen una Mquina virtual de C, con otros compiladores, una

2
mquina se convierte en otros tipos de mquina virtuales. Los programas del usuario forman otra capa por
encima de la capa de la mquina virtual.



1- hardware
2- intrprete de macroinstrucciones
3- SO
4- Intrprete de comandos del SO
5- Assembler
6- Interprete de LISP
7- Compilador de C++
8- Compilador de FORTRAN
9- Compilador de C
10- Compilador de Ada









Compilacin
Los lenguajes de programacin se pueden implementar por tres mtodos generales. En un extremo los
programas pueden traducirse a lenguaje de mquina, para ser ejecutado directamente por la computadora
a esto se le llama una implementacin por compilador. Este mtodo tiene como ventaja una muy rpida
ejecucin, una vez que el proceso de traduccin fue completado. Muchas de las implementaciones de
lenguajes se hacen con compiladores, por ejemplo C, COBOL, Ada.

El lenguaje que un compilador traduce es el lenguaje fuente. El proceso de compilacin se realiza en
varias etapas.
1. El analizador lxico junta los caracteres del programa fuente en unidades lxicas que incluyen
identificadores, palabras especiales, operadores y smbolos de puntuacin. El analizador lxico ignora
comentarios en el programa fuente pues el compilador no los utiliza.
2. El analizador sintctico toma las unidades lxicas y construye con ellas estructuras jerrquicas
llamadas rboles parse. Estos rboles representan la estructura sintctica del programa.
3. El generador de cdigo intermedio produce un programa en un lenguaje diferente, en un nivel
intermedio entre el programa fuente y la salida final del compilador. El analizador semntico es una
Unidades
lxicas
rboles
parse
Lenguaje
de mquina
Computadora Programa
fuente
Analizador
lxico
Analizador
sintctico
Tabla de
smbolos
Generador de
cdigo
intermedio
(y analizador
semntico)
Generador
de cdigo
Cdigo
intermedio
Datos
Resultados
3
2
1
4
5 6
7
8
9
10
Mquina
virtual de Ada
Mquina
virtual de C
Mquina virtual de
FORTRAN
Mquina virtual de
Assembler
Mquina
virtual de C
Mquina virtual
de LISP

3
parte integral del generador de cdigo intermedio, busca errores que son difciles, sino imposibles de
detectar durante el anlisis sintctico, como, por ejemplo, los errores de tipo.
4. El generador de cdigo traduce la versin del programa en cdigo intermedio a su equivalente en
lenguaje de mquina, llamado programa objeto (PO).
La tabla de smbolos contiene bsicamente informacin sobre el tipo y atributos de cada identificador
definido por el usuario que aparece en el programa.
El lenguaje de mquina puede ejecutarse directamente sobre el hardware, sin embargo, para que estos
programas producidos por el compilador puedan ejecutarse, se les debe adicionar ciertos programas del
SO, entre los ms comunes estn los que se ocupan de la entrada y salida de datos. El enlazador (linker)
realiza la operacin de enlace del programa objeto con los programas del sistema o mdulos y tambin con
programas del usuario previamente compilados que residen en libreras.
Existe otro programa, el cargador (loader) que almacena el programa objeto completo (POC) en la MC
llegando as al programa ejecutable (PE).
La ejecucin de un programa escrito en cdigo de mquina en una computadora con arquitectura Von
Neumann sigue un ciclo llamado ciclo de instruccin (obtencin-decodificacin-ejecucin), como ya se dijo
los programas residen en MC pero se ejecutan en la CPU. Cada instruccin que se ejecuta debe ser movida
desde MC hasta el procesador. La direccin de la prxima instruccin a ejecutarse se almacena en un
registro llamado Program Counter (PC). El ciclo de instruccin, puede ser descrito por el siguiente
algoritmo:
I ni ci al i zar el PC
Repet i r si empr e
Buscar l a i nst r ucci n apunt ada por el PC
I ncr ement ar el PC par a que apunt e a l a si gui ent e i nst r ucci n
Decodi f i car l a i nst r ucci n
Ej ecut ar l a i nst r ucci n
Fi n r epet i r
Mover una instruccin de la MC al procesador insume ms tiempo que ejecutarla, entonces la velocidad
de la computadora queda determinada por el tiempo que transcurre entre dos accesos sucesivos del
procesador a MC. Esta situacin se conoce como el cuello de botella de la arquitectura de Von Neumann y
es el factor primario limitante en la velocidad de procesamiento de las computadoras con arquitectura Von
Neumann, este ha sido una de las principales motivaciones para el desarrollo de las computadoras con
arquitectura paralela.

Interpretacin
En el otro extremo de los mtodos de implementacin, los programas son interpretados por otro
programa llamado intrprete, sin ningn tipo de traduccin. El programa intrprete, o simplemente
intrprete, acta como un simulador
hecho en software que se encarga de
ejecutar el ciclo de instruccin con
instrucciones escritas en un lenguaje de
alto nivel en vez de utilizar instrucciones
escritas en cdigo de mquina. Esta
simulacin en software provee una mquina virtual para el lenguaje.
Esta tcnica, llamada interpretacin tiene como ventaja una fcil implementacin de las operaciones de
depuracin (debugging) a nivel de cdigo fuente. Por ejemplo si el ndice de un arreglo est fuera de rango,
fcilmente un mensaje de error indica el nombre del arreglo y la lnea del cdigo fuente. Por otro lado,
este mtodo tiene la desventaja que la ejecucin es entre 10 y 100 veces ms lenta, el principal motivo de
esta lentitud se debe a la decodificacin de sentencias escritas en un lenguaje de alto nivel, que son mucho
ms complicadas que las instrucciones en cdigo de mquina, (a pesar de que habr menor cantidad de
instrucciones en lenguaje de alto nivel que en cdigo mquina), por lo tanto el cuello de botella cuando se
utiliza un intrprete es la decodificacin ms que el acceso a MC.
Otra desventaja de la interpretacin es que generalmente requiere mayor cantidad de memoria
disponible, adems del programa fuente, la tabla de smbolos deber estar disponible en todo momento.
La interpretacin es un proceso difcil cuando el programa est escrito en un lenguaje complicado,
porque el significado de cada expresin debe ser determinado directamente a partir del programa fuente
en tiempo de ejecucin. Los lenguajes aptos para la interpretacin, son aqullos que tienen estructuras
Programa
fuente

Interprete
Datos
Resultados

4
sencillas, por ejemplo LISP. Muchos de los comandos de los SO como el shell de UNIX y los archivos .bat
de DOS son interpretados. Lenguajes ms complejos como FORTRAN y C raramente son interpretados. A
pesar de no ser JavaScript un lenguaje particularmente sencillo, es totalmente interpretado.

Hbridos








Algunas implementaciones de lenguajes representan un compromiso entre compilacin e interpretacin,
traducen los programas escritos en lenguajes de alto nivel a un lenguaje intermedio que facilita la
interpretacin. Este mtodo es ms rpido que la interpretacin pura porque las sentencias en lenguaje
fuente se decodifican slo una vez.
En una implementacin hbrida en vez de traducir el cdigo intermedio a cdigo de mquina,
simplemente se interpreta.
Las primeras implementaciones de Java eran hbridas, la forma intermedia llamada bytecode permite su
portabilidad a cualquier mquina que tenga un interprete de bytecode y un sistema asociado en tiempo de
ejecucin, juntos se los conoce como Mquina Virtual Java. Ahora existen sistemas que traducen el Java
bytecode a cdigo mquina, logrando as una ejecucin ms rpida. Sin embargo los applets de Java
siempre se bajan de la WEB en la forma de bytecode.
Muchas veces el implementador puede optar por una implementacin que contemple interpretacin y
compilacin, en estos casos el intrprete se usa para el desarrollo y depuracin de los programas, y cuando
el programa est relativamente libre de errores, se compila para acelerar la ejecucin.



i
Extracto del Captulo I inc. 1.4 Influencias en el diseo del lenguaje.
Concepts of Programming Languages de Sebesta, Robert W.
Ed. Addison Wesley, 2002
Unidades
lxicas
rboles
parse
Programa
fuente
Analizador
lxico
Analizador
sintctico
Generador de
cdigo
intermedio
(y analizador
semntico)
Cdigo
intermedio

Interprete
Datos
Resultados

Vous aimerez peut-être aussi