Está en la página 1de 18

MundoUTN.com.

ar

U.T.N. Regional Buenos Aires

Trabajo Práctico
Tema: “Computadores de repertorios
reducido de instrucciones”

Curso Año Materia Cuatr.


K 1051 2003 Arq. De Comput. 1ero

Fecha Entrega: 15 / 05 / 2003

Grupo: 6

Integrantes:

Nro. Leg.: Apellido, Nombres:

x Facundo

x Víctor

x Lucas

x María

Profesor: Gonzalo Vilanova

Observaciones:

mundoUTN.com.ar
MundoUTN.com.ar

Índice.
Resumen Ejecutivo Pag.: 3

Características de la ejecución de instrucciones Pág.: 4

Utilización de un amplio banco de registros Pág.: 4

Optimización de registros basada en el compilador Pág.: 9

Arquitectura de repertorio reducido de instrucciones Pág.: 10

Preguntas y Respuestas Pag.: 17

Bibliografía Pág.: 18

mundoUTN.com.ar
MundoUTN.com.ar

Resumen ejecutivo

Los estudios del comportamiento de la ejecución de los programas escritos en lenguajes de alto nivel,
proporcionaron la orientación para diseñar un nuevo tipo de arquitectura del procesador: el procesador de
repertorio reducido de instrucciones RISC.

Los estudios realizados sobre estos programas, han llevado a los arquitectos de computadores a diseñar
este nuevo tipo de procesadores que cumplen con las siguientes características:
- un repertorio reducido de instrucciones y con un formato fijo
- un numero grande de registros o la utilización de un compilador que optimice el uso de estos
- un énfasis en la optimización del cauce de las instrucciones

El repertorio reducido de instrucciones del RISC se presta a una segmentación eficiente, porque hay
menos operaciones llevadas a cabo por instrucción, y estas son más previsibles.

En el siguiente informe se pretende explicar más profundamente este tipo de arquitectura de procesadores
y enumerar y explicar también algunas de sus ventajas con respecto a otros tipos de arquitecturas.

mundoUTN.com.ar
MundoUTN.com.ar

Características de la ejecución de instrucciones.

Para comprender la línea de razonamiento de los partidarios de los RISC, comenzamos con una breve
revisión de las características de la ejecución de instrucciones. Los aspectos cuyo cálculo tiene interés son
los siguientes:

• Operaciones realizadas: determinan las funciones que lleva a cabo el procesador, y su interacción con
la memoria.
• Operandos usados: los tipos de operandos y su frecuencia de uso determinan la organización de
memoria para almacenarlos y los modos de direccionamiento para accederlos.
• Secuenciamiento de la ejecución: Determinan la organización del control y del cause.

Tres elementos que caracterizan las arquitecturas RISC:


Primero usar un gran número de registros, o un compilador que optimice el tratamiento de estos. Su
finalidad es optimizar las referencias a operandos.
En segundo lugar, hay que prestar una cuidadosa atención al diseño de los causes de instrucciones.
Debido a la alta proporción de bifurcación condicional y de llamadas a procedimientos, un cause de
instrucciones sencillo será ineficiente. Esto se manifiesta debido a que una gran proporción de
instrucciones se precaptan pero nunca llegan a ejecutarse.
Por último es recomendable un repertorio de instrucciones simplificado (reducido).

Utilización de un amplio banco de registros.

Los resultados antes mencionados indican lo deseable que es un rápido acceso a los operandos. Hay una
gran proporción de sentencias de asignación en programas escritos en programación de alto nivel (desde
ahora HLL <<High Level Language>>), y muchas de estas son de la forma sencilla A B. Además,
hay un número significativo de accesos a operandos por cada sentencia de HLL. Si juntamos estos
resultados con el hecho de que la mayoría de los accesos se hacen a datos escalares locales, se puede
pensar en una fuerte dependencia del almacenamiento en registros.
La razón de que esté indicando ese almacenamiento en registros es que éstos constituyen el dispositivo de
almacenamiento más rápido disponible; más que la memoria principal y que la cache. El banco de
registros es pequeño físicamente, está en el mismo chip que la ALU y la unidad de control, y emplea
direcciones mucha más cortas que las de la cache y la memoria. Por tanto, se necesita una estrategia que
permita que los operandos a los que se accede con mayor frecuencia se encuentren en registros, y que se
minimicen las operaciones registro – memoria.
Son posibles dos aproximaciones básicas: una basada en el software y la otra en hardware. La
aproximación por software consiste en confiar al compilador la maximización del uso de los registros. El
compilador intentará asignar registros a las variables que se usen más en un período de tiempo dado. Esta
aproximación requiere el uso de sofisticados algoritmos de análisis de programas. La aproximación por
hardware consiste sencillamente en usar más registros, de manera que más variables puedan mantenerse
en registros durante períodos de tiempo más largos.

Ventanas de registros.

A primera vista, el uso de un conjunto amplio de registros debería reducir la necesidad de acceder a
memoria. La labor del diseño es organizar los registros de tal modo que se alcance esa meta.
Ya que la mayoría de las referencias a operadores se hacen a datos escalares locales, la solución evidente
es almacenar estos en registros, reservando tal vez varios registros para variables globales. El problema es
que la definición de local varía con cada llamada y retorno de procedimientos, operaciones que suceden
con frecuencia. En cada llamada las variables locales deben guardarse desde los registros en la memoria,
para que los registros puedan ser utilizados por el programa llamado. Además deben pasarse parámetros.
En el retorno, las variables del programa padre tienen que ser reestablecidas (cargadas de nuevo en los
registros) y así devolver los resultados al programa padre.

mundoUTN.com.ar
MundoUTN.com.ar

La solución se basa en otros dos resultados. En primer lugar un procedimiento típico emplea solo unos
pocos parámetros de llamadas y variables locales. En segundo lugar la profundidad de activación de
procedimientos fluctúa dentro de un rango relativamente pequeño. Para explorar estas propiedades se
usan múltiples conjuntos pequeños de registros, cada uno asignado a un procedimiento distinto. Una
llamada a un procedimiento hace que el procesador conmute automáticamente a una ventana de registros
distinta de tamaño fijo, en lugar salvaguardar los registros en memoria. Las ventanas de procedimiento
adyacente están parcialmente solapadas para permitir el paso de parámetros.

En todo momento solo es visible una ventana de registros, y se direcciona como si fuera el último
conjunto de registros. La ventana se divide en tres áreas de tamaño fijo. Los registros de parámetros
contienen parámetros pasados al procedimiento en curso desde el procedimiento que lo llamó, y los
resultados a devolver a este. Los registros locales se usan para variables locales, según la asignación que
realice el compilador. Los registros temporales se usan para intercambiar parámetros y resultados con el
siguiente nivel más bajo (el procedimiento llamado por el procedimiento en curso). Los registros
temporales de un nivel son físicamente los mismos que los registros de parámetros del nivel más bajo
adyacente. Este solapamiento posibilita que los parámetros se pasen sin que exista una transferencia de
datos real.
Para manejar cualquier posible patrón de llamada y retorno, el número de ventanas de registros tendría
que se ilimitado. En lugar de eso las ventanas de registros se pueden usar para contener unas pocas (las
más resistentes) activaciones de procedimiento. Las activaciones más antiguas han de salvaguardarse en
memoria y restaurarse más tarde, cuando la profundidad de anidamiento disminuya, de este modo, la
organización real del banco de registros es un buffer circular de ventanas solapadas.

mundoUTN.com.ar
MundoUTN.com.ar

Este buffer de seis ventanas está lleno hasta una profundidad de 4 (A llamó a B, B llamó a C, C llamó a
D), siendo D el procedimiento activo. El puntero de ventana en curso (CWP) apunta a la ventana del
procedimiento activo actualmente. Las referencias de una instrucción máquina a registros se transforman
con este puntero para determinar el registro físico real. El puntero de ventana salvada (SWP) identifica la
ventana guardada en memoria más recientemente. Si el procedimiento D llama ahora al procedimiento E
se colocan en los registros temporales de D (el solapamiento entre w3 y w29), y el CWP se avanza en una
ventana.
Si el procedimiento E hace después una llamada al procedimiento F, ésta no puede llevarse a cabo con el
estado actual del buffer. Ello se debe a que la ventana F se solapa con la de A. Si F comienza a cargar sus
registros temporales, como preparación para una llamada, esto sobrescribirá los registros de parámetros
de A (A.in). Por tanto, cuando al incrementar CWP (módulo 6), éste llega a ser igual a SWP, tiene lugar
una interrupción, y la ventana de A se guarda. Sólo hay que guardar las dos primeras partes (A.in y
A.loc). Después se incrementa el SWP, y la llamada a F sigue adelante. En los retornos ocurre una
interrupción similar, ejemplo con posterioridad a la activación de F, cuando B retorna a A, el CWP se
decrementa y llega a ser igual a SWP. Esto causa una interrupción, cuyo resultado es la restauración de la
ventana de A.
De esto se deduce que un banco de registros de N ventanas puede contener solo N-1 activaciones de
procedimientos.

Variables globales

El esquema de ventanas no contempla la necesidad de almacenar las variables globales: aquellas a las que
accede más de un procedimiento. Se sugieren dos opciones. La primera es que el compilador asigne
posiciones de memoria a las variables declaradas como globales en un HLL, y que todas las instrucciones
máquina que referencien esas variables usen operandos referenciados en memoria. Esto es sencillo desde
los puntos de vista hardware y software (compilador). No obstante, para variables globales a las que se
accede frecuentemente, este esquema es ineficiente.

mundoUTN.com.ar
MundoUTN.com.ar

Una alternativa es incorporara al procesador un conjunto de registros globales. Estos registros serían fijos
en cuanto a su número, y accesibles a todos los procedimientos. Se puede usar un esquema de numeración
unificado para simplificar el formato de instrucciones. Por ejemplo, las referencias a los registros desde el
0 hasta el 7 pueden indicar registros globales únicos, y las referencias a los registros 8 a 31 pueden
transformarse para seleccionar los registros físicos de la ventana en curso. Esto conlleva un hardware
añadido, que se encarga de adaptar la división en el direccionamiento de los registros. Además, el
compilador ha de decidir qué variables globales deben ser asignadas a registros.

Un amplio banco de registros frente a una cache.

El banco d registros organizado en ventanas funciona como un buffer pequeño y rápido, que contiene un
subconjunto de todas las variables que probablemente se usen mucho. El banco de registros se comporta
de manera muy similar a una memoria cache. Surge por tanto la cuestión de si sería más sencillo y mejor,
usar una cache y un tradicional banco de registros pequeño.
El banco de registros basados n ventanas contiene todas las variables escalares locales (excepto en el caso
de desbordamiento de ventana) de las N-1 activaciones de procedimientos más recientes. La cache
contiene una selección de las variables escalares usadas recientemente. El banco de registros debería
ahorrar tiempo, ya que guarda todas las variables escalares locales. La cache puede hacer un uso más
eficiente del espacio, ya que reacciona ante las situaciones dinámicamente. Las caches generalmente
tratan todas las referencias a memoria del mismo modo, incluyendo las instrucciones y otros tipos de
datos. Así es posible un ahorro en estas otras áreas con la cache, y no con un banco de registros.
Un banco de registros puede hacer un uso ineficiente del espacio, porque no todos los procedimientos
necesitarán el espacio de ventana completo asignado a ellos. Por otro lado, la cache adolece de otro tipo
de ineficiencia: los datos se leen en la cache por bloques. Mientras que el banco de registros contiene sólo
las variables en uso, la cache lee un bloque entero de datos y algo, o mucho, de esto no se usará.
La cache es capaz de manipular tanto variables globales como locales. Por regla general, hay muchos
datos escalares globales, pero de ellos sólo unos pocos se usan mucho. Una cache descubrirá
dinámicamente esas variables, y las almacenará. Si el banco de registros basado en ventanas se
complementa con registros globales, también puede contener algunos datos escalares globales. Para un
compilador es difícil determinar qué datos globales se usarán mucho.
Con el banco de registros, las transferencias de datos entre registros y memoria queda determinada por la
profundidad de anidamiento de los procedimientos. Como esta profundidad normalmente fluctúa en un
estrecho margen, el acceso a memoria es relativamente poco frecuente. Casi todas las memorias cache son
asociativas por conjuntos con un tamaño de conjunto pequeño. De este modo, existe el peligro de que
otros datos o instrucciones sobrescriban las variables usadas con frecuencia.
Existe una característica en la cual la aproximación de los registros es claramente superior, y que nos
indica que un sistema basado en cache será notablemente más lento. La distinción viene dada por la
sobrecarga de direccionamiento experimentada por cada una de las dos aproximaciones.
Para referenciar un dato escalar local en un banco de registros basado en ventanas, se usan un número de
registros “virtual” y un número de ventanas. Los dos pueden proporcionarse a un decodificador
relativamente sencillo para seleccionar uno de los registros físicos. Para referenciar una posición de
memoria en la cache, hay que generar una dirección de memoria completa. La complejidad de esta
operación depende del modo de direccionamiento. En una cache asociativa por conjuntos, una parte de la
dirección se usa para leer un número de palabras y etiquetas igual al tamaño del conjunto. Otra parte de la
dirección se compara con las etiquetas, y se selecciona una de las palabras leídas.
En el caso de que la cache sea tan rápida como el banco de registros, el tiempo de acceso será
considerablemente más grande, por ende desde el punto de vista de prestaciones el banco de registros
basado en ventanas es superior para datos escalares locales. Se puede conseguir una mejora adicional en
las prestaciones añadiendo una cache sólo para instrucciones.

mundoUTN.com.ar
MundoUTN.com.ar

Banco de registro basado en ventanas

Cache

mundoUTN.com.ar
MundoUTN.com.ar

Optimización de registros basada en el compilador.

Una máquina RISC que contiene únicamente un pequeño número de registros (ejemplo 16-32), en este
caso el uso optimizado de registros es responsabilidad del compilador. Un programa escrito en un
lenguaje de alto nivel, no tiene referencias explícitas a los registros. En su lugar, las cantidades son
referidas simbólicamente en el programa. El objetivo del compilador es mantener en registros, en lugar de
en memoria, los operadores necesarios para tantos cálculos como sea posible, y minimizar las operaciones
de carga y almacenamiento.
Por lo general se sigue el siguiente enfoque: Cada cantidad del programa candidata para residir en un
registro se asigna a un registro simbólico o virtual. El compilador entonces asigna el número ilimitado de
registros simbólicos a un número fijo de registros reales. Los registros simbólicos cuya utilización no se
solape pueden compartir el mismo registro real. Si en una parte concreta del programa hay más cantidades
a tratar que registros reales, algunas de las cantidades se asignan a posiciones de memoria. Se usan las
instrucciones de carga y almacenamiento para colocar temporalmente cantidades en registros en las
operaciones de cálculo.
Lo esencial de la labor de optimización es decidir qué cantidades tienen que ser asignadas a registros en
cualquier punto determinado del programa. La técnica usada más comúnmente en los compiladores para
RISC se conoce como “coloreado de grafos”.
El problema del coloreado de grafos es el siguiente: dado un grafo que consta de nodos y arcos, asignar
colorea a los nodos de manera que nodos adyacentes tengan colores diferentes, y hacerlo de tal forma que
se minimice el número de colores distintos. Este problema se adapta al problema de los compiladores de
la siguiente forma. En primer lugar, el programa se analiza para construir un grafo de interferencias entre
registros. Los nodos del grafo son los registros simbólicos. Si dos registros simbólicos están “vivos”
durante el mismo fragmento de programa, entonces se unen por un arco para representar su interferencia.
Se intenta colorear el grafo con n colores, donde n es el número de registros. Si este proceso no tiene
éxito completo, los nodos que no se pueden colorear se colocan en memoria y se tienen que usar cargas y
almacenamientos para crear espacio para las cantidades afectadas cuando éstas se necesiten.

mundoUTN.com.ar
MundoUTN.com.ar

Arquitectura de repertorio reducido de instrucciones.

Hoy en día, los programas cada vez más grandes y complejos demandan mayor velocidad en el
procesamiento de información, lo que implica la búsqueda de microprocesadores más rápidos y eficientes.
Los avances y progresos en la tecnología de semiconductores, han reducido las diferencias en las
velocidades de procesamiento de los microprocesadores con las velocidades de las memorias, lo que ha
repercutido en nuevas tecnologías en el desarrollo de microprocesadores. Hay quienes consideran que en
breve los microprocesadores RISC (reduced instruction set computer) sustituirán a los CISC (complex
instruction set computer), pero existe el hecho que los microprocesadores CISC tienen un mercado de
software muy difundido, aunque tampoco tendrán ya que establecer nuevas familias en comparación con
el desarrollo de nuevos proyectos con tecnología RISC.
La arquitectura RISC plantea en su filosofía de diseño una relación muy estrecha entre los compiladores y
la misma arquitectura como se verá más adelante.
Veamos primero cual es el significado de los términos CISC y RISC:
• CISC (complex instruction set computer) Computadoras con un conjunto de instrucciones
complejo.
• RISC (reduced instruction set computer) Computadoras con un conjunto de instrucciones
reducido.
Los atributos complejo y reducido describen las diferencias entre los dos modelos de arquitectura para
microprocesadores solo de forma superficial. Se requiere de muchas otras características esenciales para
definir los RISC y los CISC típicos. Aun más, existen diversos procesadores que no se pueden asignar
con facilidad a ninguna categoría determinada.
Así, los términos complejo y reducido, expresan muy bien una importante característica definitiva,
siempre que no se tomen solo como referencia las instrucciones, sino que se considere también la
complejidad del hardware del procesador.
Con tecnologías de semiconductores comparables e igual frecuencia de reloj, un procesador RISC típico
tiene una capacidad de procesamiento de dos a cuatro veces mayor que la de un CISC, pero su estructura
de hardware es tan simple, que se puede realizar en una fracción de la superficie ocupada por el circuito
integrado de un procesador CISC.
Esto hace suponer que RISC reemplazará al CISC, pero la respuesta a esta cuestión no es tan simple ya
que:
• Para aplicar una determinada arquitectura de microprocesador son decisivas las condiciones de
realización técnica y sobre todo la rentabilidad, incluyendo los costos de software.
• Existían y existen razones de compatibilidad para desarrollar y utilizar procesadores de estructura
compleja así como un extenso conjunto de instrucciones.
La meta principal es incrementar el rendimiento del procesador, ya sea optimizando alguno existente o se
desee crear uno nuevo. Para esto se deben considerar tres áreas principales a cubrir en el diseño del
procesador y estas son:
• La arquitectura.
• La tecnología de proceso.
• El encapsulado.
La tecnología de proceso, se refiere a los materiales y técnicas utilizadas en la fabricación del circuito
integrado, el encapsulado se refiere a cómo se integra un procesador con lo que lo rodea en un sistema
funcional, que de alguna manera determina la velocidad total del sistema.
Aunque la tecnología de proceso y de encapsulado son vitales en la elaboración de procesadores más
rápidos, es la arquitectura del procesador lo que hace la diferencia entre el rendimiento de una CPU
(Control Process Unit) y otra. Y es en la evaluación de las arquitecturas RISC y CISC donde centraremos
nuestra atención.
Dependiendo de cómo el procesador almacena los operandos de las instrucciones de la CPU, existen tres
tipos de juegos de instrucciones:
1. Juego de instrucciones para arquitecturas basadas en pilas.
2. Juego de instrucciones para arquitecturas basadas en acumulador.
3. Juego de instrucciones para arquitecturas basadas en registros.

10

mundoUTN.com.ar
MundoUTN.com.ar

Las arquitecturas RISC y CISC son ejemplos de CPU con un conjunto de instrucciones para arquitecturas
basadas en registros.

Arquitecturas CISCS

La microprogramación es una característica importante y esencial de casi todas las arquitecturas CISC.
Como por ejemplo:
Intel 8086, 8088, 80286, 80386, 80486.
Motorola 68000, 68010, 68020, 68030, 6840.
La microprogramación significa que cada instrucción de máquina es interpretada por un microprograma
localizado en una memoria en el circuito integrado del procesador.
En la década de los sesentas la microprogramación, por sus características, era la técnica más apropiada
para las tecnologías de memorias existentes en esa época y permitía desarrollar también procesadores con
compatibilidad ascendente. En consecuencia, los procesadores se dotaron de poderosos conjuntos de
instrucciones.
Las instrucciones compuestas son decodificadas internamente y ejecutadas con una serie de
microinstrucciones almacenadas en una ROM interna. Para esto se requieren de varios ciclos de reloj (al
menos uno por microinstrucción).

Arquitecturas RISCS

Buscando aumentar la velocidad del procesamiento se descubrió en base a experimentos que, con una
determinada arquitectura de base, la ejecución de programas compilados directamente con
microinstrucciones y residentes en memoria externa al circuito integrado resultaban ser más eficientes,
gracias a que el tiempo de acceso de las memorias se fue decrementando conforme se mejoraba su
tecnología de encapsulado.
Debido a que se tiene un conjunto de instrucciones simplificado, éstas se pueden implantar por hardware
directamente en la CPU, lo cual elimina el microcódigo y la necesidad de decodificar instrucciones
complejas.
En investigaciones hechas a mediados de la década de los setentas, con respecto a la frecuencia de
utilización de una instrucción en un CISC y al tiempo para su ejecución, se observó lo siguiente:
- Alrededor del 20% de las instrucciones ocupa el 80% del tiempo total de ejecución de un programa.
- Existen secuencias de instrucciones simples que obtienen el mismo resultado que secuencias complejas
predeterminadas, pero requieren tiempos de ejecución más cortos.
Las características esenciales de una arquitectura RISC pueden resumirse como sigue:
• Estos microprocesadores siguen tomando como base el esquema moderno de Von Neumann.
• Las instrucciones, aunque con otras características, siguen divididas en tres grupos:
a)Transferencia.
b)Operaciones.
c)Control de flujo.
• Reducción del conjunto de instrucciones a instrucciones básicas simples, con la que pueden
implantarse todas las operaciones complejas.
• Arquitectura del tipo load-store (carga y almacena). Las únicas instrucciones que tienen acceso a
la memoria son 'load' y 'store'; registro a registro, con un menor número de acceso a memoria.
• Casi todas las instrucciones pueden ejecutarse dentro de un ciclo de reloj. Con un control
implantado por hardware (con un diseño del tipo load-store), casi todas las instrucciones se pueden
ejecutar cada ciclo de reloj, base importante para la reorganización de la ejecución de instrucciones por
medio de un compilador.
• Pipeline (ejecución simultánea de varias instrucciones). Posibilidad de reducir el número de ciclos
de máquina necesarios para la ejecución de la instrucción, ya que esta técnica permite que una instrucción
puede empezar a ejecutarse antes de que haya terminado la anterior.
El hecho de que la estructura simple de un procesador RISC conduzca a una notable reducción de la
superficie del circuito integrado, se aprovecha con frecuencia para ubicar en el mismo, funciones
adicionales:
11

mundoUTN.com.ar
MundoUTN.com.ar

• Unidad para el procesamiento aritmético de punto flotante.


• Unidad de administración de memoria.
• Funciones de control de memoria cache.
• Implantación de un conjunto de registros múltiples.

La relativa sencillez de la arquitectura de los procesadores RISC conduce a ciclos de diseño más cortos
cuando se desarrollan nuevas versiones, lo que posibilita siempre la aplicación de las más recientes
tecnologías de semiconductores. Por ello, los procesadores RISC no solo tienden a ofrecer una capacidad
de procesamiento del sistema de 2 a 4 veces mayor, sino que los saltos de capacidad que se producen de
generación en generación son mucho mayores que en los CISC.
Por otra parte, es necesario considerar también que:
• La disponibilidad de memorias grandes, baratas y con tiempos de acceso menores de 60 ns en
tecnologías CMOS.
• Módulos SRAM (Memoria de acceso aleatorio estática) para memorias cache con tiempos de
acceso menores a los 15 ns.
• Tecnologías de encapsulado que permiten realizar más de 120 terminales.
Esto ha hecho cambiar, en la segunda mitad de la década de los ochentas, esencialmente las condiciones
técnicas para arquitecturas RISC.

Principios de diseño de las máquinas RISC

Resulta un tanto ingenuo querer abarcar completamente los principios de diseño de las máquinas RISC,
sin embargo, se intentará presentar de una manera general la filosofía básica de diseño de estas maquinas,
teniendo en cuenta que dicha filosofía puede presentar variantes. Es muy importante conocer estos
principios básicos, pues de éstos se desprenden algunas características importantes de los sistemas
basados en microprocesadores RISC.
En el diseño de una máquina RISC se tienen cinco pasos:
1. Analizar las aplicaciones para encontrar las operaciones clave.
2. Diseñar un bus de datos que sea óptimo para las operaciones clave.
3. Diseñar instrucciones que realicen las operaciones clave utilizando el bus de datos.
4. Agregar nuevas instrucciones sólo si no hacen más lenta a la máquina.
5. Repetir este proceso para otros recursos.
El primer punto se refiere a que el diseñador deberá encontrar qué es lo que hacen en realidad los
programas que se pretenden ejecutar. Ya sea que los programas a ejecutar sean del tipo algorítmicos
tradicionales, o estén dirigidos a robótica o al diseño asistido por computadora.
La parte medular de cualquier sistema es la que contiene los registros, el ALU y los 'buses' que los
conectan. Se debe optimizar este circuito para el lenguaje o aplicación en cuestión. El tiempo requerido,
(denominado tiempo del ciclo del bus de datos) para extraer los operandos de sus registros, mover los
datos a través del ALU y almacenar el resultado de nuevo en un registro, deberá hacerse en el tiempo más
corto posible.
El siguiente punto a cubrir es diseñar instrucciones de máquina que hagan un buen uso del bus de datos.
Por lo general se necesitan solo unas cuantas instrucciones y modos de direccionamiento; sólo se deben
colocar instrucciones adicionales si serán usadas con frecuencia y no reducen el desempeño de las más
importantes.
Siempre que aparezca una nueva y atractiva característica, deberá analizarse y ver la forma en que se
afecta al ciclo de bus. Si se incrementa el tiempo del ciclo, probablemente no vale la pena tenerla.
Por último, el proceso anterior debe repetirse para otros recursos dentro del sistema, tales como memoria
cache, administración de memoria, coprocesadores de punto flotante, etcétera.
Una vez planteadas las características principales de la arquitectura RISC así como la filosofía de su
diseño, podríamos extender el análisis y estudio de cada una de las características importantes de las
arquitecturas RISC y las implicaciones que estas tienen.

12

mundoUTN.com.ar
MundoUTN.com.ar

Papel de los compiladores en un sistema RISC

El compilador juega un papel clave para un sistema RISC equilibrado.


Todas las operaciones complejas se trasladan al microprocesador por medio de conexiones fijas en el
circuito integrado para agilizar las instrucciones básicas más importantes. De esta manera, el compilador
asume la función de un mediador inteligente entre el programa de aplicación y el microprocesador. Es
decir, se hace un gran esfuerzo para mantener al hardware tan simple como sea posible, aún a costa de
hacer al compilador considerablemente más complicado. Esta estrategia se encuentra en clara contra
posición con las máquinas CISC que tienen modos de direccionamiento muy complicados. En la práctica,
la existencia en algunos modos de direccionamiento complicados en los microprocesadores CISC, hacen
que tanto el compilador como el microprograma sean muy complicados.
No obstante, las máquinas CISC no tienen características complicadas como carga, almacenamiento y
salto que consumen mucho tiempo, las cuales en efecto aumentan la complejidad del compilador.
Para suministrar datos al microprocesador de tal forma que siempre esté trabajando en forma eficiente, se
aplican diferentes técnicas de optimización en distintos niveles jerárquicos del software.
Los diseñadores de RISC en la empresa MIP y en Hewlett Packard trabajan según la regla siguiente:
Una instrucción ingresa en forma fija en el circuito integrado del procesador (es decir, se alambra
físicamente en el procesador) si se ha demostrado que la capacidad total del sistema se incrementa en por
lo menos un 1%.
En cambio, los procesadores CISC, han sido desarrollados por equipos especializados de las empresas
productoras de semiconductores y con frecuencia el desarrollo de compiladores se sigue por separado. Por
consiguiente, los diseñadores de los compiladores se encuentran con una interfaz hacia el procesador ya
definido y no pueden influir sobre la distribución óptima de las funciones entre el procesador y
compilador.
Las empresas de software que desarrollan compiladores y programas de aplicación, tienden por razones
de rentabilidad, a utilizar diferentes procesadores como usuarios de su software en lugar de realizar una
optimización completa, y aprovechar así las respectivas características de cada uno. Lo cual también
genera otros factores negativos de eficiencia. Esta limitación de las posibilidades de optimización del
sistema, que viene dada a menudo por una obligada compatibilidad, se superó con los modernos
desarrollos RISC.

Capacidad de procesamiento de los sistemas desde el punto de vista del usuario.

Aparte de la base conceptual para el desarrollo de un sistema de computación de alta calidad, se requieren
técnicas especiales para optimizar cada uno de los factores que determinan la capacidad de
procesamiento, la cual, solo puede definirse con el programa de aplicación.
La información suministrada por un fabricante, sobre la velocidad en mips (millones de Instrucciones por
segundo) que una arquitectura es capaz de realizar, carece de relevancia hasta que el usuario sepa cuantas
instrucciones genera el respectivo compilador, al traducir su programa de aplicación y cuánto tiempo
tarda la ejecución de estas instrucciones, y solo el análisis de diferentes pruebas y comparaciones de
rendimiento ("benchmarks) da una idea aproximada, que el usuario puede aplicar para delimitar las
arquitecturas adecuadas.
Dos diferentes puntos de vista acerca de capacidad de procesamiento del sistema.
• Sistema reprogramable. Un usuario que necesite desarrollar un sistema reprogramable, no está
interesado en obtener una alta capacidad de procesamiento.
• Sistema incluido o dedicado. En estos sistemas el principal objetivo es procesar en forma
repetitiva una serie de aplicaciones o funciones determinadas, y es de suma importancia la mayor
cantidad posible de pruebas y comparaciones de rendimiento ("benchmarks”) diferentes.
Así, estas pruebas y comparaciones sirven para determinar la capacidad de procesamiento de los sistemas,
pero solo el análisis de varios resultados de diferentes programas da una idea aproximada de la capacidad
de procesamiento real.

13

mundoUTN.com.ar
MundoUTN.com.ar

Aplicaciones de los procesadores RISC

Las arquitecturas CISC utilizadas desde hace 15 años han permitido desarrollar un gran número de
productos de software. Ello representa una considerable inversión y asegura a estas familias de
procesadores un mercado creciente. Sin embargo, simultáneamente aumentan las aplicaciones en las
cuales la capacidad de procesamiento que se pueda obtener del sistema es más importante que la
compatibilidad con el hardware y el software anteriores, lo cual no solo es válido en los subsistemas de
alta capacidad en el campo de los sistemas llamados "embedded", en los que siempre dominaron las
soluciones especiales de alta capacidad de procesamiento sino también para las estaciones de trabajo
("workstations"). Esta clase de equipos se han introducido poco a poco en oficinas, en la medicina y en
bancos, debido a los cada vez más voluminosos y complejos paquetes de software que con sus crecientes
requerimientos de reproducción visual, que antes se encontraban solo en el campo técnico de la
investigación y desarrollo.
En este tipo de equipos, el software de aplicación, se ejecuta bajo el sistema operativo UNIX, el cual es
escrito en lenguaje C, por lo que las arquitecturas RISC actuales están adaptadas y optimizadas para este
lenguaje de alto nivel. Por ello, todos los productores de estaciones de trabajo de renombre, han pasado en
pocos años, de los procesadores CISC a los RISC, lo cual se refleja en el fuerte incremento anual del
número de procesadores RISC, (los procesadores RISC de 32 bits han visto crecer su mercado hasta en un
150% anual). En pocos años, el RISC conquistará de 25 al 30% del mercado de los 32 bits, pese al
aparentemente abrumador volumen de software basado en procesadores con el estándar CISC que se ha
comercializado en todo el mundo.
La arquitectura MIPS-RISC ha encontrado, en el sector de estaciones de trabajo, la mayor aceptación. Los
procesadores MIPS son fabricados y comercializados por cinco empresas productoras de
semiconductores, entre las que figuran NEC y Siemens. Los procesadores de los cinco proveedores son
compatibles en cuanto a las terminales, las funciones y los bits.

Conclusiones.

Cada usuario debe decidirse a favor o en contra de determinada arquitectura de procesador en función de
la aplicación concreta que quiera realizar. Esto vale tanto para la decisión por una determinada
arquitectura CISC o RISC, como para determinar si RISC puede emplearse en forma rentable para una
aplicación concreta.
• Nunca será decisiva únicamente la capacidad de procesamiento del microprocesador, y sí la
capacidad real que puede alcanzar el sistema en su conjunto.
• Los costos, por su parte, también serán evaluados.
Supongamos por ejemplo, que el precio de un procesador sea de $500.00 USD, éste será secundario para
un usuario que diseña una estación de trabajo para venderla después a un precio de $100 000.00 USD. Su
decisión se orientará exclusivamente por la potencialidad de este procesador.
RISC ofrece soluciones atractivas donde se requiere una elevada capacidad de procesamiento y se
presente una orientación hacia los lenguajes de alto nivel.
En el campo industrial existe un gran número de aplicaciones que ni siquiera agotan las posibilidades de
los controladores CISC de 8 bits actuales.
Si bien el campo de aplicaciones de las arquitecturas RISC de alta capacidad crece con fuerza, esto no
equivale al fin de otras arquitecturas de procesadores y controladores acreditadas que también seguirán
perfeccionándose, lo que si resulta dudoso es la creación de familias CISC completamente nuevas.
Adoptando técnicas típicas de los procesadores RISC en las nuevas versiones de procesadores CISC, se
intenta encontrar nuevas rutas para el incremento de la capacidad de las familias CISC ya establecidas.
Entre tanto, los procesadores RISC han conquistado el sector de las estaciones de trabajo, dominado antes
por los procesadores Motorola 68 000, y es muy probable que acosen la arquitectura Intel en el sector
superior de las PC's.
Las decisiones en el mercado las toman los usuarios, y aquí, el software o la aplicación concreta juegan
un papel mucho más importante que las diferencias entre las estructuras que son inapreciables para el
usuario final.

14

mundoUTN.com.ar
MundoUTN.com.ar

¿Por qué CISC?

La tendencia hacia repertorios de instrucciones más ricos que incluyen un número mayor de instrucciones
e instrucciones más complejas, ha sido motivado por dos razones principales: el deseo de simplificar los
compiladores, y el deseo de mejorar las prestaciones. Sirvió de base a estas razones el cambio de los
programadores hacia los lenguajes de alto nivel (HLL), que hizo que los arquitectos intentaran diseñar
máquinas que proporcionaran mejor soporte para los HLL.
En la simplificación de los compiladores, la labor de del escritor de compiladores es generar una
secuencia de instrucciones máquina para cada sentencia de HLL. Si existen instrucciones máquina que se
parezcan a sentencias del HLL, la tarea se simplifica. Este razonamiento fue puesto en duda por los
investigadores de los RISC. Estos han encontrado que las instrucciones máquina complejas son con
frecuencia difíciles de aprovechar, ya que el compilador, debe descubrir aquellos casos que se ajustan
perfectamente a la construcción. La tarea de optimizar el código generado para minimizar su tamaño,
reducir el número de instrucciones ejecutadas y mejorar la segmentación es mucho más difícil con un
repertorio complejo de instrucciones. Las instrucciones de un programa compilado son comparativamente
las más sencillas.
La otra razón importante mencionada es la esperanza de que un CISC produzca programas más pequeños
y rápidos. Los programas más pequeños tienen dos ventajas. En primer lugar como el programa ocupa
menos memoria, hay un ahorro de este recurso. Como la memoria hoy día es tan barata, la ventaja
potencial ya no es primordial. Tiene mayor importancia el hecho de que programas más pequeños
mejoren las prestaciones, lo que ocurre por dos motivos. El primero es que, el que haya menos
instrucciones significa que hay que captar menos bytes de instrucciones. El segundo es que, en un entorno
paginado los programas más pequeños ocupan menos páginas, reduciendo las faltas de página.
El problema de este razonamiento es que está lejos de ser cierto que un programa para un CISC sea más
pequeño que el correspondiente programa para un RISC. En muchos casos, el programa para el CISC,
expresado en lenguaje máquina simbólico, puede ser más corto (esto es, tener menos instrucciones), pero
el número de bits de memoria que ocupa no tiene por qué ser más pequeño.
Los compiladores en los CISC tienden a elegir las instrucciones más sencillas, de manera que la concisión
de las instrucciones complejas raramente entra en juego. También, debido a que hay más instrucciones en
un CISC, son precisos códigos de operación más largos, produciendo instrucciones más largas. Por
último, los RISC tienden a acentuar las referencias a registros en lugar de a memoria, y las primeras
necesitan menos bits.
El segundo factor que motivaba repertorios de instrucciones cada vez más complejos era que la ejecución
de instrucciones fuera más rápida. Parece tener sentido el que una operación compleja de un HLL se
ejecute más rápido como una única instrucción máquina, que como una sucesión de instrucciones más
primitivas. Sin embargo esto puede no ser así. La unidad de control completa debe hacerse más compleja,
y/o la memoria de control del microprograma ha de hacerse más grande, para proveer un repertorio de
instrucciones más rico. Cualquiera de los dos factores aumenta el tiempo de ejecución de las instrucciones
simples.
Se han observado que la aceleración en la ejecución de funciones complejas se debe, no tanto a la
potencia de las instrucciones máquina complejas, como a su residencia en el rápido almacenamiento de
control. En realidad, el almacenamiento de control actúa como una cache de instrucciones. De este modo,
el arquitecto de hardware podría intentar determinar qué subrutinas o funciones se usarán con mayor
frecuencia, y asignarlas al almacenamiento de control, implementándolas en microcódigo. La realidad no
es muy alentadora. En los sistemas S/390, instrucciones tales como Translate (traducir) y Extended –
Precision – Floating – Point – Divide (dividir en como flotante con precisión ampliada) residen en
almacenamiento de alta velocidad, mientras que la secuencia involucrada en establecer llamadas a
procedimientos o en iniciar un gestor de interrupción se encuentra en la memoria principal, que es más
lenta.

15

mundoUTN.com.ar
MundoUTN.com.ar

Características de las arquitecturas de repertorio reducido en instrucciones.

1.Una instrucción por ciclo.


2.Operaciones registro a registro.
3.Modos de direccionamiento sencillos.
4.Formatos de instrucción sencillos.

1. Una instrucción máquina cada ciclo máquina: ciclo máquina se define como el tiempo que se tarda en
captar dos operandos desde dos registros, realizar una operación de la ALU y almacenar el resultado en
un registro. Así, las instrucciones máquina de un RISC no deberían ser más complicadas que las
microinstrucciones de las máquinas CISC, y deberían ejecutarse más o menos igual de rápido. Con
instrucciones sencillas y de un ciclo, hay poca o ninguna necesidad de microcódigo; las instrucciones
máquina pueden estas cableadas. Tales instrucciones deben ejecutarse más rápido que las instrucciones
máquina comparables de otras máquinas, ya que no hay que acceder a la memoria de control de
microprogramas durante la ejecución de la instrucción.
2. Las operaciones deben ser del tipo registro a registro, con la excepción de sencillas operaciones LOAD
y STORE para acceder a memoria. Esta forma de diseño simplifica el repertorio de instrucciones y la
unidad de control. Por ejemplo un repertorio de instrucciones RISC puede incluir sólo una o dos
instrucciones ADD, el VAX tiene 25 instrucciones ADD diferentes. Otra ventaja es que tal arquitectura
fomenta la optimización del uso de registros, ya que los operandos accedidos frecuentemente,
permanecen en el almacenamiento de alta velocidad.
3. Modos de direccionamiento sencillos: casi todas las instrucciones RISC usan el sencillo
direccionamiento a registro. Se pueden incluir varios modos adicionales, como el desplazamiento y el
relativo al contador de programa. Otros modos más complejos se pueden sintetizar por software a partir
de los simples. Nuevamente, esta característica de diseño simplifica el repertorio de instrucciones y la
unidad de control.
4. Formato de instrucciones sencillo: generalmente, solo se usa un formato o unos pocos. La longitud de
las instrucciones es fija y alineada en los límites de una palabra. Las posiciones de los campos,
especialmente la del código de operación son fijas. Este tipo de diseño tiene varias ventajas. Con campos
fijos, la decodificación del código de operación y el acceso a los operandos en registros que pueden tener
lugar simultáneamente. Los formatos sencillos simplifican la unidad de control. Se optimiza la captación
de instrucciones, ya que se captan unidades de una palabra de longitud. El alineamiento en el límite de
una palabra significa también que una única instrucción no traspasa los límites de una página.
Estas características pueden evaluarse conjuntamente para determinar las ventajas potenciales de la
aproximación RISC. Las ventajas se pueden separar en dos categorías: las relacionadas con las
prestaciones y las relacionadas con la implementación VLSI.
Respecto a las prestaciones, se puede presentar cierta cantidad de “pruebas indiciarias”. En primer lugar,
se pueden desarrollar compiladores optimizadores más eficaces. Con instrucciones más primitivas, hay
más ocasiones de sacar funciones fuera de bucles, reorganizar código buscando una mayor eficiencia,
maximizar la utilización de registros, etc. Es incluso posible calcular partes de instrucciones complejas en
tiempo de compilación.
Un segundo punto, es que la mayoría de las instrucciones generadas por un compilador son relativamente
sencillas. Es razonable que una unidad de control, construida expresamente para estas instrucciones y que
usara poco o ningún microcódigo, podría ejecutarla más rápido que un CISC comparable.
Un tercer punto tiene que ver con el uso de segmentación de las instrucciones. Los investigadores de
RISC creen que la técnica de segmentación de las instrucciones que se puede aplicar más eficazmente a
un repertorio reducido de instrucciones.
Un último punto, es que el programa RISC debería ser más sensible a las interrupciones ya que estas se
comprueban entre operaciones bastante elementales. Las arquitecturas son instrucciones complejas, o bien
se restringen las interrupciones a los límites de instrucción o bien tienen que definir puntos interrumpibles
específicos e implementar mecanismos para reanudar la ejecución de una instrucción.

16

mundoUTN.com.ar
MundoUTN.com.ar

Preguntas y respuestas

1) Como se resuelve en la arquitectura RISC el pasaje de parámetros a un Sub-Programa y el retorno de


los mismos:
a) Con un puntero a una posición de memoria que conocen tanto el programa principal como el
programa llamado
b) Se usan los mismos registros especiales que para las variables globales
c) Se usan los registros temporales del conjunto de registros del programa principal
d) Ninguna de las anteriores

RESPUESTA CORRECTA: Opcion a

2) Cual de las siguientes caracteristicas corresponden a la arquitectura RISC:


a) Muchos registros de propósito general
b) Uso de la tecnología del compilador para optimizar el uso de los registros
c) Conjunto de instrucciones limitado y simple
d) Énfasis en optimizar el pipelining de las instrucciones
e) Todas las anteriores
f) Ninguna de las anteriores

RESPUESTA CORRECTA: Opcion e

3) En la “Organización de las ventanas sobrepuestas como buffer circular”, que ocurre cuando el numero
de procedimientos o sub-programas es igual o mayor al numero de ventanas?
a) Es imposible que esto ocurra
b) Se genera una interrupción y la ventana más antigua se guarda en memoria
c) Se agregan dinámicamente ventanas utilizando registros disponibles destinados a otro tipo de tareas

RESPUESTA CORRECTA: Opcion b

4) La arquitectura CISC se caracteriza por que:


a) Necesariamente tiene una ROM con los microcódigos.
b) Tiene pocos modos de direccionamiento.
c) Usan "Pipeline".
d) Utilizan solo instrucciones complejas.
e) Todas las anteriores.
f) Ninguna de las anteriores.

Respuesta Correcta: "a"

5) Cual o cuales de las siguientes caracteristicas corresponden a las arquitecturas de repertorio reducido
de instrucciones:
a) Maquinas de mayor consumo.
b) Se usan en maquinas flexibles.
c) Compiladores sencillos ya que el repertorio de
instrucciones es reducido.
d) Utilizan ROM interna para ejecutar una instruccion por
ciclo.
e) Gran cantidad de registros incorporados en la MP.
f) Todas las anteriores.
g) Ninguna de las anteriores.

Respuesta correcta: "g"

17

mundoUTN.com.ar
MundoUTN.com.ar

Bibliografía
• “Organización y Arquitectura de Computadores”. William Stallings.

• “Organización de Computadoras. Un enfoque estructurado”. Tenembaum, Andrew S.

• “Del CISC al RISC: aumento explosivo de la potencia en los microprocesadores”. Revista Siemens
Enero / Marzo 1991. Siemens Aktiengesellschaft. Munich, RFA:

18

mundoUTN.com.ar

También podría gustarte