Arquitectura Trabajo

59
1. Repertorio de instrucciones: características y funciones Repertorio de instrucciones: Definición: Un conjunto de instrucciones, repertorio de instrucciones, juego de instrucciones o ISA (del inglés instruction set architecture, «arquitectura del conjunto de instrucciones») es una especificación que detalla las instrucciones que una unidad central de procesamiento puede entender y ejecutar, o el conjunto de todos los comandos implementados por un diseño particular de una CPU. El término describe los aspectos del procesador generalmente visibles para un programador, incluyendo los tipos de datos nativos, las instrucciones, los registros, la arquitectura de memoria y las interrupciones, entre otros aspectos. Existen principalmente tres tipos: CISC (Complex Instruction Set Computer), RISC (Reduced Instruction Set Computer) y SISC (Simple Instruction Set Computing). Procesadores con diferentes diseños internos pueden compartir un conjunto de instrucciones; por ejemplo, el Intel Pentium y AMD Athlon implementan versiones casi idénticas del conjunto de instrucciones x86, aunque tienen diseños diferentes. Características : Es un punto de encuentro en que el diseñador del computador y el programador pueden ver la misma máquina. Desde el punto de vista del diseñador, constituye la especificación o requisitos funcionales del procesador: implementar el procesador es una tarea que, en buena parte, implica implementar el repertorio de instrucciones máquina. Desde el punto de vista del usuario, quien elige programar en lenguaje máquina (realmente en lenguaje ensamblador; 8F"6 Sección 10.6) se hace consciente de la estructura de

description

ds

Transcript of Arquitectura Trabajo

Page 1: Arquitectura Trabajo

1 Repertorio de instrucciones caracteriacutesticas y funciones

Repertorio de instrucciones

Definicioacuten

Un conjunto de instrucciones repertorio de instrucciones juego de instrucciones o ISA (del ingleacutes instruction set architecture laquoarquitectura del conjunto de instruccionesraquo) es una especificacioacuten que detalla las instrucciones que una unidad central de procesamiento puede entender y ejecutar o el conjunto de todos los comandos implementados por un disentildeo particular de una CPU El teacutermino describe los aspectos del procesador generalmente visibles para un programador incluyendo los tipos de datos nativos las instrucciones los registros la arquitectura de memoria y las interrupciones entre otros aspectos

Existen principalmente tres tipos CISC (Complex Instruction Set Computer) RISC (Reduced Instruction Set Computer) y SISC (Simple Instruction Set Computing)

Procesadores con diferentes disentildeos internos pueden compartir un conjunto de instrucciones por ejemplo el Intel Pentium y AMD Athlon implementan versiones casi ideacutenticas del conjunto de instrucciones x86 aunque tienen disentildeos diferentes

Caracteriacutesticas

Es un punto de encuentro en que el disentildeador del computador y el programador pueden ver la misma maacutequina

Desde el punto de vista del disentildeador constituye la especificacioacuten o requisitos funcionales del procesador implementar el procesador es una tarea que en buena parte implica implementar el repertorio de instrucciones maacutequina

Desde el punto de vista del usuario quien elige programar en lenguaje maacutequina (realmente en lenguaje ensamblador 8F6 Seccioacuten 106) se hace consciente de la estructura de registros y de memoria de los tipos de datos que acepta directamente la maacutequina y del funcionamiento de la ALU

Determinan El funcionamiento del procesador Al conjunto de instrucciones distintas que puede ejecutar el procesador se denomina repertorio de instrucciones del procesador

ELEMENTOS DE UNA INSTRUCCIOacuteN MAacuteQUINA

bull Coacutedigo de operacioacuten especifica la operacioacuten a realizar (suma ES etc) La operacioacuten se indica mediante un coacutedigo binario denominado coacutedigo de operacioacuten o abreviadamente codop

bull Referencia a operandos fuente u origen la operacioacuten puede implicar a uno o maacutes operan- dos origen es decir operandos que son entradas para la instruccioacuten

bull Referencia al operando de destino o resultado la operacioacuten puede producir un resultado

bull Referencia a la siguiente instruccioacuten dice al procesador de doacutende captar la siguiente instruccioacuten tras completarse la ejecucioacuten de la instruccioacuten actual

La siguiente instruccioacuten a captar estaacute en memoria principal o en el caso de un sistema de memoria virtual bien en memoria principal o en memoria secundaria (disco) En la mayoriacutea de los casos la siguiente instruccioacuten a captar sigue inmediatamente a la instruccioacuten en ejecucioacuten En tales casos no hay referencia expliacutecita a la siguiente instruccioacuten Cuando sea necesaria una referencia expliacutecita debe suministrarse la direccioacuten de memoria principal o de memoria virtual

Los

bull Memoria principal o virtual como en las referencias a instrucciones siguientes debe indicarse la direccioacuten de memoria principal o de memoria virtual

bull Registro del procesador salvo raras excepciones un procesador contiene uno o maacutes registros que pueden ser referenciados por instrucciones maacutequina Si solo existe un registro la referencia a eacutel puede ser impliacutecita Si existe maacutes de uno cada registro tendraacute asignado un nuacutemero uacutenico y la instruccioacuten debe contener el nuacutemero del registro deseado

bull Dispositivo de ES la instruccioacuten debe especificar el moacutedulo y dispositivo de ES para la operacioacuten En el caso de ES asignadas en memoria se daraacute otra direccioacuten de memoria principal o virtual

REPRESENTACIOacuteN DE LAS INSTRUCCIONES

Dentro del computador cada instruccioacuten se representa por una secuencia de bits La instruccioacuten estaacute dividida en campos correspondientes a los elementos constitutivos de la misma En la mayoriacutea de los repertorios de instrucciones se emplea maacutes de un formato Durante su ejecucioacuten la instruccioacuten se escribe en un registro de instruccioacuten (IR) del procesador El procesador debe ser capaz de extraer los datos de los distintos campos de la instruccioacuten para realizar la operacioacuten requerida

Los codops se representan mediante abreviaturas denominadas nemoteacutecnicos que indican la operacioacuten en cuestioacuten Ejemplos usuales son

ADD SumarSUB Restar

MPY MultiplicarDIV DividirLOAD Cargar datos de memoriaSTOR Almacenar datos en memoria

(memorizar)

Los operandos tambieacuten suelen representarse simboacutelicamente Por ejemplo la instruccioacuten

ADD RY

La operacioacuten se realiza con el contenido de la posicioacuten no con su direccioacuten

Es posible pues escribir un programa en lenguaje maacutequina de forma simboacutelica Cada codop simboacutelico tiene una representacioacuten binaria fija y el programador especifica la posicioacuten de cada operando simboacutelico Por ejemplo el programador podriacutea comenzar con una lista de definiciones

X = 513

Y = 514

y asiacute sucesivamente Un sencillo programa aceptariacutea como entrada esta informacioacuten simboacutelica convertiriacutea los codops y referencias a operandos a forma binaria y construiriacutea las instrucciones maacutequina binarias

TIPOS DE INSTRUCCIONES

Una sola instruccioacuten BASIC puede necesitar de tres instrucciones maacutequina Este es un caso tiacutepico de relacioacuten entre un lenguaje de alto nivel y un lenguaje maacutequina Un lenguaje de alto nivel expresa las operaciones de forma algebraica concisa utilizando variables Un lenguaje maacutequina expresa las operaciones de una manera elemental implicando operaciones de transferencia de datos a o desde registros

Debiera tener un conjunto de instrucciones que permitieran al usuario formular cualquier tarea de procesamiento de datos Cualquier programa escrito en alto nivel debe traducirse a lenguaje maacutequina para ser ejecutado Por tanto el repertorio de instrucciones maacutequina debe ser suficientemente amplio como para expresar cualquiera de las instrucciones de un lenguaje de alto nivel Teniendo esto presente los tipos de instrucciones se pueden clasificar de la siguiente manera

bull De procesamiento de datos instrucciones aritmeacuteticas y loacutegicas

Las instrucciones aritmeacuteticas proporcionan capacidad computacional para procesar datos numeacutericos

Las instrucciones loacutegicas (booleanas) operan con los bits de una palabra en lugar de considerarlos como nuacutemeros proporcionando por tanto capacidad para el procesamiento de cualquier otro tipo de datos que el usuario quiera emplear

Estas operaciones se realizan principalmente con datos en registros del procesador

bull De almacenamiento de datos instrucciones de memoria Transfieren los datos entre la memoria y los registros

bull De transferencia de datos instrucciones de ES transfieren programas y datos a memoria y devolver resultados de los caacutelculos al usuario

bull De control instrucciones de comprobacioacuten y de bifurcacioacuten Las de compobaciograven se emplean para comprobar el valor de una palabra de datos o el estado de un caacutelculo Las de bifurcacioacuten se usan entonces para bifurcar a diferentes conjuntos de instrucciones dependiendo de la decisioacuten tomada

NUacuteMERO DE DIRECCIONES

Es una de las formas tradicionales de describir la arquitectura de un procesador Esta dimensioacuten se va haciendo menos significativa a medida que aumenta la complejidad del disentildeo del procesador A pesar de ello merece la pena extenderse y analizar dicha distincioacuten

Las instrucciones aritmeacuteticas y loacutegicas son las que requieren maacutes operandos Praacutecticamente todas las operaciones aritmeacuteticas y loacutegicas son o bien unarias (un operando) o binarias (dos operandos) Asiacute pues necesitariacuteamos un maacuteximo de dos direcciones para referenciar operandos El resultado de una operacioacuten debe almacenarse

lo que sugiere una tercera direccioacuten Finalmente tras completar una instruccioacuten debe captarse la siguiente y su direccioacuten es pues necesaria

El razonamiento anterior sugiere como plausible que una instruccioacuten incluyera cuatro referencias a direcciones dos operandos un resultado y la direccioacuten de la instruccioacuten siguiente En la praacutectica es muy raro encontrar instrucciones que contengan cuatro direcciones La mayoriacutea de las instrucciones tienen una dos o tres direcciones estando impliacutecita la direccioacuten de la instruccioacuten siguiente (obtenida a partir del contador de programa)

La Figura 103 compara instrucciones tiacutepicas de una dos y tres direcciones que podriacutean utilizarse para calcular Y = (A mdash B) [(C + D ( E)] Con tres direcciones cada instruccioacuten especifica dos posiciones de operandos y la posicioacuten del resultado Dado que no queremos alterar el valor de ninguna posicioacuten de operando se utiliza una posicioacuten temporal T para almacenar resultados intermediosMuestra cuatro instrucciones y que la expresioacuten original teniacutea cinco operandos

Las instrucciones con tres direcciones no son comunes ya que requieren formatos relativamente largos para albergar las tres referencias Con instrucciones de dos direcciones para operaciones binarias una de las direcciones debe hacer el servicio doble de uno de los operandos y del resultado Asiacute pues la instruccioacuten laquoSUB Yraquo B realiza el caacutelculo Y mdash B y guarda el resultado en Y El formato de dos direcciones reduce el espacio necesario pero resulta algo engorroso Para evitar que se altere el valor de un operando se utiliza una instruccioacuten laquoMOVEraquo para transferir uno de los valores a una posicioacuten temporal de resultados antes de realizar el caacutelculo Nuestro programa ejemplo se ampliacutea a seis instrucciones La instruccioacuten de una sola direccioacuten es auacuten maacutes simple Para que funcione una segunda direccioacuten debe estar impliacutecita Esto fue lo usual en las primeras maacutequinas en las que la direccioacuten impliacutecita era un registro del procesador conocido como acumulador (AC) El acumulador contiene uno de los operandos y se emplea para almacenar el resultado En nuestro ejemplo se necesitariacutean ocho instrucciones para realizar la tarea

Es de hecho posible arreglaacuterselas con cero direcciones para algunas de instrucciones Las instrucciones con cero direcciones son aplicables a una organizacioacuten especial de memoria denominada pila (laquostackraquo) Una pila es un conjunto de posiciones del tipo last-in-first-out (el primero en entrar es primero en salir) La pila estaacute en una posicioacuten

conocida y a menudo al menos los dos elementos de su cabecera estaacuten en registros del procesador Asiacute pues las instrucciones con cero direcciones refe- renciariacutean dichos elementos de la cabecera

La Tabla 101 resume posibles interpretaciones a considerar para las instrucciones de cero una dos o tres direcciones En todos los casos se supone que la direccioacuten de la siguiente instruccioacuten estaacute impliacutecita y que se va a realizar una operacioacuten con dos operandos origen y un resultado

El nuacutemero de direcciones por instruccioacuten es una decisioacuten baacutesica de disentildeo Menos direcciones por instruccioacuten significa instrucciones maacutes primarias lo que requiere un procesador menos complejo Tambieacuten da lugar a instrucciones maacutes cortas Por otra parte los programas contienen maacutes instrucciones lo que normalmente supone mayor tiempo de ejecucioacuten y programas maacutes largos y complejos Hay tambieacuten un umbral importante entre instrucciones de una y de muacuteltiples direcciones Con instrucciones de una sola direccioacuten el programador tiene generalmente a su disposicioacuten solo un registro de uso general el acumulador

Con instrucciones de muacuteltiples direcciones suele disponerse de muacuteltiples registros de uso general Esto permite que algunas operaciones se realicen solo con registros Ya que los accesos a registros son maacutes raacutepidos que a memoria se acelera la ejecucioacuten Por razones de flexibilidad y facilidad para utilizar varios registros la mayoriacutea de las maacutequinas contemporaacuteneas emplean una combinacioacuten de instrucciones de dos y de tres direcciones

Las decisiones de disentildeo asociadas con la eleccioacuten del nuacutemero de direcciones por instruccioacuten son complicadas debido a otros factores Un aspecto a considerar es si una direccioacuten hace referencia a una posicioacuten de memoria o a un registro Ya que hay menos registros se necesitan menos bits para referendarios Ademaacutes una maacutequina puede per-mitir diversos modos de direccionamiento y la especificacioacuten del modo consume uno o maacutes bits El resultado es que la mayoriacutea de los disentildeos de procesadores hacen uso de varios formatos de instrucciones

DISENtildeO DEL REPERTORIO DE INSTRUCCIONES

Es uno de los aspectos maacutes interesantes y maacutes analizados del disentildeo de un computador El disentildeo de un repertorio de instrucciones es muy complejo ya que afecta a muchos aspectos del computador El repertorio de instrucciones define muchas de las funciones realizadas por el procesador y tiene pues un efecto significativo sobre la implementacioacuten del mismo El repertorio de instrucciones es el medio que tiene el

programador para controlar el procesador En consecuencia deben considerarse las necesidades del programador a la hora de disentildear el repertorio de instrucciones

Algunos aspectos baacutesicos relativos al disentildeo de repertorios de instrucciones siguen siendo temas de controversia Los maacutes importantes entre dichos aspectos fundamentales de disentildeo son

bull El repertorio de operaciones cuaacutentas y queacute operaciones considerar y cuaacuten complejas deben ser

bull Los tipos de datos los distintos tipos de datos con los que se efectuacutean operaciones

bull Los formatos de instrucciones longitud de la instruccioacuten (en bits) nuacutemero de direcciones tamantildeo de los distintos campos etc

bull Los registros nuacutemero de registros del procesador que pueden ser referenciados por las instrucciones y su uso

bull El direccionamiento el modo o modos de direccionamiento mediante los cuales puede especificarse la direccioacuten de un operando

Estos aspectos estaacuten fuertemente interrelacionados y deben considerarse conjuntamente en el disentildeo de un repertorio de instrucciones

La arquitectura RISC cuestiona muchas de las decisiones sobre repertorios de instrucciones tradicionalmente adoptadas en computadores comerciales

TIPOS DE OPERANDOS

Las instrucciones maacutequina operan con datos Las categoriacuteas generales maacutes importantes de datos son

bull Direcciones

bull Nuacutemeros

bull Caracteres

bull Datos loacutegicos

Las direcciones son un tipo de datos En muchos casos debe realizarse alguacuten caacutelculo sobre la referencia a un operando de una instruccioacuten a fin de determinar la direccioacuten de memoria principal o virtual En este contexto las direcciones pueden considerarse como nuacutemeros enteros sin signo

Otros tipos de datos comunes son los nuacutemeros los caracteres y los datos loacutegicos y cada uno de ellos se analiza brevemente en esta seccioacuten Aparte de estos en algunas maacutequinas se utilizan tipos o estructuras de datos especiacuteficos Por ejemplo puede haber operaciones maacutequina que trabajan directamente con listas o cadenas de caracteres

NUacuteMEROS

Todos los lenguajes maacutequina incluyen tipos de datos numeacutericos Incluso en el procesamiento de datos no numeacutericos se necesitan nuacutemeros que actuacuteen como contadores longitudes de campos etc Una distincioacuten importante entre los nuacutemeros utilizados en las matemaacuteticas ordinarias y los almacenados en un computador es que estos uacuteltimos estaacuten limitados Esto es cierto en dos sentidos En primer lugar hay un liacutemite para la magnitud de los nuacutemeros representabas en una maacutequina y en segundo lugar en el caso de nuacutemeros en coma flotante su precisioacuten estaacute limitada Por tanto el programador debe ser consciente de las consecuencias del redondeo el desbordamiento o el desbordamiento a cero

En los computadores son usuales tres tipos de datos numeacutericos

bull Enteros o en coma fija

bull En coma flotante

bull En decimal

CARACTERES

Una forma bastante comuacuten de datos es el texto o secuencias de caracteres Aunque la informacioacuten texual sea maacutes conveniente para las personas no puede ser almacenada o transmitida faacutecilmente en forma de caracteres por los sistemas de comunicacioacuten y de procesamiento de datos Tales sistemas estaacuten disentildeados para datos binarios Por lo tanto se han ideado diversos coacutedigos que permiten representar caracteres mediante secuencias de bits Tal vez el primer ejemplo fue el coacutedigo Morse Hoy en diacutea el coacutedigo de caracteres maacutes utilizado es el alfabeto de referencia internacional (IRA International Reference Alphabet) conocido en los Estados Unidos como ASCII (American Standard Code for Information Interchange) coacutedigo estaacutendar americano para intercambio de informacioacuten (veacutease Tabla 71) Cada caraacutecter es representado en este coacutedigo por un patroacuten distinto de 7 bits pueden representarse por tanto 128 caracteres diferentes Este nuacutemero es mayor que el necesario para representar los caracteres impresos utilizaacutendose algunos de los patrones para representar caracteres de control Algunos de estos se emplean para controlar la impresioacuten de caracteres en una paacutegina Otros caracteres de control estaacuten dedicados para procedimientos de comunicacioacuten Los caracteres codificados en ASCII se memorizan y transmiten utilizando casi siempre ocho bits por caraacutecter El octavo bit puede fijarse a cero o utilizarse como bit de paridad para la deteccioacuten de errores En el segundo caso el valor del bit se pone de manera que el nuacutemero total de unos en cada octeto sea o siempre impar (paridad impar) o siempre par (paridad par)

Observe en la Tabla 71 que con el ASCII los patrones de bits 011XXXX representan los diacutegitos 0 a 9 mediante sus valores binarios equivalentes 0000 a 1001 en los cuatro bits de la derecha Esta codificacioacuten coincide con la empleada en decimal empaquetado facilitaacutendose asiacute la conversioacuten entre ASCII de siete bits y decimal empaquetado de cuatro bits

Otro coacutedigo utilizado para caracteres es el coacutedigo de intercambio decimal codificado en binario ampliado (EBCDIC Extended Binary Coded Decimal Interchange Code) Este coacutedigo de ocho bits se emplea en los grandes computadores de IBM Como el ASCII el EBCDIC es compatible con el decimal empaquetado En el caso del EBCDIC los coacutedigos 11110000 a 11111001 representan los diacutegitos 0 a 9

DATOS LOacuteGICOS

Normalmente cada palabra o cualquier otra unidad direccionable (byte media palabra etc) es tratada como una unidad de datos individual Sin embargo a veces es uacutetil considerar una unidad de laquobits como n elementos o datos de un bit donde cada elemento tiene un valor 1 o 0 Cuando los datos son vistos de esta manera se consideran datos loacutegicos

Esta representacioacuten orientada a bits tiene dos ventajas La primera es que a veces puede interesarnos almacenar una matriz de elementos binarios o booleanos en la que cada elemento pueda tomar solo los valores 1 (verdadero) oacute 0 (falso) Con datos loacutegicos la memoria puede ser entonces utilizada

Repertorio de instrucciones modos de direccionamiento y formatos

DIRECCIONAMIENTO

El campo o campos de direcciones en un formato de instruccioacuten usual estaacute bastante limitado Seriacutea deseable poder referenciar un rango elevado de posiciones de memoria principal o en algunos sistemas de memoria virtual Para conseguir este objetivo se han empleado diversas teacutecnicas de direccionamiento Todas ellas implican alguacuten compromiso entre el rango de direcciones yo flexibilidad de direccionamiento de una parte y por otra el nuacutemero de referencias a memoria yo la complejidad de caacutelculo de las direcciones los modos de direccionamiento maacutes comunes son

bull Inmediato

bull Directo

bull Indirecto

bull Registro

bull Indirecto con registro

bull Con desplazamiento Pila

La Tabla 111 indica el caacutelculo de la direccioacuten realizado para cada modo de direccionamiento

Praacutecticamente todas las arquitecturas de computadores ofrecen maacutes de uno de estos modos de direccionamiento La cuestioacuten que surge es coacutemo determina la unidad de control queacute modo de direccionamiento se estaacute empleando en cada instruccioacuten Se adoptan diversos enfoques alternativos A menudo codops diferentes emplearaacuten modos de direccionamiento distintos Tambieacuten uno o maacutes bits del formato de instruccioacuten

pueden utilizarse como campo de modo El valor del campo de modo determina queacute modo de direccionamiento va a utilizarse

En un sistema sin memoria virtual la direccioacuten efectiva seraacute o una direccioacuten de memoria principal o un registro En un sistema con memoria virtual la direccioacuten efectiva es una direccioacuten virtual o un registro La correspondencia real con una direccioacuten fiacutesica dependeraacute del mecanismo de paginacioacuten y no estaacute visible al programador

DIRECCIONAMIENTO INMEDIATO

Es la forma maacutes sencilla de direccionamiento en el que el operando estaacute en realidad presente en la propia instruccioacuten

Operando = A

Este modo puede utilizarse para definir y utilizar constantes o para fijar valores iniciales de variables Normalmente el nuacutemero se almacena en complemento a dos el bit maacutes a la izquierda del campo de operando se utiliza como bit de signo Cuando el operando se carga en un registro de datos el bit de signo se replica hacia la izquierda hasta la longitud total de la palabra de datos

Como se ha definido anteriormente el pareacutentesis se interpreta como laquocontenido deraquo La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dos

La ventaja del direccionamiento inmediato es que una vez captada la instruccioacuten no se requiere una referencia a memoria para obtener el operando ahorraacutendose pues un ciclo de memoria o de cacheacute en el ciclo de instruccioacuten La desventaja es que el tamantildeo del nuacutemero estaacute restringido a la longitud del campo de direcciones que en la mayoriacutea de los repertorios de instrucciones es pequentildeo comparado con la longitud de palabra

DIRECCIONAMIENTO DIRECTO

Una forma muy sencilla de direccionamiento es el direccionamiento directo en el que el campo de direcciones contiene la direccioacuten efectiva del operando

EA = A

Esta teacutecnica fue comuacuten en las primeras generaciones de computadores y se encuentra auacuten en diversos sistemas Solo requiere una referencia a memoria y no necesita ninguacuten caacutelculo especial La limitacioacuten obvia es que proporciona un espacio de direcciones restringido

DIRECCIONAMIENTO INDIRECTO

El problema del direccionamiento directo es que la longitud del campo de direcciones es normalmente menor que la longitud de palabra limitando pues el rango de direcciones Una solucioacuten es hacer que el campo de direcciones referencie la direccioacuten de una palabra de memoria la cual contenga la direccioacuten completa del operando Esto es lo que se denomina direccionamiento indirecto

EA = (A)

La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dosccedil

Una variante de direccionamiento indirecto raramente utilizada es el direccionamiento multinivel o en cascada

EA = ((A))

En este caso uno de los bits de una palabra de direccioacuten es un indicador de laquoindireccioacutenraquo (I) Si el bit I es 0 la palabra contiene el valor de EA Si el bit I es 1 entonces se invoca otro nivel de laquoindireccioacutenraquo No parece que esta aproximacioacuten ofrezca ninguna ventaja particular y su desventaja es que podriacutean requerirse dos o maacutes referencias para captar un operando

DIRECCIONAMIENTO DE REGISTROS

El direccionamiento de registros es similar al directo La uacutenica diferencia es que el campo de direcciones referencia un registro en lugar de una direccioacuten de memoria principal

EA = R

Por ejemplo si el campo de direccioacuten de registro de la instruccioacuten es 5 la direccioacuten deseada es el registro R5 y el valor del operando es el contenido de R5 Normalmente un campo de direcciones que referencia a registros consta de tres a cinco bits de manera que pueden referenciarse un total de 8 a 32 registros de uso general

Las ventajas del direccionamiento de registros son que (1) solo es necesario un campo pequentildeo de direcciones en la instruccioacuten y (2) no se requieren referencias a memoria Como se comentoacute en el Capiacutetulo 4 el tiempo de acceso a un registro interno del procesador es mucho menor que para la memoria principal La desventaja del direccionamiento a registros es que el espacio de direcciones estaacute muy limitado

Si se hace un uso masivo del direccionamiento a registros en un repertorio de instrucciones los registros del procesador se emplearaacuten intensamente Debido al nuacutemero tan limitado de registros (en comparacioacuten con el nuacutemero de posiciones de memoria principal) usarlos de esta manera tiene sentido solo si se emplean eficientemente Si todo operando se carga de memoria principal a un registro se opera con eacutel una vez y se devuelve a memoria principal resulta que se estariacutea antildeadiendo un paso intermedio improcedente Si en lugar de esto el operando del registro se mantiene en uso durante varias operaciones se estariacutea consiguiendo un ahorro real Un ejemplo son los resultados intermedios de un caacutelculo En particular suponga que se va a implementar en software el algoritmo de multiplicacioacuten en complemento a dos La posicioacuten A del diagrama de flujo (Figura 912) se referencia muchas veces y debiera estar implementada en un registro en lugar de en una posicioacuten de memoria principal

Depende del programador decidir queacute valores deben mantenerse en registros y cuaacuteles deben almacenarse en memoria principal La mayoriacutea de los procesadores modernos emplean muacuteltiples registros de uso general cargando al programador en lenguaje ensamblador (cuando desarrolla compiladores por ejemplo) con la responsabilidad de conseguir una ejecucioacuten eficiente

DIRECCIONAMIENTO INDIRECTO CON REGISTRO

Igual que el direccionamiento de registros es anaacutelogo al directo el direccionamiento indirecto con registro es anaacutelogo al direccionamiento indirecto En ambos casos la diferencia estriba en si el campo de direcciones hace referencia a una posicioacuten de memoria o a un registro Asiacute para el direccionamiento indirecto con registro

EA = (R)

Las ventajas y limitaciones del direccionamiento indirecto con registro son baacutesicamente las mismas que se tienen para el direccionamiento indirecto En ambos casos la limitacioacuten de espacio o rango de direcciones del campo de direcciones se supera

haciendo que dicho campo referencie una posicioacuten de una palabra completa (un registro completo en este caso) que contenga la direccioacuten Ademaacutes el direccionamiento indirecto con registro emplea una referencia menos a memoria que el direccionamiento indirecto

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

Los principales usos del direccionamiento con desplazamiento son

bull Desplazamiento relativo

bull Direccionamiento con registro base

bull Indexado

Direccionamiento relativo Para el direccionamiento relativo tambieacuten llamado direccionamiento relativo al PC el registro referenciado impliacutecitamente es el contador de programa (PC) Es decir la direccioacuten de instruccioacuten actual se suma al campo de direcciones para producir el valor EA Normalmente el campo de direcciones se trata como nuacutemero en complemento a dos para esta operacioacuten En consecuencia la direccioacuten efectiva es un desplazamiento relativo a la direccioacuten de la instruccioacuten

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 2: Arquitectura Trabajo

bull Coacutedigo de operacioacuten especifica la operacioacuten a realizar (suma ES etc) La operacioacuten se indica mediante un coacutedigo binario denominado coacutedigo de operacioacuten o abreviadamente codop

bull Referencia a operandos fuente u origen la operacioacuten puede implicar a uno o maacutes operan- dos origen es decir operandos que son entradas para la instruccioacuten

bull Referencia al operando de destino o resultado la operacioacuten puede producir un resultado

bull Referencia a la siguiente instruccioacuten dice al procesador de doacutende captar la siguiente instruccioacuten tras completarse la ejecucioacuten de la instruccioacuten actual

La siguiente instruccioacuten a captar estaacute en memoria principal o en el caso de un sistema de memoria virtual bien en memoria principal o en memoria secundaria (disco) En la mayoriacutea de los casos la siguiente instruccioacuten a captar sigue inmediatamente a la instruccioacuten en ejecucioacuten En tales casos no hay referencia expliacutecita a la siguiente instruccioacuten Cuando sea necesaria una referencia expliacutecita debe suministrarse la direccioacuten de memoria principal o de memoria virtual

Los

bull Memoria principal o virtual como en las referencias a instrucciones siguientes debe indicarse la direccioacuten de memoria principal o de memoria virtual

bull Registro del procesador salvo raras excepciones un procesador contiene uno o maacutes registros que pueden ser referenciados por instrucciones maacutequina Si solo existe un registro la referencia a eacutel puede ser impliacutecita Si existe maacutes de uno cada registro tendraacute asignado un nuacutemero uacutenico y la instruccioacuten debe contener el nuacutemero del registro deseado

bull Dispositivo de ES la instruccioacuten debe especificar el moacutedulo y dispositivo de ES para la operacioacuten En el caso de ES asignadas en memoria se daraacute otra direccioacuten de memoria principal o virtual

REPRESENTACIOacuteN DE LAS INSTRUCCIONES

Dentro del computador cada instruccioacuten se representa por una secuencia de bits La instruccioacuten estaacute dividida en campos correspondientes a los elementos constitutivos de la misma En la mayoriacutea de los repertorios de instrucciones se emplea maacutes de un formato Durante su ejecucioacuten la instruccioacuten se escribe en un registro de instruccioacuten (IR) del procesador El procesador debe ser capaz de extraer los datos de los distintos campos de la instruccioacuten para realizar la operacioacuten requerida

Los codops se representan mediante abreviaturas denominadas nemoteacutecnicos que indican la operacioacuten en cuestioacuten Ejemplos usuales son

ADD SumarSUB Restar

MPY MultiplicarDIV DividirLOAD Cargar datos de memoriaSTOR Almacenar datos en memoria

(memorizar)

Los operandos tambieacuten suelen representarse simboacutelicamente Por ejemplo la instruccioacuten

ADD RY

La operacioacuten se realiza con el contenido de la posicioacuten no con su direccioacuten

Es posible pues escribir un programa en lenguaje maacutequina de forma simboacutelica Cada codop simboacutelico tiene una representacioacuten binaria fija y el programador especifica la posicioacuten de cada operando simboacutelico Por ejemplo el programador podriacutea comenzar con una lista de definiciones

X = 513

Y = 514

y asiacute sucesivamente Un sencillo programa aceptariacutea como entrada esta informacioacuten simboacutelica convertiriacutea los codops y referencias a operandos a forma binaria y construiriacutea las instrucciones maacutequina binarias

TIPOS DE INSTRUCCIONES

Una sola instruccioacuten BASIC puede necesitar de tres instrucciones maacutequina Este es un caso tiacutepico de relacioacuten entre un lenguaje de alto nivel y un lenguaje maacutequina Un lenguaje de alto nivel expresa las operaciones de forma algebraica concisa utilizando variables Un lenguaje maacutequina expresa las operaciones de una manera elemental implicando operaciones de transferencia de datos a o desde registros

Debiera tener un conjunto de instrucciones que permitieran al usuario formular cualquier tarea de procesamiento de datos Cualquier programa escrito en alto nivel debe traducirse a lenguaje maacutequina para ser ejecutado Por tanto el repertorio de instrucciones maacutequina debe ser suficientemente amplio como para expresar cualquiera de las instrucciones de un lenguaje de alto nivel Teniendo esto presente los tipos de instrucciones se pueden clasificar de la siguiente manera

bull De procesamiento de datos instrucciones aritmeacuteticas y loacutegicas

Las instrucciones aritmeacuteticas proporcionan capacidad computacional para procesar datos numeacutericos

Las instrucciones loacutegicas (booleanas) operan con los bits de una palabra en lugar de considerarlos como nuacutemeros proporcionando por tanto capacidad para el procesamiento de cualquier otro tipo de datos que el usuario quiera emplear

Estas operaciones se realizan principalmente con datos en registros del procesador

bull De almacenamiento de datos instrucciones de memoria Transfieren los datos entre la memoria y los registros

bull De transferencia de datos instrucciones de ES transfieren programas y datos a memoria y devolver resultados de los caacutelculos al usuario

bull De control instrucciones de comprobacioacuten y de bifurcacioacuten Las de compobaciograven se emplean para comprobar el valor de una palabra de datos o el estado de un caacutelculo Las de bifurcacioacuten se usan entonces para bifurcar a diferentes conjuntos de instrucciones dependiendo de la decisioacuten tomada

NUacuteMERO DE DIRECCIONES

Es una de las formas tradicionales de describir la arquitectura de un procesador Esta dimensioacuten se va haciendo menos significativa a medida que aumenta la complejidad del disentildeo del procesador A pesar de ello merece la pena extenderse y analizar dicha distincioacuten

Las instrucciones aritmeacuteticas y loacutegicas son las que requieren maacutes operandos Praacutecticamente todas las operaciones aritmeacuteticas y loacutegicas son o bien unarias (un operando) o binarias (dos operandos) Asiacute pues necesitariacuteamos un maacuteximo de dos direcciones para referenciar operandos El resultado de una operacioacuten debe almacenarse

lo que sugiere una tercera direccioacuten Finalmente tras completar una instruccioacuten debe captarse la siguiente y su direccioacuten es pues necesaria

El razonamiento anterior sugiere como plausible que una instruccioacuten incluyera cuatro referencias a direcciones dos operandos un resultado y la direccioacuten de la instruccioacuten siguiente En la praacutectica es muy raro encontrar instrucciones que contengan cuatro direcciones La mayoriacutea de las instrucciones tienen una dos o tres direcciones estando impliacutecita la direccioacuten de la instruccioacuten siguiente (obtenida a partir del contador de programa)

La Figura 103 compara instrucciones tiacutepicas de una dos y tres direcciones que podriacutean utilizarse para calcular Y = (A mdash B) [(C + D ( E)] Con tres direcciones cada instruccioacuten especifica dos posiciones de operandos y la posicioacuten del resultado Dado que no queremos alterar el valor de ninguna posicioacuten de operando se utiliza una posicioacuten temporal T para almacenar resultados intermediosMuestra cuatro instrucciones y que la expresioacuten original teniacutea cinco operandos

Las instrucciones con tres direcciones no son comunes ya que requieren formatos relativamente largos para albergar las tres referencias Con instrucciones de dos direcciones para operaciones binarias una de las direcciones debe hacer el servicio doble de uno de los operandos y del resultado Asiacute pues la instruccioacuten laquoSUB Yraquo B realiza el caacutelculo Y mdash B y guarda el resultado en Y El formato de dos direcciones reduce el espacio necesario pero resulta algo engorroso Para evitar que se altere el valor de un operando se utiliza una instruccioacuten laquoMOVEraquo para transferir uno de los valores a una posicioacuten temporal de resultados antes de realizar el caacutelculo Nuestro programa ejemplo se ampliacutea a seis instrucciones La instruccioacuten de una sola direccioacuten es auacuten maacutes simple Para que funcione una segunda direccioacuten debe estar impliacutecita Esto fue lo usual en las primeras maacutequinas en las que la direccioacuten impliacutecita era un registro del procesador conocido como acumulador (AC) El acumulador contiene uno de los operandos y se emplea para almacenar el resultado En nuestro ejemplo se necesitariacutean ocho instrucciones para realizar la tarea

Es de hecho posible arreglaacuterselas con cero direcciones para algunas de instrucciones Las instrucciones con cero direcciones son aplicables a una organizacioacuten especial de memoria denominada pila (laquostackraquo) Una pila es un conjunto de posiciones del tipo last-in-first-out (el primero en entrar es primero en salir) La pila estaacute en una posicioacuten

conocida y a menudo al menos los dos elementos de su cabecera estaacuten en registros del procesador Asiacute pues las instrucciones con cero direcciones refe- renciariacutean dichos elementos de la cabecera

La Tabla 101 resume posibles interpretaciones a considerar para las instrucciones de cero una dos o tres direcciones En todos los casos se supone que la direccioacuten de la siguiente instruccioacuten estaacute impliacutecita y que se va a realizar una operacioacuten con dos operandos origen y un resultado

El nuacutemero de direcciones por instruccioacuten es una decisioacuten baacutesica de disentildeo Menos direcciones por instruccioacuten significa instrucciones maacutes primarias lo que requiere un procesador menos complejo Tambieacuten da lugar a instrucciones maacutes cortas Por otra parte los programas contienen maacutes instrucciones lo que normalmente supone mayor tiempo de ejecucioacuten y programas maacutes largos y complejos Hay tambieacuten un umbral importante entre instrucciones de una y de muacuteltiples direcciones Con instrucciones de una sola direccioacuten el programador tiene generalmente a su disposicioacuten solo un registro de uso general el acumulador

Con instrucciones de muacuteltiples direcciones suele disponerse de muacuteltiples registros de uso general Esto permite que algunas operaciones se realicen solo con registros Ya que los accesos a registros son maacutes raacutepidos que a memoria se acelera la ejecucioacuten Por razones de flexibilidad y facilidad para utilizar varios registros la mayoriacutea de las maacutequinas contemporaacuteneas emplean una combinacioacuten de instrucciones de dos y de tres direcciones

Las decisiones de disentildeo asociadas con la eleccioacuten del nuacutemero de direcciones por instruccioacuten son complicadas debido a otros factores Un aspecto a considerar es si una direccioacuten hace referencia a una posicioacuten de memoria o a un registro Ya que hay menos registros se necesitan menos bits para referendarios Ademaacutes una maacutequina puede per-mitir diversos modos de direccionamiento y la especificacioacuten del modo consume uno o maacutes bits El resultado es que la mayoriacutea de los disentildeos de procesadores hacen uso de varios formatos de instrucciones

DISENtildeO DEL REPERTORIO DE INSTRUCCIONES

Es uno de los aspectos maacutes interesantes y maacutes analizados del disentildeo de un computador El disentildeo de un repertorio de instrucciones es muy complejo ya que afecta a muchos aspectos del computador El repertorio de instrucciones define muchas de las funciones realizadas por el procesador y tiene pues un efecto significativo sobre la implementacioacuten del mismo El repertorio de instrucciones es el medio que tiene el

programador para controlar el procesador En consecuencia deben considerarse las necesidades del programador a la hora de disentildear el repertorio de instrucciones

Algunos aspectos baacutesicos relativos al disentildeo de repertorios de instrucciones siguen siendo temas de controversia Los maacutes importantes entre dichos aspectos fundamentales de disentildeo son

bull El repertorio de operaciones cuaacutentas y queacute operaciones considerar y cuaacuten complejas deben ser

bull Los tipos de datos los distintos tipos de datos con los que se efectuacutean operaciones

bull Los formatos de instrucciones longitud de la instruccioacuten (en bits) nuacutemero de direcciones tamantildeo de los distintos campos etc

bull Los registros nuacutemero de registros del procesador que pueden ser referenciados por las instrucciones y su uso

bull El direccionamiento el modo o modos de direccionamiento mediante los cuales puede especificarse la direccioacuten de un operando

Estos aspectos estaacuten fuertemente interrelacionados y deben considerarse conjuntamente en el disentildeo de un repertorio de instrucciones

La arquitectura RISC cuestiona muchas de las decisiones sobre repertorios de instrucciones tradicionalmente adoptadas en computadores comerciales

TIPOS DE OPERANDOS

Las instrucciones maacutequina operan con datos Las categoriacuteas generales maacutes importantes de datos son

bull Direcciones

bull Nuacutemeros

bull Caracteres

bull Datos loacutegicos

Las direcciones son un tipo de datos En muchos casos debe realizarse alguacuten caacutelculo sobre la referencia a un operando de una instruccioacuten a fin de determinar la direccioacuten de memoria principal o virtual En este contexto las direcciones pueden considerarse como nuacutemeros enteros sin signo

Otros tipos de datos comunes son los nuacutemeros los caracteres y los datos loacutegicos y cada uno de ellos se analiza brevemente en esta seccioacuten Aparte de estos en algunas maacutequinas se utilizan tipos o estructuras de datos especiacuteficos Por ejemplo puede haber operaciones maacutequina que trabajan directamente con listas o cadenas de caracteres

NUacuteMEROS

Todos los lenguajes maacutequina incluyen tipos de datos numeacutericos Incluso en el procesamiento de datos no numeacutericos se necesitan nuacutemeros que actuacuteen como contadores longitudes de campos etc Una distincioacuten importante entre los nuacutemeros utilizados en las matemaacuteticas ordinarias y los almacenados en un computador es que estos uacuteltimos estaacuten limitados Esto es cierto en dos sentidos En primer lugar hay un liacutemite para la magnitud de los nuacutemeros representabas en una maacutequina y en segundo lugar en el caso de nuacutemeros en coma flotante su precisioacuten estaacute limitada Por tanto el programador debe ser consciente de las consecuencias del redondeo el desbordamiento o el desbordamiento a cero

En los computadores son usuales tres tipos de datos numeacutericos

bull Enteros o en coma fija

bull En coma flotante

bull En decimal

CARACTERES

Una forma bastante comuacuten de datos es el texto o secuencias de caracteres Aunque la informacioacuten texual sea maacutes conveniente para las personas no puede ser almacenada o transmitida faacutecilmente en forma de caracteres por los sistemas de comunicacioacuten y de procesamiento de datos Tales sistemas estaacuten disentildeados para datos binarios Por lo tanto se han ideado diversos coacutedigos que permiten representar caracteres mediante secuencias de bits Tal vez el primer ejemplo fue el coacutedigo Morse Hoy en diacutea el coacutedigo de caracteres maacutes utilizado es el alfabeto de referencia internacional (IRA International Reference Alphabet) conocido en los Estados Unidos como ASCII (American Standard Code for Information Interchange) coacutedigo estaacutendar americano para intercambio de informacioacuten (veacutease Tabla 71) Cada caraacutecter es representado en este coacutedigo por un patroacuten distinto de 7 bits pueden representarse por tanto 128 caracteres diferentes Este nuacutemero es mayor que el necesario para representar los caracteres impresos utilizaacutendose algunos de los patrones para representar caracteres de control Algunos de estos se emplean para controlar la impresioacuten de caracteres en una paacutegina Otros caracteres de control estaacuten dedicados para procedimientos de comunicacioacuten Los caracteres codificados en ASCII se memorizan y transmiten utilizando casi siempre ocho bits por caraacutecter El octavo bit puede fijarse a cero o utilizarse como bit de paridad para la deteccioacuten de errores En el segundo caso el valor del bit se pone de manera que el nuacutemero total de unos en cada octeto sea o siempre impar (paridad impar) o siempre par (paridad par)

Observe en la Tabla 71 que con el ASCII los patrones de bits 011XXXX representan los diacutegitos 0 a 9 mediante sus valores binarios equivalentes 0000 a 1001 en los cuatro bits de la derecha Esta codificacioacuten coincide con la empleada en decimal empaquetado facilitaacutendose asiacute la conversioacuten entre ASCII de siete bits y decimal empaquetado de cuatro bits

Otro coacutedigo utilizado para caracteres es el coacutedigo de intercambio decimal codificado en binario ampliado (EBCDIC Extended Binary Coded Decimal Interchange Code) Este coacutedigo de ocho bits se emplea en los grandes computadores de IBM Como el ASCII el EBCDIC es compatible con el decimal empaquetado En el caso del EBCDIC los coacutedigos 11110000 a 11111001 representan los diacutegitos 0 a 9

DATOS LOacuteGICOS

Normalmente cada palabra o cualquier otra unidad direccionable (byte media palabra etc) es tratada como una unidad de datos individual Sin embargo a veces es uacutetil considerar una unidad de laquobits como n elementos o datos de un bit donde cada elemento tiene un valor 1 o 0 Cuando los datos son vistos de esta manera se consideran datos loacutegicos

Esta representacioacuten orientada a bits tiene dos ventajas La primera es que a veces puede interesarnos almacenar una matriz de elementos binarios o booleanos en la que cada elemento pueda tomar solo los valores 1 (verdadero) oacute 0 (falso) Con datos loacutegicos la memoria puede ser entonces utilizada

Repertorio de instrucciones modos de direccionamiento y formatos

DIRECCIONAMIENTO

El campo o campos de direcciones en un formato de instruccioacuten usual estaacute bastante limitado Seriacutea deseable poder referenciar un rango elevado de posiciones de memoria principal o en algunos sistemas de memoria virtual Para conseguir este objetivo se han empleado diversas teacutecnicas de direccionamiento Todas ellas implican alguacuten compromiso entre el rango de direcciones yo flexibilidad de direccionamiento de una parte y por otra el nuacutemero de referencias a memoria yo la complejidad de caacutelculo de las direcciones los modos de direccionamiento maacutes comunes son

bull Inmediato

bull Directo

bull Indirecto

bull Registro

bull Indirecto con registro

bull Con desplazamiento Pila

La Tabla 111 indica el caacutelculo de la direccioacuten realizado para cada modo de direccionamiento

Praacutecticamente todas las arquitecturas de computadores ofrecen maacutes de uno de estos modos de direccionamiento La cuestioacuten que surge es coacutemo determina la unidad de control queacute modo de direccionamiento se estaacute empleando en cada instruccioacuten Se adoptan diversos enfoques alternativos A menudo codops diferentes emplearaacuten modos de direccionamiento distintos Tambieacuten uno o maacutes bits del formato de instruccioacuten

pueden utilizarse como campo de modo El valor del campo de modo determina queacute modo de direccionamiento va a utilizarse

En un sistema sin memoria virtual la direccioacuten efectiva seraacute o una direccioacuten de memoria principal o un registro En un sistema con memoria virtual la direccioacuten efectiva es una direccioacuten virtual o un registro La correspondencia real con una direccioacuten fiacutesica dependeraacute del mecanismo de paginacioacuten y no estaacute visible al programador

DIRECCIONAMIENTO INMEDIATO

Es la forma maacutes sencilla de direccionamiento en el que el operando estaacute en realidad presente en la propia instruccioacuten

Operando = A

Este modo puede utilizarse para definir y utilizar constantes o para fijar valores iniciales de variables Normalmente el nuacutemero se almacena en complemento a dos el bit maacutes a la izquierda del campo de operando se utiliza como bit de signo Cuando el operando se carga en un registro de datos el bit de signo se replica hacia la izquierda hasta la longitud total de la palabra de datos

Como se ha definido anteriormente el pareacutentesis se interpreta como laquocontenido deraquo La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dos

La ventaja del direccionamiento inmediato es que una vez captada la instruccioacuten no se requiere una referencia a memoria para obtener el operando ahorraacutendose pues un ciclo de memoria o de cacheacute en el ciclo de instruccioacuten La desventaja es que el tamantildeo del nuacutemero estaacute restringido a la longitud del campo de direcciones que en la mayoriacutea de los repertorios de instrucciones es pequentildeo comparado con la longitud de palabra

DIRECCIONAMIENTO DIRECTO

Una forma muy sencilla de direccionamiento es el direccionamiento directo en el que el campo de direcciones contiene la direccioacuten efectiva del operando

EA = A

Esta teacutecnica fue comuacuten en las primeras generaciones de computadores y se encuentra auacuten en diversos sistemas Solo requiere una referencia a memoria y no necesita ninguacuten caacutelculo especial La limitacioacuten obvia es que proporciona un espacio de direcciones restringido

DIRECCIONAMIENTO INDIRECTO

El problema del direccionamiento directo es que la longitud del campo de direcciones es normalmente menor que la longitud de palabra limitando pues el rango de direcciones Una solucioacuten es hacer que el campo de direcciones referencie la direccioacuten de una palabra de memoria la cual contenga la direccioacuten completa del operando Esto es lo que se denomina direccionamiento indirecto

EA = (A)

La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dosccedil

Una variante de direccionamiento indirecto raramente utilizada es el direccionamiento multinivel o en cascada

EA = ((A))

En este caso uno de los bits de una palabra de direccioacuten es un indicador de laquoindireccioacutenraquo (I) Si el bit I es 0 la palabra contiene el valor de EA Si el bit I es 1 entonces se invoca otro nivel de laquoindireccioacutenraquo No parece que esta aproximacioacuten ofrezca ninguna ventaja particular y su desventaja es que podriacutean requerirse dos o maacutes referencias para captar un operando

DIRECCIONAMIENTO DE REGISTROS

El direccionamiento de registros es similar al directo La uacutenica diferencia es que el campo de direcciones referencia un registro en lugar de una direccioacuten de memoria principal

EA = R

Por ejemplo si el campo de direccioacuten de registro de la instruccioacuten es 5 la direccioacuten deseada es el registro R5 y el valor del operando es el contenido de R5 Normalmente un campo de direcciones que referencia a registros consta de tres a cinco bits de manera que pueden referenciarse un total de 8 a 32 registros de uso general

Las ventajas del direccionamiento de registros son que (1) solo es necesario un campo pequentildeo de direcciones en la instruccioacuten y (2) no se requieren referencias a memoria Como se comentoacute en el Capiacutetulo 4 el tiempo de acceso a un registro interno del procesador es mucho menor que para la memoria principal La desventaja del direccionamiento a registros es que el espacio de direcciones estaacute muy limitado

Si se hace un uso masivo del direccionamiento a registros en un repertorio de instrucciones los registros del procesador se emplearaacuten intensamente Debido al nuacutemero tan limitado de registros (en comparacioacuten con el nuacutemero de posiciones de memoria principal) usarlos de esta manera tiene sentido solo si se emplean eficientemente Si todo operando se carga de memoria principal a un registro se opera con eacutel una vez y se devuelve a memoria principal resulta que se estariacutea antildeadiendo un paso intermedio improcedente Si en lugar de esto el operando del registro se mantiene en uso durante varias operaciones se estariacutea consiguiendo un ahorro real Un ejemplo son los resultados intermedios de un caacutelculo En particular suponga que se va a implementar en software el algoritmo de multiplicacioacuten en complemento a dos La posicioacuten A del diagrama de flujo (Figura 912) se referencia muchas veces y debiera estar implementada en un registro en lugar de en una posicioacuten de memoria principal

Depende del programador decidir queacute valores deben mantenerse en registros y cuaacuteles deben almacenarse en memoria principal La mayoriacutea de los procesadores modernos emplean muacuteltiples registros de uso general cargando al programador en lenguaje ensamblador (cuando desarrolla compiladores por ejemplo) con la responsabilidad de conseguir una ejecucioacuten eficiente

DIRECCIONAMIENTO INDIRECTO CON REGISTRO

Igual que el direccionamiento de registros es anaacutelogo al directo el direccionamiento indirecto con registro es anaacutelogo al direccionamiento indirecto En ambos casos la diferencia estriba en si el campo de direcciones hace referencia a una posicioacuten de memoria o a un registro Asiacute para el direccionamiento indirecto con registro

EA = (R)

Las ventajas y limitaciones del direccionamiento indirecto con registro son baacutesicamente las mismas que se tienen para el direccionamiento indirecto En ambos casos la limitacioacuten de espacio o rango de direcciones del campo de direcciones se supera

haciendo que dicho campo referencie una posicioacuten de una palabra completa (un registro completo en este caso) que contenga la direccioacuten Ademaacutes el direccionamiento indirecto con registro emplea una referencia menos a memoria que el direccionamiento indirecto

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

Los principales usos del direccionamiento con desplazamiento son

bull Desplazamiento relativo

bull Direccionamiento con registro base

bull Indexado

Direccionamiento relativo Para el direccionamiento relativo tambieacuten llamado direccionamiento relativo al PC el registro referenciado impliacutecitamente es el contador de programa (PC) Es decir la direccioacuten de instruccioacuten actual se suma al campo de direcciones para producir el valor EA Normalmente el campo de direcciones se trata como nuacutemero en complemento a dos para esta operacioacuten En consecuencia la direccioacuten efectiva es un desplazamiento relativo a la direccioacuten de la instruccioacuten

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 3: Arquitectura Trabajo

REPRESENTACIOacuteN DE LAS INSTRUCCIONES

Dentro del computador cada instruccioacuten se representa por una secuencia de bits La instruccioacuten estaacute dividida en campos correspondientes a los elementos constitutivos de la misma En la mayoriacutea de los repertorios de instrucciones se emplea maacutes de un formato Durante su ejecucioacuten la instruccioacuten se escribe en un registro de instruccioacuten (IR) del procesador El procesador debe ser capaz de extraer los datos de los distintos campos de la instruccioacuten para realizar la operacioacuten requerida

Los codops se representan mediante abreviaturas denominadas nemoteacutecnicos que indican la operacioacuten en cuestioacuten Ejemplos usuales son

ADD SumarSUB Restar

MPY MultiplicarDIV DividirLOAD Cargar datos de memoriaSTOR Almacenar datos en memoria

(memorizar)

Los operandos tambieacuten suelen representarse simboacutelicamente Por ejemplo la instruccioacuten

ADD RY

La operacioacuten se realiza con el contenido de la posicioacuten no con su direccioacuten

Es posible pues escribir un programa en lenguaje maacutequina de forma simboacutelica Cada codop simboacutelico tiene una representacioacuten binaria fija y el programador especifica la posicioacuten de cada operando simboacutelico Por ejemplo el programador podriacutea comenzar con una lista de definiciones

X = 513

Y = 514

y asiacute sucesivamente Un sencillo programa aceptariacutea como entrada esta informacioacuten simboacutelica convertiriacutea los codops y referencias a operandos a forma binaria y construiriacutea las instrucciones maacutequina binarias

TIPOS DE INSTRUCCIONES

Una sola instruccioacuten BASIC puede necesitar de tres instrucciones maacutequina Este es un caso tiacutepico de relacioacuten entre un lenguaje de alto nivel y un lenguaje maacutequina Un lenguaje de alto nivel expresa las operaciones de forma algebraica concisa utilizando variables Un lenguaje maacutequina expresa las operaciones de una manera elemental implicando operaciones de transferencia de datos a o desde registros

Debiera tener un conjunto de instrucciones que permitieran al usuario formular cualquier tarea de procesamiento de datos Cualquier programa escrito en alto nivel debe traducirse a lenguaje maacutequina para ser ejecutado Por tanto el repertorio de instrucciones maacutequina debe ser suficientemente amplio como para expresar cualquiera de las instrucciones de un lenguaje de alto nivel Teniendo esto presente los tipos de instrucciones se pueden clasificar de la siguiente manera

bull De procesamiento de datos instrucciones aritmeacuteticas y loacutegicas

Las instrucciones aritmeacuteticas proporcionan capacidad computacional para procesar datos numeacutericos

Las instrucciones loacutegicas (booleanas) operan con los bits de una palabra en lugar de considerarlos como nuacutemeros proporcionando por tanto capacidad para el procesamiento de cualquier otro tipo de datos que el usuario quiera emplear

Estas operaciones se realizan principalmente con datos en registros del procesador

bull De almacenamiento de datos instrucciones de memoria Transfieren los datos entre la memoria y los registros

bull De transferencia de datos instrucciones de ES transfieren programas y datos a memoria y devolver resultados de los caacutelculos al usuario

bull De control instrucciones de comprobacioacuten y de bifurcacioacuten Las de compobaciograven se emplean para comprobar el valor de una palabra de datos o el estado de un caacutelculo Las de bifurcacioacuten se usan entonces para bifurcar a diferentes conjuntos de instrucciones dependiendo de la decisioacuten tomada

NUacuteMERO DE DIRECCIONES

Es una de las formas tradicionales de describir la arquitectura de un procesador Esta dimensioacuten se va haciendo menos significativa a medida que aumenta la complejidad del disentildeo del procesador A pesar de ello merece la pena extenderse y analizar dicha distincioacuten

Las instrucciones aritmeacuteticas y loacutegicas son las que requieren maacutes operandos Praacutecticamente todas las operaciones aritmeacuteticas y loacutegicas son o bien unarias (un operando) o binarias (dos operandos) Asiacute pues necesitariacuteamos un maacuteximo de dos direcciones para referenciar operandos El resultado de una operacioacuten debe almacenarse

lo que sugiere una tercera direccioacuten Finalmente tras completar una instruccioacuten debe captarse la siguiente y su direccioacuten es pues necesaria

El razonamiento anterior sugiere como plausible que una instruccioacuten incluyera cuatro referencias a direcciones dos operandos un resultado y la direccioacuten de la instruccioacuten siguiente En la praacutectica es muy raro encontrar instrucciones que contengan cuatro direcciones La mayoriacutea de las instrucciones tienen una dos o tres direcciones estando impliacutecita la direccioacuten de la instruccioacuten siguiente (obtenida a partir del contador de programa)

La Figura 103 compara instrucciones tiacutepicas de una dos y tres direcciones que podriacutean utilizarse para calcular Y = (A mdash B) [(C + D ( E)] Con tres direcciones cada instruccioacuten especifica dos posiciones de operandos y la posicioacuten del resultado Dado que no queremos alterar el valor de ninguna posicioacuten de operando se utiliza una posicioacuten temporal T para almacenar resultados intermediosMuestra cuatro instrucciones y que la expresioacuten original teniacutea cinco operandos

Las instrucciones con tres direcciones no son comunes ya que requieren formatos relativamente largos para albergar las tres referencias Con instrucciones de dos direcciones para operaciones binarias una de las direcciones debe hacer el servicio doble de uno de los operandos y del resultado Asiacute pues la instruccioacuten laquoSUB Yraquo B realiza el caacutelculo Y mdash B y guarda el resultado en Y El formato de dos direcciones reduce el espacio necesario pero resulta algo engorroso Para evitar que se altere el valor de un operando se utiliza una instruccioacuten laquoMOVEraquo para transferir uno de los valores a una posicioacuten temporal de resultados antes de realizar el caacutelculo Nuestro programa ejemplo se ampliacutea a seis instrucciones La instruccioacuten de una sola direccioacuten es auacuten maacutes simple Para que funcione una segunda direccioacuten debe estar impliacutecita Esto fue lo usual en las primeras maacutequinas en las que la direccioacuten impliacutecita era un registro del procesador conocido como acumulador (AC) El acumulador contiene uno de los operandos y se emplea para almacenar el resultado En nuestro ejemplo se necesitariacutean ocho instrucciones para realizar la tarea

Es de hecho posible arreglaacuterselas con cero direcciones para algunas de instrucciones Las instrucciones con cero direcciones son aplicables a una organizacioacuten especial de memoria denominada pila (laquostackraquo) Una pila es un conjunto de posiciones del tipo last-in-first-out (el primero en entrar es primero en salir) La pila estaacute en una posicioacuten

conocida y a menudo al menos los dos elementos de su cabecera estaacuten en registros del procesador Asiacute pues las instrucciones con cero direcciones refe- renciariacutean dichos elementos de la cabecera

La Tabla 101 resume posibles interpretaciones a considerar para las instrucciones de cero una dos o tres direcciones En todos los casos se supone que la direccioacuten de la siguiente instruccioacuten estaacute impliacutecita y que se va a realizar una operacioacuten con dos operandos origen y un resultado

El nuacutemero de direcciones por instruccioacuten es una decisioacuten baacutesica de disentildeo Menos direcciones por instruccioacuten significa instrucciones maacutes primarias lo que requiere un procesador menos complejo Tambieacuten da lugar a instrucciones maacutes cortas Por otra parte los programas contienen maacutes instrucciones lo que normalmente supone mayor tiempo de ejecucioacuten y programas maacutes largos y complejos Hay tambieacuten un umbral importante entre instrucciones de una y de muacuteltiples direcciones Con instrucciones de una sola direccioacuten el programador tiene generalmente a su disposicioacuten solo un registro de uso general el acumulador

Con instrucciones de muacuteltiples direcciones suele disponerse de muacuteltiples registros de uso general Esto permite que algunas operaciones se realicen solo con registros Ya que los accesos a registros son maacutes raacutepidos que a memoria se acelera la ejecucioacuten Por razones de flexibilidad y facilidad para utilizar varios registros la mayoriacutea de las maacutequinas contemporaacuteneas emplean una combinacioacuten de instrucciones de dos y de tres direcciones

Las decisiones de disentildeo asociadas con la eleccioacuten del nuacutemero de direcciones por instruccioacuten son complicadas debido a otros factores Un aspecto a considerar es si una direccioacuten hace referencia a una posicioacuten de memoria o a un registro Ya que hay menos registros se necesitan menos bits para referendarios Ademaacutes una maacutequina puede per-mitir diversos modos de direccionamiento y la especificacioacuten del modo consume uno o maacutes bits El resultado es que la mayoriacutea de los disentildeos de procesadores hacen uso de varios formatos de instrucciones

DISENtildeO DEL REPERTORIO DE INSTRUCCIONES

Es uno de los aspectos maacutes interesantes y maacutes analizados del disentildeo de un computador El disentildeo de un repertorio de instrucciones es muy complejo ya que afecta a muchos aspectos del computador El repertorio de instrucciones define muchas de las funciones realizadas por el procesador y tiene pues un efecto significativo sobre la implementacioacuten del mismo El repertorio de instrucciones es el medio que tiene el

programador para controlar el procesador En consecuencia deben considerarse las necesidades del programador a la hora de disentildear el repertorio de instrucciones

Algunos aspectos baacutesicos relativos al disentildeo de repertorios de instrucciones siguen siendo temas de controversia Los maacutes importantes entre dichos aspectos fundamentales de disentildeo son

bull El repertorio de operaciones cuaacutentas y queacute operaciones considerar y cuaacuten complejas deben ser

bull Los tipos de datos los distintos tipos de datos con los que se efectuacutean operaciones

bull Los formatos de instrucciones longitud de la instruccioacuten (en bits) nuacutemero de direcciones tamantildeo de los distintos campos etc

bull Los registros nuacutemero de registros del procesador que pueden ser referenciados por las instrucciones y su uso

bull El direccionamiento el modo o modos de direccionamiento mediante los cuales puede especificarse la direccioacuten de un operando

Estos aspectos estaacuten fuertemente interrelacionados y deben considerarse conjuntamente en el disentildeo de un repertorio de instrucciones

La arquitectura RISC cuestiona muchas de las decisiones sobre repertorios de instrucciones tradicionalmente adoptadas en computadores comerciales

TIPOS DE OPERANDOS

Las instrucciones maacutequina operan con datos Las categoriacuteas generales maacutes importantes de datos son

bull Direcciones

bull Nuacutemeros

bull Caracteres

bull Datos loacutegicos

Las direcciones son un tipo de datos En muchos casos debe realizarse alguacuten caacutelculo sobre la referencia a un operando de una instruccioacuten a fin de determinar la direccioacuten de memoria principal o virtual En este contexto las direcciones pueden considerarse como nuacutemeros enteros sin signo

Otros tipos de datos comunes son los nuacutemeros los caracteres y los datos loacutegicos y cada uno de ellos se analiza brevemente en esta seccioacuten Aparte de estos en algunas maacutequinas se utilizan tipos o estructuras de datos especiacuteficos Por ejemplo puede haber operaciones maacutequina que trabajan directamente con listas o cadenas de caracteres

NUacuteMEROS

Todos los lenguajes maacutequina incluyen tipos de datos numeacutericos Incluso en el procesamiento de datos no numeacutericos se necesitan nuacutemeros que actuacuteen como contadores longitudes de campos etc Una distincioacuten importante entre los nuacutemeros utilizados en las matemaacuteticas ordinarias y los almacenados en un computador es que estos uacuteltimos estaacuten limitados Esto es cierto en dos sentidos En primer lugar hay un liacutemite para la magnitud de los nuacutemeros representabas en una maacutequina y en segundo lugar en el caso de nuacutemeros en coma flotante su precisioacuten estaacute limitada Por tanto el programador debe ser consciente de las consecuencias del redondeo el desbordamiento o el desbordamiento a cero

En los computadores son usuales tres tipos de datos numeacutericos

bull Enteros o en coma fija

bull En coma flotante

bull En decimal

CARACTERES

Una forma bastante comuacuten de datos es el texto o secuencias de caracteres Aunque la informacioacuten texual sea maacutes conveniente para las personas no puede ser almacenada o transmitida faacutecilmente en forma de caracteres por los sistemas de comunicacioacuten y de procesamiento de datos Tales sistemas estaacuten disentildeados para datos binarios Por lo tanto se han ideado diversos coacutedigos que permiten representar caracteres mediante secuencias de bits Tal vez el primer ejemplo fue el coacutedigo Morse Hoy en diacutea el coacutedigo de caracteres maacutes utilizado es el alfabeto de referencia internacional (IRA International Reference Alphabet) conocido en los Estados Unidos como ASCII (American Standard Code for Information Interchange) coacutedigo estaacutendar americano para intercambio de informacioacuten (veacutease Tabla 71) Cada caraacutecter es representado en este coacutedigo por un patroacuten distinto de 7 bits pueden representarse por tanto 128 caracteres diferentes Este nuacutemero es mayor que el necesario para representar los caracteres impresos utilizaacutendose algunos de los patrones para representar caracteres de control Algunos de estos se emplean para controlar la impresioacuten de caracteres en una paacutegina Otros caracteres de control estaacuten dedicados para procedimientos de comunicacioacuten Los caracteres codificados en ASCII se memorizan y transmiten utilizando casi siempre ocho bits por caraacutecter El octavo bit puede fijarse a cero o utilizarse como bit de paridad para la deteccioacuten de errores En el segundo caso el valor del bit se pone de manera que el nuacutemero total de unos en cada octeto sea o siempre impar (paridad impar) o siempre par (paridad par)

Observe en la Tabla 71 que con el ASCII los patrones de bits 011XXXX representan los diacutegitos 0 a 9 mediante sus valores binarios equivalentes 0000 a 1001 en los cuatro bits de la derecha Esta codificacioacuten coincide con la empleada en decimal empaquetado facilitaacutendose asiacute la conversioacuten entre ASCII de siete bits y decimal empaquetado de cuatro bits

Otro coacutedigo utilizado para caracteres es el coacutedigo de intercambio decimal codificado en binario ampliado (EBCDIC Extended Binary Coded Decimal Interchange Code) Este coacutedigo de ocho bits se emplea en los grandes computadores de IBM Como el ASCII el EBCDIC es compatible con el decimal empaquetado En el caso del EBCDIC los coacutedigos 11110000 a 11111001 representan los diacutegitos 0 a 9

DATOS LOacuteGICOS

Normalmente cada palabra o cualquier otra unidad direccionable (byte media palabra etc) es tratada como una unidad de datos individual Sin embargo a veces es uacutetil considerar una unidad de laquobits como n elementos o datos de un bit donde cada elemento tiene un valor 1 o 0 Cuando los datos son vistos de esta manera se consideran datos loacutegicos

Esta representacioacuten orientada a bits tiene dos ventajas La primera es que a veces puede interesarnos almacenar una matriz de elementos binarios o booleanos en la que cada elemento pueda tomar solo los valores 1 (verdadero) oacute 0 (falso) Con datos loacutegicos la memoria puede ser entonces utilizada

Repertorio de instrucciones modos de direccionamiento y formatos

DIRECCIONAMIENTO

El campo o campos de direcciones en un formato de instruccioacuten usual estaacute bastante limitado Seriacutea deseable poder referenciar un rango elevado de posiciones de memoria principal o en algunos sistemas de memoria virtual Para conseguir este objetivo se han empleado diversas teacutecnicas de direccionamiento Todas ellas implican alguacuten compromiso entre el rango de direcciones yo flexibilidad de direccionamiento de una parte y por otra el nuacutemero de referencias a memoria yo la complejidad de caacutelculo de las direcciones los modos de direccionamiento maacutes comunes son

bull Inmediato

bull Directo

bull Indirecto

bull Registro

bull Indirecto con registro

bull Con desplazamiento Pila

La Tabla 111 indica el caacutelculo de la direccioacuten realizado para cada modo de direccionamiento

Praacutecticamente todas las arquitecturas de computadores ofrecen maacutes de uno de estos modos de direccionamiento La cuestioacuten que surge es coacutemo determina la unidad de control queacute modo de direccionamiento se estaacute empleando en cada instruccioacuten Se adoptan diversos enfoques alternativos A menudo codops diferentes emplearaacuten modos de direccionamiento distintos Tambieacuten uno o maacutes bits del formato de instruccioacuten

pueden utilizarse como campo de modo El valor del campo de modo determina queacute modo de direccionamiento va a utilizarse

En un sistema sin memoria virtual la direccioacuten efectiva seraacute o una direccioacuten de memoria principal o un registro En un sistema con memoria virtual la direccioacuten efectiva es una direccioacuten virtual o un registro La correspondencia real con una direccioacuten fiacutesica dependeraacute del mecanismo de paginacioacuten y no estaacute visible al programador

DIRECCIONAMIENTO INMEDIATO

Es la forma maacutes sencilla de direccionamiento en el que el operando estaacute en realidad presente en la propia instruccioacuten

Operando = A

Este modo puede utilizarse para definir y utilizar constantes o para fijar valores iniciales de variables Normalmente el nuacutemero se almacena en complemento a dos el bit maacutes a la izquierda del campo de operando se utiliza como bit de signo Cuando el operando se carga en un registro de datos el bit de signo se replica hacia la izquierda hasta la longitud total de la palabra de datos

Como se ha definido anteriormente el pareacutentesis se interpreta como laquocontenido deraquo La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dos

La ventaja del direccionamiento inmediato es que una vez captada la instruccioacuten no se requiere una referencia a memoria para obtener el operando ahorraacutendose pues un ciclo de memoria o de cacheacute en el ciclo de instruccioacuten La desventaja es que el tamantildeo del nuacutemero estaacute restringido a la longitud del campo de direcciones que en la mayoriacutea de los repertorios de instrucciones es pequentildeo comparado con la longitud de palabra

DIRECCIONAMIENTO DIRECTO

Una forma muy sencilla de direccionamiento es el direccionamiento directo en el que el campo de direcciones contiene la direccioacuten efectiva del operando

EA = A

Esta teacutecnica fue comuacuten en las primeras generaciones de computadores y se encuentra auacuten en diversos sistemas Solo requiere una referencia a memoria y no necesita ninguacuten caacutelculo especial La limitacioacuten obvia es que proporciona un espacio de direcciones restringido

DIRECCIONAMIENTO INDIRECTO

El problema del direccionamiento directo es que la longitud del campo de direcciones es normalmente menor que la longitud de palabra limitando pues el rango de direcciones Una solucioacuten es hacer que el campo de direcciones referencie la direccioacuten de una palabra de memoria la cual contenga la direccioacuten completa del operando Esto es lo que se denomina direccionamiento indirecto

EA = (A)

La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dosccedil

Una variante de direccionamiento indirecto raramente utilizada es el direccionamiento multinivel o en cascada

EA = ((A))

En este caso uno de los bits de una palabra de direccioacuten es un indicador de laquoindireccioacutenraquo (I) Si el bit I es 0 la palabra contiene el valor de EA Si el bit I es 1 entonces se invoca otro nivel de laquoindireccioacutenraquo No parece que esta aproximacioacuten ofrezca ninguna ventaja particular y su desventaja es que podriacutean requerirse dos o maacutes referencias para captar un operando

DIRECCIONAMIENTO DE REGISTROS

El direccionamiento de registros es similar al directo La uacutenica diferencia es que el campo de direcciones referencia un registro en lugar de una direccioacuten de memoria principal

EA = R

Por ejemplo si el campo de direccioacuten de registro de la instruccioacuten es 5 la direccioacuten deseada es el registro R5 y el valor del operando es el contenido de R5 Normalmente un campo de direcciones que referencia a registros consta de tres a cinco bits de manera que pueden referenciarse un total de 8 a 32 registros de uso general

Las ventajas del direccionamiento de registros son que (1) solo es necesario un campo pequentildeo de direcciones en la instruccioacuten y (2) no se requieren referencias a memoria Como se comentoacute en el Capiacutetulo 4 el tiempo de acceso a un registro interno del procesador es mucho menor que para la memoria principal La desventaja del direccionamiento a registros es que el espacio de direcciones estaacute muy limitado

Si se hace un uso masivo del direccionamiento a registros en un repertorio de instrucciones los registros del procesador se emplearaacuten intensamente Debido al nuacutemero tan limitado de registros (en comparacioacuten con el nuacutemero de posiciones de memoria principal) usarlos de esta manera tiene sentido solo si se emplean eficientemente Si todo operando se carga de memoria principal a un registro se opera con eacutel una vez y se devuelve a memoria principal resulta que se estariacutea antildeadiendo un paso intermedio improcedente Si en lugar de esto el operando del registro se mantiene en uso durante varias operaciones se estariacutea consiguiendo un ahorro real Un ejemplo son los resultados intermedios de un caacutelculo En particular suponga que se va a implementar en software el algoritmo de multiplicacioacuten en complemento a dos La posicioacuten A del diagrama de flujo (Figura 912) se referencia muchas veces y debiera estar implementada en un registro en lugar de en una posicioacuten de memoria principal

Depende del programador decidir queacute valores deben mantenerse en registros y cuaacuteles deben almacenarse en memoria principal La mayoriacutea de los procesadores modernos emplean muacuteltiples registros de uso general cargando al programador en lenguaje ensamblador (cuando desarrolla compiladores por ejemplo) con la responsabilidad de conseguir una ejecucioacuten eficiente

DIRECCIONAMIENTO INDIRECTO CON REGISTRO

Igual que el direccionamiento de registros es anaacutelogo al directo el direccionamiento indirecto con registro es anaacutelogo al direccionamiento indirecto En ambos casos la diferencia estriba en si el campo de direcciones hace referencia a una posicioacuten de memoria o a un registro Asiacute para el direccionamiento indirecto con registro

EA = (R)

Las ventajas y limitaciones del direccionamiento indirecto con registro son baacutesicamente las mismas que se tienen para el direccionamiento indirecto En ambos casos la limitacioacuten de espacio o rango de direcciones del campo de direcciones se supera

haciendo que dicho campo referencie una posicioacuten de una palabra completa (un registro completo en este caso) que contenga la direccioacuten Ademaacutes el direccionamiento indirecto con registro emplea una referencia menos a memoria que el direccionamiento indirecto

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

Los principales usos del direccionamiento con desplazamiento son

bull Desplazamiento relativo

bull Direccionamiento con registro base

bull Indexado

Direccionamiento relativo Para el direccionamiento relativo tambieacuten llamado direccionamiento relativo al PC el registro referenciado impliacutecitamente es el contador de programa (PC) Es decir la direccioacuten de instruccioacuten actual se suma al campo de direcciones para producir el valor EA Normalmente el campo de direcciones se trata como nuacutemero en complemento a dos para esta operacioacuten En consecuencia la direccioacuten efectiva es un desplazamiento relativo a la direccioacuten de la instruccioacuten

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 4: Arquitectura Trabajo

TIPOS DE INSTRUCCIONES

Una sola instruccioacuten BASIC puede necesitar de tres instrucciones maacutequina Este es un caso tiacutepico de relacioacuten entre un lenguaje de alto nivel y un lenguaje maacutequina Un lenguaje de alto nivel expresa las operaciones de forma algebraica concisa utilizando variables Un lenguaje maacutequina expresa las operaciones de una manera elemental implicando operaciones de transferencia de datos a o desde registros

Debiera tener un conjunto de instrucciones que permitieran al usuario formular cualquier tarea de procesamiento de datos Cualquier programa escrito en alto nivel debe traducirse a lenguaje maacutequina para ser ejecutado Por tanto el repertorio de instrucciones maacutequina debe ser suficientemente amplio como para expresar cualquiera de las instrucciones de un lenguaje de alto nivel Teniendo esto presente los tipos de instrucciones se pueden clasificar de la siguiente manera

bull De procesamiento de datos instrucciones aritmeacuteticas y loacutegicas

Las instrucciones aritmeacuteticas proporcionan capacidad computacional para procesar datos numeacutericos

Las instrucciones loacutegicas (booleanas) operan con los bits de una palabra en lugar de considerarlos como nuacutemeros proporcionando por tanto capacidad para el procesamiento de cualquier otro tipo de datos que el usuario quiera emplear

Estas operaciones se realizan principalmente con datos en registros del procesador

bull De almacenamiento de datos instrucciones de memoria Transfieren los datos entre la memoria y los registros

bull De transferencia de datos instrucciones de ES transfieren programas y datos a memoria y devolver resultados de los caacutelculos al usuario

bull De control instrucciones de comprobacioacuten y de bifurcacioacuten Las de compobaciograven se emplean para comprobar el valor de una palabra de datos o el estado de un caacutelculo Las de bifurcacioacuten se usan entonces para bifurcar a diferentes conjuntos de instrucciones dependiendo de la decisioacuten tomada

NUacuteMERO DE DIRECCIONES

Es una de las formas tradicionales de describir la arquitectura de un procesador Esta dimensioacuten se va haciendo menos significativa a medida que aumenta la complejidad del disentildeo del procesador A pesar de ello merece la pena extenderse y analizar dicha distincioacuten

Las instrucciones aritmeacuteticas y loacutegicas son las que requieren maacutes operandos Praacutecticamente todas las operaciones aritmeacuteticas y loacutegicas son o bien unarias (un operando) o binarias (dos operandos) Asiacute pues necesitariacuteamos un maacuteximo de dos direcciones para referenciar operandos El resultado de una operacioacuten debe almacenarse

lo que sugiere una tercera direccioacuten Finalmente tras completar una instruccioacuten debe captarse la siguiente y su direccioacuten es pues necesaria

El razonamiento anterior sugiere como plausible que una instruccioacuten incluyera cuatro referencias a direcciones dos operandos un resultado y la direccioacuten de la instruccioacuten siguiente En la praacutectica es muy raro encontrar instrucciones que contengan cuatro direcciones La mayoriacutea de las instrucciones tienen una dos o tres direcciones estando impliacutecita la direccioacuten de la instruccioacuten siguiente (obtenida a partir del contador de programa)

La Figura 103 compara instrucciones tiacutepicas de una dos y tres direcciones que podriacutean utilizarse para calcular Y = (A mdash B) [(C + D ( E)] Con tres direcciones cada instruccioacuten especifica dos posiciones de operandos y la posicioacuten del resultado Dado que no queremos alterar el valor de ninguna posicioacuten de operando se utiliza una posicioacuten temporal T para almacenar resultados intermediosMuestra cuatro instrucciones y que la expresioacuten original teniacutea cinco operandos

Las instrucciones con tres direcciones no son comunes ya que requieren formatos relativamente largos para albergar las tres referencias Con instrucciones de dos direcciones para operaciones binarias una de las direcciones debe hacer el servicio doble de uno de los operandos y del resultado Asiacute pues la instruccioacuten laquoSUB Yraquo B realiza el caacutelculo Y mdash B y guarda el resultado en Y El formato de dos direcciones reduce el espacio necesario pero resulta algo engorroso Para evitar que se altere el valor de un operando se utiliza una instruccioacuten laquoMOVEraquo para transferir uno de los valores a una posicioacuten temporal de resultados antes de realizar el caacutelculo Nuestro programa ejemplo se ampliacutea a seis instrucciones La instruccioacuten de una sola direccioacuten es auacuten maacutes simple Para que funcione una segunda direccioacuten debe estar impliacutecita Esto fue lo usual en las primeras maacutequinas en las que la direccioacuten impliacutecita era un registro del procesador conocido como acumulador (AC) El acumulador contiene uno de los operandos y se emplea para almacenar el resultado En nuestro ejemplo se necesitariacutean ocho instrucciones para realizar la tarea

Es de hecho posible arreglaacuterselas con cero direcciones para algunas de instrucciones Las instrucciones con cero direcciones son aplicables a una organizacioacuten especial de memoria denominada pila (laquostackraquo) Una pila es un conjunto de posiciones del tipo last-in-first-out (el primero en entrar es primero en salir) La pila estaacute en una posicioacuten

conocida y a menudo al menos los dos elementos de su cabecera estaacuten en registros del procesador Asiacute pues las instrucciones con cero direcciones refe- renciariacutean dichos elementos de la cabecera

La Tabla 101 resume posibles interpretaciones a considerar para las instrucciones de cero una dos o tres direcciones En todos los casos se supone que la direccioacuten de la siguiente instruccioacuten estaacute impliacutecita y que se va a realizar una operacioacuten con dos operandos origen y un resultado

El nuacutemero de direcciones por instruccioacuten es una decisioacuten baacutesica de disentildeo Menos direcciones por instruccioacuten significa instrucciones maacutes primarias lo que requiere un procesador menos complejo Tambieacuten da lugar a instrucciones maacutes cortas Por otra parte los programas contienen maacutes instrucciones lo que normalmente supone mayor tiempo de ejecucioacuten y programas maacutes largos y complejos Hay tambieacuten un umbral importante entre instrucciones de una y de muacuteltiples direcciones Con instrucciones de una sola direccioacuten el programador tiene generalmente a su disposicioacuten solo un registro de uso general el acumulador

Con instrucciones de muacuteltiples direcciones suele disponerse de muacuteltiples registros de uso general Esto permite que algunas operaciones se realicen solo con registros Ya que los accesos a registros son maacutes raacutepidos que a memoria se acelera la ejecucioacuten Por razones de flexibilidad y facilidad para utilizar varios registros la mayoriacutea de las maacutequinas contemporaacuteneas emplean una combinacioacuten de instrucciones de dos y de tres direcciones

Las decisiones de disentildeo asociadas con la eleccioacuten del nuacutemero de direcciones por instruccioacuten son complicadas debido a otros factores Un aspecto a considerar es si una direccioacuten hace referencia a una posicioacuten de memoria o a un registro Ya que hay menos registros se necesitan menos bits para referendarios Ademaacutes una maacutequina puede per-mitir diversos modos de direccionamiento y la especificacioacuten del modo consume uno o maacutes bits El resultado es que la mayoriacutea de los disentildeos de procesadores hacen uso de varios formatos de instrucciones

DISENtildeO DEL REPERTORIO DE INSTRUCCIONES

Es uno de los aspectos maacutes interesantes y maacutes analizados del disentildeo de un computador El disentildeo de un repertorio de instrucciones es muy complejo ya que afecta a muchos aspectos del computador El repertorio de instrucciones define muchas de las funciones realizadas por el procesador y tiene pues un efecto significativo sobre la implementacioacuten del mismo El repertorio de instrucciones es el medio que tiene el

programador para controlar el procesador En consecuencia deben considerarse las necesidades del programador a la hora de disentildear el repertorio de instrucciones

Algunos aspectos baacutesicos relativos al disentildeo de repertorios de instrucciones siguen siendo temas de controversia Los maacutes importantes entre dichos aspectos fundamentales de disentildeo son

bull El repertorio de operaciones cuaacutentas y queacute operaciones considerar y cuaacuten complejas deben ser

bull Los tipos de datos los distintos tipos de datos con los que se efectuacutean operaciones

bull Los formatos de instrucciones longitud de la instruccioacuten (en bits) nuacutemero de direcciones tamantildeo de los distintos campos etc

bull Los registros nuacutemero de registros del procesador que pueden ser referenciados por las instrucciones y su uso

bull El direccionamiento el modo o modos de direccionamiento mediante los cuales puede especificarse la direccioacuten de un operando

Estos aspectos estaacuten fuertemente interrelacionados y deben considerarse conjuntamente en el disentildeo de un repertorio de instrucciones

La arquitectura RISC cuestiona muchas de las decisiones sobre repertorios de instrucciones tradicionalmente adoptadas en computadores comerciales

TIPOS DE OPERANDOS

Las instrucciones maacutequina operan con datos Las categoriacuteas generales maacutes importantes de datos son

bull Direcciones

bull Nuacutemeros

bull Caracteres

bull Datos loacutegicos

Las direcciones son un tipo de datos En muchos casos debe realizarse alguacuten caacutelculo sobre la referencia a un operando de una instruccioacuten a fin de determinar la direccioacuten de memoria principal o virtual En este contexto las direcciones pueden considerarse como nuacutemeros enteros sin signo

Otros tipos de datos comunes son los nuacutemeros los caracteres y los datos loacutegicos y cada uno de ellos se analiza brevemente en esta seccioacuten Aparte de estos en algunas maacutequinas se utilizan tipos o estructuras de datos especiacuteficos Por ejemplo puede haber operaciones maacutequina que trabajan directamente con listas o cadenas de caracteres

NUacuteMEROS

Todos los lenguajes maacutequina incluyen tipos de datos numeacutericos Incluso en el procesamiento de datos no numeacutericos se necesitan nuacutemeros que actuacuteen como contadores longitudes de campos etc Una distincioacuten importante entre los nuacutemeros utilizados en las matemaacuteticas ordinarias y los almacenados en un computador es que estos uacuteltimos estaacuten limitados Esto es cierto en dos sentidos En primer lugar hay un liacutemite para la magnitud de los nuacutemeros representabas en una maacutequina y en segundo lugar en el caso de nuacutemeros en coma flotante su precisioacuten estaacute limitada Por tanto el programador debe ser consciente de las consecuencias del redondeo el desbordamiento o el desbordamiento a cero

En los computadores son usuales tres tipos de datos numeacutericos

bull Enteros o en coma fija

bull En coma flotante

bull En decimal

CARACTERES

Una forma bastante comuacuten de datos es el texto o secuencias de caracteres Aunque la informacioacuten texual sea maacutes conveniente para las personas no puede ser almacenada o transmitida faacutecilmente en forma de caracteres por los sistemas de comunicacioacuten y de procesamiento de datos Tales sistemas estaacuten disentildeados para datos binarios Por lo tanto se han ideado diversos coacutedigos que permiten representar caracteres mediante secuencias de bits Tal vez el primer ejemplo fue el coacutedigo Morse Hoy en diacutea el coacutedigo de caracteres maacutes utilizado es el alfabeto de referencia internacional (IRA International Reference Alphabet) conocido en los Estados Unidos como ASCII (American Standard Code for Information Interchange) coacutedigo estaacutendar americano para intercambio de informacioacuten (veacutease Tabla 71) Cada caraacutecter es representado en este coacutedigo por un patroacuten distinto de 7 bits pueden representarse por tanto 128 caracteres diferentes Este nuacutemero es mayor que el necesario para representar los caracteres impresos utilizaacutendose algunos de los patrones para representar caracteres de control Algunos de estos se emplean para controlar la impresioacuten de caracteres en una paacutegina Otros caracteres de control estaacuten dedicados para procedimientos de comunicacioacuten Los caracteres codificados en ASCII se memorizan y transmiten utilizando casi siempre ocho bits por caraacutecter El octavo bit puede fijarse a cero o utilizarse como bit de paridad para la deteccioacuten de errores En el segundo caso el valor del bit se pone de manera que el nuacutemero total de unos en cada octeto sea o siempre impar (paridad impar) o siempre par (paridad par)

Observe en la Tabla 71 que con el ASCII los patrones de bits 011XXXX representan los diacutegitos 0 a 9 mediante sus valores binarios equivalentes 0000 a 1001 en los cuatro bits de la derecha Esta codificacioacuten coincide con la empleada en decimal empaquetado facilitaacutendose asiacute la conversioacuten entre ASCII de siete bits y decimal empaquetado de cuatro bits

Otro coacutedigo utilizado para caracteres es el coacutedigo de intercambio decimal codificado en binario ampliado (EBCDIC Extended Binary Coded Decimal Interchange Code) Este coacutedigo de ocho bits se emplea en los grandes computadores de IBM Como el ASCII el EBCDIC es compatible con el decimal empaquetado En el caso del EBCDIC los coacutedigos 11110000 a 11111001 representan los diacutegitos 0 a 9

DATOS LOacuteGICOS

Normalmente cada palabra o cualquier otra unidad direccionable (byte media palabra etc) es tratada como una unidad de datos individual Sin embargo a veces es uacutetil considerar una unidad de laquobits como n elementos o datos de un bit donde cada elemento tiene un valor 1 o 0 Cuando los datos son vistos de esta manera se consideran datos loacutegicos

Esta representacioacuten orientada a bits tiene dos ventajas La primera es que a veces puede interesarnos almacenar una matriz de elementos binarios o booleanos en la que cada elemento pueda tomar solo los valores 1 (verdadero) oacute 0 (falso) Con datos loacutegicos la memoria puede ser entonces utilizada

Repertorio de instrucciones modos de direccionamiento y formatos

DIRECCIONAMIENTO

El campo o campos de direcciones en un formato de instruccioacuten usual estaacute bastante limitado Seriacutea deseable poder referenciar un rango elevado de posiciones de memoria principal o en algunos sistemas de memoria virtual Para conseguir este objetivo se han empleado diversas teacutecnicas de direccionamiento Todas ellas implican alguacuten compromiso entre el rango de direcciones yo flexibilidad de direccionamiento de una parte y por otra el nuacutemero de referencias a memoria yo la complejidad de caacutelculo de las direcciones los modos de direccionamiento maacutes comunes son

bull Inmediato

bull Directo

bull Indirecto

bull Registro

bull Indirecto con registro

bull Con desplazamiento Pila

La Tabla 111 indica el caacutelculo de la direccioacuten realizado para cada modo de direccionamiento

Praacutecticamente todas las arquitecturas de computadores ofrecen maacutes de uno de estos modos de direccionamiento La cuestioacuten que surge es coacutemo determina la unidad de control queacute modo de direccionamiento se estaacute empleando en cada instruccioacuten Se adoptan diversos enfoques alternativos A menudo codops diferentes emplearaacuten modos de direccionamiento distintos Tambieacuten uno o maacutes bits del formato de instruccioacuten

pueden utilizarse como campo de modo El valor del campo de modo determina queacute modo de direccionamiento va a utilizarse

En un sistema sin memoria virtual la direccioacuten efectiva seraacute o una direccioacuten de memoria principal o un registro En un sistema con memoria virtual la direccioacuten efectiva es una direccioacuten virtual o un registro La correspondencia real con una direccioacuten fiacutesica dependeraacute del mecanismo de paginacioacuten y no estaacute visible al programador

DIRECCIONAMIENTO INMEDIATO

Es la forma maacutes sencilla de direccionamiento en el que el operando estaacute en realidad presente en la propia instruccioacuten

Operando = A

Este modo puede utilizarse para definir y utilizar constantes o para fijar valores iniciales de variables Normalmente el nuacutemero se almacena en complemento a dos el bit maacutes a la izquierda del campo de operando se utiliza como bit de signo Cuando el operando se carga en un registro de datos el bit de signo se replica hacia la izquierda hasta la longitud total de la palabra de datos

Como se ha definido anteriormente el pareacutentesis se interpreta como laquocontenido deraquo La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dos

La ventaja del direccionamiento inmediato es que una vez captada la instruccioacuten no se requiere una referencia a memoria para obtener el operando ahorraacutendose pues un ciclo de memoria o de cacheacute en el ciclo de instruccioacuten La desventaja es que el tamantildeo del nuacutemero estaacute restringido a la longitud del campo de direcciones que en la mayoriacutea de los repertorios de instrucciones es pequentildeo comparado con la longitud de palabra

DIRECCIONAMIENTO DIRECTO

Una forma muy sencilla de direccionamiento es el direccionamiento directo en el que el campo de direcciones contiene la direccioacuten efectiva del operando

EA = A

Esta teacutecnica fue comuacuten en las primeras generaciones de computadores y se encuentra auacuten en diversos sistemas Solo requiere una referencia a memoria y no necesita ninguacuten caacutelculo especial La limitacioacuten obvia es que proporciona un espacio de direcciones restringido

DIRECCIONAMIENTO INDIRECTO

El problema del direccionamiento directo es que la longitud del campo de direcciones es normalmente menor que la longitud de palabra limitando pues el rango de direcciones Una solucioacuten es hacer que el campo de direcciones referencie la direccioacuten de una palabra de memoria la cual contenga la direccioacuten completa del operando Esto es lo que se denomina direccionamiento indirecto

EA = (A)

La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dosccedil

Una variante de direccionamiento indirecto raramente utilizada es el direccionamiento multinivel o en cascada

EA = ((A))

En este caso uno de los bits de una palabra de direccioacuten es un indicador de laquoindireccioacutenraquo (I) Si el bit I es 0 la palabra contiene el valor de EA Si el bit I es 1 entonces se invoca otro nivel de laquoindireccioacutenraquo No parece que esta aproximacioacuten ofrezca ninguna ventaja particular y su desventaja es que podriacutean requerirse dos o maacutes referencias para captar un operando

DIRECCIONAMIENTO DE REGISTROS

El direccionamiento de registros es similar al directo La uacutenica diferencia es que el campo de direcciones referencia un registro en lugar de una direccioacuten de memoria principal

EA = R

Por ejemplo si el campo de direccioacuten de registro de la instruccioacuten es 5 la direccioacuten deseada es el registro R5 y el valor del operando es el contenido de R5 Normalmente un campo de direcciones que referencia a registros consta de tres a cinco bits de manera que pueden referenciarse un total de 8 a 32 registros de uso general

Las ventajas del direccionamiento de registros son que (1) solo es necesario un campo pequentildeo de direcciones en la instruccioacuten y (2) no se requieren referencias a memoria Como se comentoacute en el Capiacutetulo 4 el tiempo de acceso a un registro interno del procesador es mucho menor que para la memoria principal La desventaja del direccionamiento a registros es que el espacio de direcciones estaacute muy limitado

Si se hace un uso masivo del direccionamiento a registros en un repertorio de instrucciones los registros del procesador se emplearaacuten intensamente Debido al nuacutemero tan limitado de registros (en comparacioacuten con el nuacutemero de posiciones de memoria principal) usarlos de esta manera tiene sentido solo si se emplean eficientemente Si todo operando se carga de memoria principal a un registro se opera con eacutel una vez y se devuelve a memoria principal resulta que se estariacutea antildeadiendo un paso intermedio improcedente Si en lugar de esto el operando del registro se mantiene en uso durante varias operaciones se estariacutea consiguiendo un ahorro real Un ejemplo son los resultados intermedios de un caacutelculo En particular suponga que se va a implementar en software el algoritmo de multiplicacioacuten en complemento a dos La posicioacuten A del diagrama de flujo (Figura 912) se referencia muchas veces y debiera estar implementada en un registro en lugar de en una posicioacuten de memoria principal

Depende del programador decidir queacute valores deben mantenerse en registros y cuaacuteles deben almacenarse en memoria principal La mayoriacutea de los procesadores modernos emplean muacuteltiples registros de uso general cargando al programador en lenguaje ensamblador (cuando desarrolla compiladores por ejemplo) con la responsabilidad de conseguir una ejecucioacuten eficiente

DIRECCIONAMIENTO INDIRECTO CON REGISTRO

Igual que el direccionamiento de registros es anaacutelogo al directo el direccionamiento indirecto con registro es anaacutelogo al direccionamiento indirecto En ambos casos la diferencia estriba en si el campo de direcciones hace referencia a una posicioacuten de memoria o a un registro Asiacute para el direccionamiento indirecto con registro

EA = (R)

Las ventajas y limitaciones del direccionamiento indirecto con registro son baacutesicamente las mismas que se tienen para el direccionamiento indirecto En ambos casos la limitacioacuten de espacio o rango de direcciones del campo de direcciones se supera

haciendo que dicho campo referencie una posicioacuten de una palabra completa (un registro completo en este caso) que contenga la direccioacuten Ademaacutes el direccionamiento indirecto con registro emplea una referencia menos a memoria que el direccionamiento indirecto

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

Los principales usos del direccionamiento con desplazamiento son

bull Desplazamiento relativo

bull Direccionamiento con registro base

bull Indexado

Direccionamiento relativo Para el direccionamiento relativo tambieacuten llamado direccionamiento relativo al PC el registro referenciado impliacutecitamente es el contador de programa (PC) Es decir la direccioacuten de instruccioacuten actual se suma al campo de direcciones para producir el valor EA Normalmente el campo de direcciones se trata como nuacutemero en complemento a dos para esta operacioacuten En consecuencia la direccioacuten efectiva es un desplazamiento relativo a la direccioacuten de la instruccioacuten

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 5: Arquitectura Trabajo

lo que sugiere una tercera direccioacuten Finalmente tras completar una instruccioacuten debe captarse la siguiente y su direccioacuten es pues necesaria

El razonamiento anterior sugiere como plausible que una instruccioacuten incluyera cuatro referencias a direcciones dos operandos un resultado y la direccioacuten de la instruccioacuten siguiente En la praacutectica es muy raro encontrar instrucciones que contengan cuatro direcciones La mayoriacutea de las instrucciones tienen una dos o tres direcciones estando impliacutecita la direccioacuten de la instruccioacuten siguiente (obtenida a partir del contador de programa)

La Figura 103 compara instrucciones tiacutepicas de una dos y tres direcciones que podriacutean utilizarse para calcular Y = (A mdash B) [(C + D ( E)] Con tres direcciones cada instruccioacuten especifica dos posiciones de operandos y la posicioacuten del resultado Dado que no queremos alterar el valor de ninguna posicioacuten de operando se utiliza una posicioacuten temporal T para almacenar resultados intermediosMuestra cuatro instrucciones y que la expresioacuten original teniacutea cinco operandos

Las instrucciones con tres direcciones no son comunes ya que requieren formatos relativamente largos para albergar las tres referencias Con instrucciones de dos direcciones para operaciones binarias una de las direcciones debe hacer el servicio doble de uno de los operandos y del resultado Asiacute pues la instruccioacuten laquoSUB Yraquo B realiza el caacutelculo Y mdash B y guarda el resultado en Y El formato de dos direcciones reduce el espacio necesario pero resulta algo engorroso Para evitar que se altere el valor de un operando se utiliza una instruccioacuten laquoMOVEraquo para transferir uno de los valores a una posicioacuten temporal de resultados antes de realizar el caacutelculo Nuestro programa ejemplo se ampliacutea a seis instrucciones La instruccioacuten de una sola direccioacuten es auacuten maacutes simple Para que funcione una segunda direccioacuten debe estar impliacutecita Esto fue lo usual en las primeras maacutequinas en las que la direccioacuten impliacutecita era un registro del procesador conocido como acumulador (AC) El acumulador contiene uno de los operandos y se emplea para almacenar el resultado En nuestro ejemplo se necesitariacutean ocho instrucciones para realizar la tarea

Es de hecho posible arreglaacuterselas con cero direcciones para algunas de instrucciones Las instrucciones con cero direcciones son aplicables a una organizacioacuten especial de memoria denominada pila (laquostackraquo) Una pila es un conjunto de posiciones del tipo last-in-first-out (el primero en entrar es primero en salir) La pila estaacute en una posicioacuten

conocida y a menudo al menos los dos elementos de su cabecera estaacuten en registros del procesador Asiacute pues las instrucciones con cero direcciones refe- renciariacutean dichos elementos de la cabecera

La Tabla 101 resume posibles interpretaciones a considerar para las instrucciones de cero una dos o tres direcciones En todos los casos se supone que la direccioacuten de la siguiente instruccioacuten estaacute impliacutecita y que se va a realizar una operacioacuten con dos operandos origen y un resultado

El nuacutemero de direcciones por instruccioacuten es una decisioacuten baacutesica de disentildeo Menos direcciones por instruccioacuten significa instrucciones maacutes primarias lo que requiere un procesador menos complejo Tambieacuten da lugar a instrucciones maacutes cortas Por otra parte los programas contienen maacutes instrucciones lo que normalmente supone mayor tiempo de ejecucioacuten y programas maacutes largos y complejos Hay tambieacuten un umbral importante entre instrucciones de una y de muacuteltiples direcciones Con instrucciones de una sola direccioacuten el programador tiene generalmente a su disposicioacuten solo un registro de uso general el acumulador

Con instrucciones de muacuteltiples direcciones suele disponerse de muacuteltiples registros de uso general Esto permite que algunas operaciones se realicen solo con registros Ya que los accesos a registros son maacutes raacutepidos que a memoria se acelera la ejecucioacuten Por razones de flexibilidad y facilidad para utilizar varios registros la mayoriacutea de las maacutequinas contemporaacuteneas emplean una combinacioacuten de instrucciones de dos y de tres direcciones

Las decisiones de disentildeo asociadas con la eleccioacuten del nuacutemero de direcciones por instruccioacuten son complicadas debido a otros factores Un aspecto a considerar es si una direccioacuten hace referencia a una posicioacuten de memoria o a un registro Ya que hay menos registros se necesitan menos bits para referendarios Ademaacutes una maacutequina puede per-mitir diversos modos de direccionamiento y la especificacioacuten del modo consume uno o maacutes bits El resultado es que la mayoriacutea de los disentildeos de procesadores hacen uso de varios formatos de instrucciones

DISENtildeO DEL REPERTORIO DE INSTRUCCIONES

Es uno de los aspectos maacutes interesantes y maacutes analizados del disentildeo de un computador El disentildeo de un repertorio de instrucciones es muy complejo ya que afecta a muchos aspectos del computador El repertorio de instrucciones define muchas de las funciones realizadas por el procesador y tiene pues un efecto significativo sobre la implementacioacuten del mismo El repertorio de instrucciones es el medio que tiene el

programador para controlar el procesador En consecuencia deben considerarse las necesidades del programador a la hora de disentildear el repertorio de instrucciones

Algunos aspectos baacutesicos relativos al disentildeo de repertorios de instrucciones siguen siendo temas de controversia Los maacutes importantes entre dichos aspectos fundamentales de disentildeo son

bull El repertorio de operaciones cuaacutentas y queacute operaciones considerar y cuaacuten complejas deben ser

bull Los tipos de datos los distintos tipos de datos con los que se efectuacutean operaciones

bull Los formatos de instrucciones longitud de la instruccioacuten (en bits) nuacutemero de direcciones tamantildeo de los distintos campos etc

bull Los registros nuacutemero de registros del procesador que pueden ser referenciados por las instrucciones y su uso

bull El direccionamiento el modo o modos de direccionamiento mediante los cuales puede especificarse la direccioacuten de un operando

Estos aspectos estaacuten fuertemente interrelacionados y deben considerarse conjuntamente en el disentildeo de un repertorio de instrucciones

La arquitectura RISC cuestiona muchas de las decisiones sobre repertorios de instrucciones tradicionalmente adoptadas en computadores comerciales

TIPOS DE OPERANDOS

Las instrucciones maacutequina operan con datos Las categoriacuteas generales maacutes importantes de datos son

bull Direcciones

bull Nuacutemeros

bull Caracteres

bull Datos loacutegicos

Las direcciones son un tipo de datos En muchos casos debe realizarse alguacuten caacutelculo sobre la referencia a un operando de una instruccioacuten a fin de determinar la direccioacuten de memoria principal o virtual En este contexto las direcciones pueden considerarse como nuacutemeros enteros sin signo

Otros tipos de datos comunes son los nuacutemeros los caracteres y los datos loacutegicos y cada uno de ellos se analiza brevemente en esta seccioacuten Aparte de estos en algunas maacutequinas se utilizan tipos o estructuras de datos especiacuteficos Por ejemplo puede haber operaciones maacutequina que trabajan directamente con listas o cadenas de caracteres

NUacuteMEROS

Todos los lenguajes maacutequina incluyen tipos de datos numeacutericos Incluso en el procesamiento de datos no numeacutericos se necesitan nuacutemeros que actuacuteen como contadores longitudes de campos etc Una distincioacuten importante entre los nuacutemeros utilizados en las matemaacuteticas ordinarias y los almacenados en un computador es que estos uacuteltimos estaacuten limitados Esto es cierto en dos sentidos En primer lugar hay un liacutemite para la magnitud de los nuacutemeros representabas en una maacutequina y en segundo lugar en el caso de nuacutemeros en coma flotante su precisioacuten estaacute limitada Por tanto el programador debe ser consciente de las consecuencias del redondeo el desbordamiento o el desbordamiento a cero

En los computadores son usuales tres tipos de datos numeacutericos

bull Enteros o en coma fija

bull En coma flotante

bull En decimal

CARACTERES

Una forma bastante comuacuten de datos es el texto o secuencias de caracteres Aunque la informacioacuten texual sea maacutes conveniente para las personas no puede ser almacenada o transmitida faacutecilmente en forma de caracteres por los sistemas de comunicacioacuten y de procesamiento de datos Tales sistemas estaacuten disentildeados para datos binarios Por lo tanto se han ideado diversos coacutedigos que permiten representar caracteres mediante secuencias de bits Tal vez el primer ejemplo fue el coacutedigo Morse Hoy en diacutea el coacutedigo de caracteres maacutes utilizado es el alfabeto de referencia internacional (IRA International Reference Alphabet) conocido en los Estados Unidos como ASCII (American Standard Code for Information Interchange) coacutedigo estaacutendar americano para intercambio de informacioacuten (veacutease Tabla 71) Cada caraacutecter es representado en este coacutedigo por un patroacuten distinto de 7 bits pueden representarse por tanto 128 caracteres diferentes Este nuacutemero es mayor que el necesario para representar los caracteres impresos utilizaacutendose algunos de los patrones para representar caracteres de control Algunos de estos se emplean para controlar la impresioacuten de caracteres en una paacutegina Otros caracteres de control estaacuten dedicados para procedimientos de comunicacioacuten Los caracteres codificados en ASCII se memorizan y transmiten utilizando casi siempre ocho bits por caraacutecter El octavo bit puede fijarse a cero o utilizarse como bit de paridad para la deteccioacuten de errores En el segundo caso el valor del bit se pone de manera que el nuacutemero total de unos en cada octeto sea o siempre impar (paridad impar) o siempre par (paridad par)

Observe en la Tabla 71 que con el ASCII los patrones de bits 011XXXX representan los diacutegitos 0 a 9 mediante sus valores binarios equivalentes 0000 a 1001 en los cuatro bits de la derecha Esta codificacioacuten coincide con la empleada en decimal empaquetado facilitaacutendose asiacute la conversioacuten entre ASCII de siete bits y decimal empaquetado de cuatro bits

Otro coacutedigo utilizado para caracteres es el coacutedigo de intercambio decimal codificado en binario ampliado (EBCDIC Extended Binary Coded Decimal Interchange Code) Este coacutedigo de ocho bits se emplea en los grandes computadores de IBM Como el ASCII el EBCDIC es compatible con el decimal empaquetado En el caso del EBCDIC los coacutedigos 11110000 a 11111001 representan los diacutegitos 0 a 9

DATOS LOacuteGICOS

Normalmente cada palabra o cualquier otra unidad direccionable (byte media palabra etc) es tratada como una unidad de datos individual Sin embargo a veces es uacutetil considerar una unidad de laquobits como n elementos o datos de un bit donde cada elemento tiene un valor 1 o 0 Cuando los datos son vistos de esta manera se consideran datos loacutegicos

Esta representacioacuten orientada a bits tiene dos ventajas La primera es que a veces puede interesarnos almacenar una matriz de elementos binarios o booleanos en la que cada elemento pueda tomar solo los valores 1 (verdadero) oacute 0 (falso) Con datos loacutegicos la memoria puede ser entonces utilizada

Repertorio de instrucciones modos de direccionamiento y formatos

DIRECCIONAMIENTO

El campo o campos de direcciones en un formato de instruccioacuten usual estaacute bastante limitado Seriacutea deseable poder referenciar un rango elevado de posiciones de memoria principal o en algunos sistemas de memoria virtual Para conseguir este objetivo se han empleado diversas teacutecnicas de direccionamiento Todas ellas implican alguacuten compromiso entre el rango de direcciones yo flexibilidad de direccionamiento de una parte y por otra el nuacutemero de referencias a memoria yo la complejidad de caacutelculo de las direcciones los modos de direccionamiento maacutes comunes son

bull Inmediato

bull Directo

bull Indirecto

bull Registro

bull Indirecto con registro

bull Con desplazamiento Pila

La Tabla 111 indica el caacutelculo de la direccioacuten realizado para cada modo de direccionamiento

Praacutecticamente todas las arquitecturas de computadores ofrecen maacutes de uno de estos modos de direccionamiento La cuestioacuten que surge es coacutemo determina la unidad de control queacute modo de direccionamiento se estaacute empleando en cada instruccioacuten Se adoptan diversos enfoques alternativos A menudo codops diferentes emplearaacuten modos de direccionamiento distintos Tambieacuten uno o maacutes bits del formato de instruccioacuten

pueden utilizarse como campo de modo El valor del campo de modo determina queacute modo de direccionamiento va a utilizarse

En un sistema sin memoria virtual la direccioacuten efectiva seraacute o una direccioacuten de memoria principal o un registro En un sistema con memoria virtual la direccioacuten efectiva es una direccioacuten virtual o un registro La correspondencia real con una direccioacuten fiacutesica dependeraacute del mecanismo de paginacioacuten y no estaacute visible al programador

DIRECCIONAMIENTO INMEDIATO

Es la forma maacutes sencilla de direccionamiento en el que el operando estaacute en realidad presente en la propia instruccioacuten

Operando = A

Este modo puede utilizarse para definir y utilizar constantes o para fijar valores iniciales de variables Normalmente el nuacutemero se almacena en complemento a dos el bit maacutes a la izquierda del campo de operando se utiliza como bit de signo Cuando el operando se carga en un registro de datos el bit de signo se replica hacia la izquierda hasta la longitud total de la palabra de datos

Como se ha definido anteriormente el pareacutentesis se interpreta como laquocontenido deraquo La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dos

La ventaja del direccionamiento inmediato es que una vez captada la instruccioacuten no se requiere una referencia a memoria para obtener el operando ahorraacutendose pues un ciclo de memoria o de cacheacute en el ciclo de instruccioacuten La desventaja es que el tamantildeo del nuacutemero estaacute restringido a la longitud del campo de direcciones que en la mayoriacutea de los repertorios de instrucciones es pequentildeo comparado con la longitud de palabra

DIRECCIONAMIENTO DIRECTO

Una forma muy sencilla de direccionamiento es el direccionamiento directo en el que el campo de direcciones contiene la direccioacuten efectiva del operando

EA = A

Esta teacutecnica fue comuacuten en las primeras generaciones de computadores y se encuentra auacuten en diversos sistemas Solo requiere una referencia a memoria y no necesita ninguacuten caacutelculo especial La limitacioacuten obvia es que proporciona un espacio de direcciones restringido

DIRECCIONAMIENTO INDIRECTO

El problema del direccionamiento directo es que la longitud del campo de direcciones es normalmente menor que la longitud de palabra limitando pues el rango de direcciones Una solucioacuten es hacer que el campo de direcciones referencie la direccioacuten de una palabra de memoria la cual contenga la direccioacuten completa del operando Esto es lo que se denomina direccionamiento indirecto

EA = (A)

La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dosccedil

Una variante de direccionamiento indirecto raramente utilizada es el direccionamiento multinivel o en cascada

EA = ((A))

En este caso uno de los bits de una palabra de direccioacuten es un indicador de laquoindireccioacutenraquo (I) Si el bit I es 0 la palabra contiene el valor de EA Si el bit I es 1 entonces se invoca otro nivel de laquoindireccioacutenraquo No parece que esta aproximacioacuten ofrezca ninguna ventaja particular y su desventaja es que podriacutean requerirse dos o maacutes referencias para captar un operando

DIRECCIONAMIENTO DE REGISTROS

El direccionamiento de registros es similar al directo La uacutenica diferencia es que el campo de direcciones referencia un registro en lugar de una direccioacuten de memoria principal

EA = R

Por ejemplo si el campo de direccioacuten de registro de la instruccioacuten es 5 la direccioacuten deseada es el registro R5 y el valor del operando es el contenido de R5 Normalmente un campo de direcciones que referencia a registros consta de tres a cinco bits de manera que pueden referenciarse un total de 8 a 32 registros de uso general

Las ventajas del direccionamiento de registros son que (1) solo es necesario un campo pequentildeo de direcciones en la instruccioacuten y (2) no se requieren referencias a memoria Como se comentoacute en el Capiacutetulo 4 el tiempo de acceso a un registro interno del procesador es mucho menor que para la memoria principal La desventaja del direccionamiento a registros es que el espacio de direcciones estaacute muy limitado

Si se hace un uso masivo del direccionamiento a registros en un repertorio de instrucciones los registros del procesador se emplearaacuten intensamente Debido al nuacutemero tan limitado de registros (en comparacioacuten con el nuacutemero de posiciones de memoria principal) usarlos de esta manera tiene sentido solo si se emplean eficientemente Si todo operando se carga de memoria principal a un registro se opera con eacutel una vez y se devuelve a memoria principal resulta que se estariacutea antildeadiendo un paso intermedio improcedente Si en lugar de esto el operando del registro se mantiene en uso durante varias operaciones se estariacutea consiguiendo un ahorro real Un ejemplo son los resultados intermedios de un caacutelculo En particular suponga que se va a implementar en software el algoritmo de multiplicacioacuten en complemento a dos La posicioacuten A del diagrama de flujo (Figura 912) se referencia muchas veces y debiera estar implementada en un registro en lugar de en una posicioacuten de memoria principal

Depende del programador decidir queacute valores deben mantenerse en registros y cuaacuteles deben almacenarse en memoria principal La mayoriacutea de los procesadores modernos emplean muacuteltiples registros de uso general cargando al programador en lenguaje ensamblador (cuando desarrolla compiladores por ejemplo) con la responsabilidad de conseguir una ejecucioacuten eficiente

DIRECCIONAMIENTO INDIRECTO CON REGISTRO

Igual que el direccionamiento de registros es anaacutelogo al directo el direccionamiento indirecto con registro es anaacutelogo al direccionamiento indirecto En ambos casos la diferencia estriba en si el campo de direcciones hace referencia a una posicioacuten de memoria o a un registro Asiacute para el direccionamiento indirecto con registro

EA = (R)

Las ventajas y limitaciones del direccionamiento indirecto con registro son baacutesicamente las mismas que se tienen para el direccionamiento indirecto En ambos casos la limitacioacuten de espacio o rango de direcciones del campo de direcciones se supera

haciendo que dicho campo referencie una posicioacuten de una palabra completa (un registro completo en este caso) que contenga la direccioacuten Ademaacutes el direccionamiento indirecto con registro emplea una referencia menos a memoria que el direccionamiento indirecto

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

Los principales usos del direccionamiento con desplazamiento son

bull Desplazamiento relativo

bull Direccionamiento con registro base

bull Indexado

Direccionamiento relativo Para el direccionamiento relativo tambieacuten llamado direccionamiento relativo al PC el registro referenciado impliacutecitamente es el contador de programa (PC) Es decir la direccioacuten de instruccioacuten actual se suma al campo de direcciones para producir el valor EA Normalmente el campo de direcciones se trata como nuacutemero en complemento a dos para esta operacioacuten En consecuencia la direccioacuten efectiva es un desplazamiento relativo a la direccioacuten de la instruccioacuten

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 6: Arquitectura Trabajo

conocida y a menudo al menos los dos elementos de su cabecera estaacuten en registros del procesador Asiacute pues las instrucciones con cero direcciones refe- renciariacutean dichos elementos de la cabecera

La Tabla 101 resume posibles interpretaciones a considerar para las instrucciones de cero una dos o tres direcciones En todos los casos se supone que la direccioacuten de la siguiente instruccioacuten estaacute impliacutecita y que se va a realizar una operacioacuten con dos operandos origen y un resultado

El nuacutemero de direcciones por instruccioacuten es una decisioacuten baacutesica de disentildeo Menos direcciones por instruccioacuten significa instrucciones maacutes primarias lo que requiere un procesador menos complejo Tambieacuten da lugar a instrucciones maacutes cortas Por otra parte los programas contienen maacutes instrucciones lo que normalmente supone mayor tiempo de ejecucioacuten y programas maacutes largos y complejos Hay tambieacuten un umbral importante entre instrucciones de una y de muacuteltiples direcciones Con instrucciones de una sola direccioacuten el programador tiene generalmente a su disposicioacuten solo un registro de uso general el acumulador

Con instrucciones de muacuteltiples direcciones suele disponerse de muacuteltiples registros de uso general Esto permite que algunas operaciones se realicen solo con registros Ya que los accesos a registros son maacutes raacutepidos que a memoria se acelera la ejecucioacuten Por razones de flexibilidad y facilidad para utilizar varios registros la mayoriacutea de las maacutequinas contemporaacuteneas emplean una combinacioacuten de instrucciones de dos y de tres direcciones

Las decisiones de disentildeo asociadas con la eleccioacuten del nuacutemero de direcciones por instruccioacuten son complicadas debido a otros factores Un aspecto a considerar es si una direccioacuten hace referencia a una posicioacuten de memoria o a un registro Ya que hay menos registros se necesitan menos bits para referendarios Ademaacutes una maacutequina puede per-mitir diversos modos de direccionamiento y la especificacioacuten del modo consume uno o maacutes bits El resultado es que la mayoriacutea de los disentildeos de procesadores hacen uso de varios formatos de instrucciones

DISENtildeO DEL REPERTORIO DE INSTRUCCIONES

Es uno de los aspectos maacutes interesantes y maacutes analizados del disentildeo de un computador El disentildeo de un repertorio de instrucciones es muy complejo ya que afecta a muchos aspectos del computador El repertorio de instrucciones define muchas de las funciones realizadas por el procesador y tiene pues un efecto significativo sobre la implementacioacuten del mismo El repertorio de instrucciones es el medio que tiene el

programador para controlar el procesador En consecuencia deben considerarse las necesidades del programador a la hora de disentildear el repertorio de instrucciones

Algunos aspectos baacutesicos relativos al disentildeo de repertorios de instrucciones siguen siendo temas de controversia Los maacutes importantes entre dichos aspectos fundamentales de disentildeo son

bull El repertorio de operaciones cuaacutentas y queacute operaciones considerar y cuaacuten complejas deben ser

bull Los tipos de datos los distintos tipos de datos con los que se efectuacutean operaciones

bull Los formatos de instrucciones longitud de la instruccioacuten (en bits) nuacutemero de direcciones tamantildeo de los distintos campos etc

bull Los registros nuacutemero de registros del procesador que pueden ser referenciados por las instrucciones y su uso

bull El direccionamiento el modo o modos de direccionamiento mediante los cuales puede especificarse la direccioacuten de un operando

Estos aspectos estaacuten fuertemente interrelacionados y deben considerarse conjuntamente en el disentildeo de un repertorio de instrucciones

La arquitectura RISC cuestiona muchas de las decisiones sobre repertorios de instrucciones tradicionalmente adoptadas en computadores comerciales

TIPOS DE OPERANDOS

Las instrucciones maacutequina operan con datos Las categoriacuteas generales maacutes importantes de datos son

bull Direcciones

bull Nuacutemeros

bull Caracteres

bull Datos loacutegicos

Las direcciones son un tipo de datos En muchos casos debe realizarse alguacuten caacutelculo sobre la referencia a un operando de una instruccioacuten a fin de determinar la direccioacuten de memoria principal o virtual En este contexto las direcciones pueden considerarse como nuacutemeros enteros sin signo

Otros tipos de datos comunes son los nuacutemeros los caracteres y los datos loacutegicos y cada uno de ellos se analiza brevemente en esta seccioacuten Aparte de estos en algunas maacutequinas se utilizan tipos o estructuras de datos especiacuteficos Por ejemplo puede haber operaciones maacutequina que trabajan directamente con listas o cadenas de caracteres

NUacuteMEROS

Todos los lenguajes maacutequina incluyen tipos de datos numeacutericos Incluso en el procesamiento de datos no numeacutericos se necesitan nuacutemeros que actuacuteen como contadores longitudes de campos etc Una distincioacuten importante entre los nuacutemeros utilizados en las matemaacuteticas ordinarias y los almacenados en un computador es que estos uacuteltimos estaacuten limitados Esto es cierto en dos sentidos En primer lugar hay un liacutemite para la magnitud de los nuacutemeros representabas en una maacutequina y en segundo lugar en el caso de nuacutemeros en coma flotante su precisioacuten estaacute limitada Por tanto el programador debe ser consciente de las consecuencias del redondeo el desbordamiento o el desbordamiento a cero

En los computadores son usuales tres tipos de datos numeacutericos

bull Enteros o en coma fija

bull En coma flotante

bull En decimal

CARACTERES

Una forma bastante comuacuten de datos es el texto o secuencias de caracteres Aunque la informacioacuten texual sea maacutes conveniente para las personas no puede ser almacenada o transmitida faacutecilmente en forma de caracteres por los sistemas de comunicacioacuten y de procesamiento de datos Tales sistemas estaacuten disentildeados para datos binarios Por lo tanto se han ideado diversos coacutedigos que permiten representar caracteres mediante secuencias de bits Tal vez el primer ejemplo fue el coacutedigo Morse Hoy en diacutea el coacutedigo de caracteres maacutes utilizado es el alfabeto de referencia internacional (IRA International Reference Alphabet) conocido en los Estados Unidos como ASCII (American Standard Code for Information Interchange) coacutedigo estaacutendar americano para intercambio de informacioacuten (veacutease Tabla 71) Cada caraacutecter es representado en este coacutedigo por un patroacuten distinto de 7 bits pueden representarse por tanto 128 caracteres diferentes Este nuacutemero es mayor que el necesario para representar los caracteres impresos utilizaacutendose algunos de los patrones para representar caracteres de control Algunos de estos se emplean para controlar la impresioacuten de caracteres en una paacutegina Otros caracteres de control estaacuten dedicados para procedimientos de comunicacioacuten Los caracteres codificados en ASCII se memorizan y transmiten utilizando casi siempre ocho bits por caraacutecter El octavo bit puede fijarse a cero o utilizarse como bit de paridad para la deteccioacuten de errores En el segundo caso el valor del bit se pone de manera que el nuacutemero total de unos en cada octeto sea o siempre impar (paridad impar) o siempre par (paridad par)

Observe en la Tabla 71 que con el ASCII los patrones de bits 011XXXX representan los diacutegitos 0 a 9 mediante sus valores binarios equivalentes 0000 a 1001 en los cuatro bits de la derecha Esta codificacioacuten coincide con la empleada en decimal empaquetado facilitaacutendose asiacute la conversioacuten entre ASCII de siete bits y decimal empaquetado de cuatro bits

Otro coacutedigo utilizado para caracteres es el coacutedigo de intercambio decimal codificado en binario ampliado (EBCDIC Extended Binary Coded Decimal Interchange Code) Este coacutedigo de ocho bits se emplea en los grandes computadores de IBM Como el ASCII el EBCDIC es compatible con el decimal empaquetado En el caso del EBCDIC los coacutedigos 11110000 a 11111001 representan los diacutegitos 0 a 9

DATOS LOacuteGICOS

Normalmente cada palabra o cualquier otra unidad direccionable (byte media palabra etc) es tratada como una unidad de datos individual Sin embargo a veces es uacutetil considerar una unidad de laquobits como n elementos o datos de un bit donde cada elemento tiene un valor 1 o 0 Cuando los datos son vistos de esta manera se consideran datos loacutegicos

Esta representacioacuten orientada a bits tiene dos ventajas La primera es que a veces puede interesarnos almacenar una matriz de elementos binarios o booleanos en la que cada elemento pueda tomar solo los valores 1 (verdadero) oacute 0 (falso) Con datos loacutegicos la memoria puede ser entonces utilizada

Repertorio de instrucciones modos de direccionamiento y formatos

DIRECCIONAMIENTO

El campo o campos de direcciones en un formato de instruccioacuten usual estaacute bastante limitado Seriacutea deseable poder referenciar un rango elevado de posiciones de memoria principal o en algunos sistemas de memoria virtual Para conseguir este objetivo se han empleado diversas teacutecnicas de direccionamiento Todas ellas implican alguacuten compromiso entre el rango de direcciones yo flexibilidad de direccionamiento de una parte y por otra el nuacutemero de referencias a memoria yo la complejidad de caacutelculo de las direcciones los modos de direccionamiento maacutes comunes son

bull Inmediato

bull Directo

bull Indirecto

bull Registro

bull Indirecto con registro

bull Con desplazamiento Pila

La Tabla 111 indica el caacutelculo de la direccioacuten realizado para cada modo de direccionamiento

Praacutecticamente todas las arquitecturas de computadores ofrecen maacutes de uno de estos modos de direccionamiento La cuestioacuten que surge es coacutemo determina la unidad de control queacute modo de direccionamiento se estaacute empleando en cada instruccioacuten Se adoptan diversos enfoques alternativos A menudo codops diferentes emplearaacuten modos de direccionamiento distintos Tambieacuten uno o maacutes bits del formato de instruccioacuten

pueden utilizarse como campo de modo El valor del campo de modo determina queacute modo de direccionamiento va a utilizarse

En un sistema sin memoria virtual la direccioacuten efectiva seraacute o una direccioacuten de memoria principal o un registro En un sistema con memoria virtual la direccioacuten efectiva es una direccioacuten virtual o un registro La correspondencia real con una direccioacuten fiacutesica dependeraacute del mecanismo de paginacioacuten y no estaacute visible al programador

DIRECCIONAMIENTO INMEDIATO

Es la forma maacutes sencilla de direccionamiento en el que el operando estaacute en realidad presente en la propia instruccioacuten

Operando = A

Este modo puede utilizarse para definir y utilizar constantes o para fijar valores iniciales de variables Normalmente el nuacutemero se almacena en complemento a dos el bit maacutes a la izquierda del campo de operando se utiliza como bit de signo Cuando el operando se carga en un registro de datos el bit de signo se replica hacia la izquierda hasta la longitud total de la palabra de datos

Como se ha definido anteriormente el pareacutentesis se interpreta como laquocontenido deraquo La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dos

La ventaja del direccionamiento inmediato es que una vez captada la instruccioacuten no se requiere una referencia a memoria para obtener el operando ahorraacutendose pues un ciclo de memoria o de cacheacute en el ciclo de instruccioacuten La desventaja es que el tamantildeo del nuacutemero estaacute restringido a la longitud del campo de direcciones que en la mayoriacutea de los repertorios de instrucciones es pequentildeo comparado con la longitud de palabra

DIRECCIONAMIENTO DIRECTO

Una forma muy sencilla de direccionamiento es el direccionamiento directo en el que el campo de direcciones contiene la direccioacuten efectiva del operando

EA = A

Esta teacutecnica fue comuacuten en las primeras generaciones de computadores y se encuentra auacuten en diversos sistemas Solo requiere una referencia a memoria y no necesita ninguacuten caacutelculo especial La limitacioacuten obvia es que proporciona un espacio de direcciones restringido

DIRECCIONAMIENTO INDIRECTO

El problema del direccionamiento directo es que la longitud del campo de direcciones es normalmente menor que la longitud de palabra limitando pues el rango de direcciones Una solucioacuten es hacer que el campo de direcciones referencie la direccioacuten de una palabra de memoria la cual contenga la direccioacuten completa del operando Esto es lo que se denomina direccionamiento indirecto

EA = (A)

La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dosccedil

Una variante de direccionamiento indirecto raramente utilizada es el direccionamiento multinivel o en cascada

EA = ((A))

En este caso uno de los bits de una palabra de direccioacuten es un indicador de laquoindireccioacutenraquo (I) Si el bit I es 0 la palabra contiene el valor de EA Si el bit I es 1 entonces se invoca otro nivel de laquoindireccioacutenraquo No parece que esta aproximacioacuten ofrezca ninguna ventaja particular y su desventaja es que podriacutean requerirse dos o maacutes referencias para captar un operando

DIRECCIONAMIENTO DE REGISTROS

El direccionamiento de registros es similar al directo La uacutenica diferencia es que el campo de direcciones referencia un registro en lugar de una direccioacuten de memoria principal

EA = R

Por ejemplo si el campo de direccioacuten de registro de la instruccioacuten es 5 la direccioacuten deseada es el registro R5 y el valor del operando es el contenido de R5 Normalmente un campo de direcciones que referencia a registros consta de tres a cinco bits de manera que pueden referenciarse un total de 8 a 32 registros de uso general

Las ventajas del direccionamiento de registros son que (1) solo es necesario un campo pequentildeo de direcciones en la instruccioacuten y (2) no se requieren referencias a memoria Como se comentoacute en el Capiacutetulo 4 el tiempo de acceso a un registro interno del procesador es mucho menor que para la memoria principal La desventaja del direccionamiento a registros es que el espacio de direcciones estaacute muy limitado

Si se hace un uso masivo del direccionamiento a registros en un repertorio de instrucciones los registros del procesador se emplearaacuten intensamente Debido al nuacutemero tan limitado de registros (en comparacioacuten con el nuacutemero de posiciones de memoria principal) usarlos de esta manera tiene sentido solo si se emplean eficientemente Si todo operando se carga de memoria principal a un registro se opera con eacutel una vez y se devuelve a memoria principal resulta que se estariacutea antildeadiendo un paso intermedio improcedente Si en lugar de esto el operando del registro se mantiene en uso durante varias operaciones se estariacutea consiguiendo un ahorro real Un ejemplo son los resultados intermedios de un caacutelculo En particular suponga que se va a implementar en software el algoritmo de multiplicacioacuten en complemento a dos La posicioacuten A del diagrama de flujo (Figura 912) se referencia muchas veces y debiera estar implementada en un registro en lugar de en una posicioacuten de memoria principal

Depende del programador decidir queacute valores deben mantenerse en registros y cuaacuteles deben almacenarse en memoria principal La mayoriacutea de los procesadores modernos emplean muacuteltiples registros de uso general cargando al programador en lenguaje ensamblador (cuando desarrolla compiladores por ejemplo) con la responsabilidad de conseguir una ejecucioacuten eficiente

DIRECCIONAMIENTO INDIRECTO CON REGISTRO

Igual que el direccionamiento de registros es anaacutelogo al directo el direccionamiento indirecto con registro es anaacutelogo al direccionamiento indirecto En ambos casos la diferencia estriba en si el campo de direcciones hace referencia a una posicioacuten de memoria o a un registro Asiacute para el direccionamiento indirecto con registro

EA = (R)

Las ventajas y limitaciones del direccionamiento indirecto con registro son baacutesicamente las mismas que se tienen para el direccionamiento indirecto En ambos casos la limitacioacuten de espacio o rango de direcciones del campo de direcciones se supera

haciendo que dicho campo referencie una posicioacuten de una palabra completa (un registro completo en este caso) que contenga la direccioacuten Ademaacutes el direccionamiento indirecto con registro emplea una referencia menos a memoria que el direccionamiento indirecto

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

Los principales usos del direccionamiento con desplazamiento son

bull Desplazamiento relativo

bull Direccionamiento con registro base

bull Indexado

Direccionamiento relativo Para el direccionamiento relativo tambieacuten llamado direccionamiento relativo al PC el registro referenciado impliacutecitamente es el contador de programa (PC) Es decir la direccioacuten de instruccioacuten actual se suma al campo de direcciones para producir el valor EA Normalmente el campo de direcciones se trata como nuacutemero en complemento a dos para esta operacioacuten En consecuencia la direccioacuten efectiva es un desplazamiento relativo a la direccioacuten de la instruccioacuten

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 7: Arquitectura Trabajo

programador para controlar el procesador En consecuencia deben considerarse las necesidades del programador a la hora de disentildear el repertorio de instrucciones

Algunos aspectos baacutesicos relativos al disentildeo de repertorios de instrucciones siguen siendo temas de controversia Los maacutes importantes entre dichos aspectos fundamentales de disentildeo son

bull El repertorio de operaciones cuaacutentas y queacute operaciones considerar y cuaacuten complejas deben ser

bull Los tipos de datos los distintos tipos de datos con los que se efectuacutean operaciones

bull Los formatos de instrucciones longitud de la instruccioacuten (en bits) nuacutemero de direcciones tamantildeo de los distintos campos etc

bull Los registros nuacutemero de registros del procesador que pueden ser referenciados por las instrucciones y su uso

bull El direccionamiento el modo o modos de direccionamiento mediante los cuales puede especificarse la direccioacuten de un operando

Estos aspectos estaacuten fuertemente interrelacionados y deben considerarse conjuntamente en el disentildeo de un repertorio de instrucciones

La arquitectura RISC cuestiona muchas de las decisiones sobre repertorios de instrucciones tradicionalmente adoptadas en computadores comerciales

TIPOS DE OPERANDOS

Las instrucciones maacutequina operan con datos Las categoriacuteas generales maacutes importantes de datos son

bull Direcciones

bull Nuacutemeros

bull Caracteres

bull Datos loacutegicos

Las direcciones son un tipo de datos En muchos casos debe realizarse alguacuten caacutelculo sobre la referencia a un operando de una instruccioacuten a fin de determinar la direccioacuten de memoria principal o virtual En este contexto las direcciones pueden considerarse como nuacutemeros enteros sin signo

Otros tipos de datos comunes son los nuacutemeros los caracteres y los datos loacutegicos y cada uno de ellos se analiza brevemente en esta seccioacuten Aparte de estos en algunas maacutequinas se utilizan tipos o estructuras de datos especiacuteficos Por ejemplo puede haber operaciones maacutequina que trabajan directamente con listas o cadenas de caracteres

NUacuteMEROS

Todos los lenguajes maacutequina incluyen tipos de datos numeacutericos Incluso en el procesamiento de datos no numeacutericos se necesitan nuacutemeros que actuacuteen como contadores longitudes de campos etc Una distincioacuten importante entre los nuacutemeros utilizados en las matemaacuteticas ordinarias y los almacenados en un computador es que estos uacuteltimos estaacuten limitados Esto es cierto en dos sentidos En primer lugar hay un liacutemite para la magnitud de los nuacutemeros representabas en una maacutequina y en segundo lugar en el caso de nuacutemeros en coma flotante su precisioacuten estaacute limitada Por tanto el programador debe ser consciente de las consecuencias del redondeo el desbordamiento o el desbordamiento a cero

En los computadores son usuales tres tipos de datos numeacutericos

bull Enteros o en coma fija

bull En coma flotante

bull En decimal

CARACTERES

Una forma bastante comuacuten de datos es el texto o secuencias de caracteres Aunque la informacioacuten texual sea maacutes conveniente para las personas no puede ser almacenada o transmitida faacutecilmente en forma de caracteres por los sistemas de comunicacioacuten y de procesamiento de datos Tales sistemas estaacuten disentildeados para datos binarios Por lo tanto se han ideado diversos coacutedigos que permiten representar caracteres mediante secuencias de bits Tal vez el primer ejemplo fue el coacutedigo Morse Hoy en diacutea el coacutedigo de caracteres maacutes utilizado es el alfabeto de referencia internacional (IRA International Reference Alphabet) conocido en los Estados Unidos como ASCII (American Standard Code for Information Interchange) coacutedigo estaacutendar americano para intercambio de informacioacuten (veacutease Tabla 71) Cada caraacutecter es representado en este coacutedigo por un patroacuten distinto de 7 bits pueden representarse por tanto 128 caracteres diferentes Este nuacutemero es mayor que el necesario para representar los caracteres impresos utilizaacutendose algunos de los patrones para representar caracteres de control Algunos de estos se emplean para controlar la impresioacuten de caracteres en una paacutegina Otros caracteres de control estaacuten dedicados para procedimientos de comunicacioacuten Los caracteres codificados en ASCII se memorizan y transmiten utilizando casi siempre ocho bits por caraacutecter El octavo bit puede fijarse a cero o utilizarse como bit de paridad para la deteccioacuten de errores En el segundo caso el valor del bit se pone de manera que el nuacutemero total de unos en cada octeto sea o siempre impar (paridad impar) o siempre par (paridad par)

Observe en la Tabla 71 que con el ASCII los patrones de bits 011XXXX representan los diacutegitos 0 a 9 mediante sus valores binarios equivalentes 0000 a 1001 en los cuatro bits de la derecha Esta codificacioacuten coincide con la empleada en decimal empaquetado facilitaacutendose asiacute la conversioacuten entre ASCII de siete bits y decimal empaquetado de cuatro bits

Otro coacutedigo utilizado para caracteres es el coacutedigo de intercambio decimal codificado en binario ampliado (EBCDIC Extended Binary Coded Decimal Interchange Code) Este coacutedigo de ocho bits se emplea en los grandes computadores de IBM Como el ASCII el EBCDIC es compatible con el decimal empaquetado En el caso del EBCDIC los coacutedigos 11110000 a 11111001 representan los diacutegitos 0 a 9

DATOS LOacuteGICOS

Normalmente cada palabra o cualquier otra unidad direccionable (byte media palabra etc) es tratada como una unidad de datos individual Sin embargo a veces es uacutetil considerar una unidad de laquobits como n elementos o datos de un bit donde cada elemento tiene un valor 1 o 0 Cuando los datos son vistos de esta manera se consideran datos loacutegicos

Esta representacioacuten orientada a bits tiene dos ventajas La primera es que a veces puede interesarnos almacenar una matriz de elementos binarios o booleanos en la que cada elemento pueda tomar solo los valores 1 (verdadero) oacute 0 (falso) Con datos loacutegicos la memoria puede ser entonces utilizada

Repertorio de instrucciones modos de direccionamiento y formatos

DIRECCIONAMIENTO

El campo o campos de direcciones en un formato de instruccioacuten usual estaacute bastante limitado Seriacutea deseable poder referenciar un rango elevado de posiciones de memoria principal o en algunos sistemas de memoria virtual Para conseguir este objetivo se han empleado diversas teacutecnicas de direccionamiento Todas ellas implican alguacuten compromiso entre el rango de direcciones yo flexibilidad de direccionamiento de una parte y por otra el nuacutemero de referencias a memoria yo la complejidad de caacutelculo de las direcciones los modos de direccionamiento maacutes comunes son

bull Inmediato

bull Directo

bull Indirecto

bull Registro

bull Indirecto con registro

bull Con desplazamiento Pila

La Tabla 111 indica el caacutelculo de la direccioacuten realizado para cada modo de direccionamiento

Praacutecticamente todas las arquitecturas de computadores ofrecen maacutes de uno de estos modos de direccionamiento La cuestioacuten que surge es coacutemo determina la unidad de control queacute modo de direccionamiento se estaacute empleando en cada instruccioacuten Se adoptan diversos enfoques alternativos A menudo codops diferentes emplearaacuten modos de direccionamiento distintos Tambieacuten uno o maacutes bits del formato de instruccioacuten

pueden utilizarse como campo de modo El valor del campo de modo determina queacute modo de direccionamiento va a utilizarse

En un sistema sin memoria virtual la direccioacuten efectiva seraacute o una direccioacuten de memoria principal o un registro En un sistema con memoria virtual la direccioacuten efectiva es una direccioacuten virtual o un registro La correspondencia real con una direccioacuten fiacutesica dependeraacute del mecanismo de paginacioacuten y no estaacute visible al programador

DIRECCIONAMIENTO INMEDIATO

Es la forma maacutes sencilla de direccionamiento en el que el operando estaacute en realidad presente en la propia instruccioacuten

Operando = A

Este modo puede utilizarse para definir y utilizar constantes o para fijar valores iniciales de variables Normalmente el nuacutemero se almacena en complemento a dos el bit maacutes a la izquierda del campo de operando se utiliza como bit de signo Cuando el operando se carga en un registro de datos el bit de signo se replica hacia la izquierda hasta la longitud total de la palabra de datos

Como se ha definido anteriormente el pareacutentesis se interpreta como laquocontenido deraquo La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dos

La ventaja del direccionamiento inmediato es que una vez captada la instruccioacuten no se requiere una referencia a memoria para obtener el operando ahorraacutendose pues un ciclo de memoria o de cacheacute en el ciclo de instruccioacuten La desventaja es que el tamantildeo del nuacutemero estaacute restringido a la longitud del campo de direcciones que en la mayoriacutea de los repertorios de instrucciones es pequentildeo comparado con la longitud de palabra

DIRECCIONAMIENTO DIRECTO

Una forma muy sencilla de direccionamiento es el direccionamiento directo en el que el campo de direcciones contiene la direccioacuten efectiva del operando

EA = A

Esta teacutecnica fue comuacuten en las primeras generaciones de computadores y se encuentra auacuten en diversos sistemas Solo requiere una referencia a memoria y no necesita ninguacuten caacutelculo especial La limitacioacuten obvia es que proporciona un espacio de direcciones restringido

DIRECCIONAMIENTO INDIRECTO

El problema del direccionamiento directo es que la longitud del campo de direcciones es normalmente menor que la longitud de palabra limitando pues el rango de direcciones Una solucioacuten es hacer que el campo de direcciones referencie la direccioacuten de una palabra de memoria la cual contenga la direccioacuten completa del operando Esto es lo que se denomina direccionamiento indirecto

EA = (A)

La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dosccedil

Una variante de direccionamiento indirecto raramente utilizada es el direccionamiento multinivel o en cascada

EA = ((A))

En este caso uno de los bits de una palabra de direccioacuten es un indicador de laquoindireccioacutenraquo (I) Si el bit I es 0 la palabra contiene el valor de EA Si el bit I es 1 entonces se invoca otro nivel de laquoindireccioacutenraquo No parece que esta aproximacioacuten ofrezca ninguna ventaja particular y su desventaja es que podriacutean requerirse dos o maacutes referencias para captar un operando

DIRECCIONAMIENTO DE REGISTROS

El direccionamiento de registros es similar al directo La uacutenica diferencia es que el campo de direcciones referencia un registro en lugar de una direccioacuten de memoria principal

EA = R

Por ejemplo si el campo de direccioacuten de registro de la instruccioacuten es 5 la direccioacuten deseada es el registro R5 y el valor del operando es el contenido de R5 Normalmente un campo de direcciones que referencia a registros consta de tres a cinco bits de manera que pueden referenciarse un total de 8 a 32 registros de uso general

Las ventajas del direccionamiento de registros son que (1) solo es necesario un campo pequentildeo de direcciones en la instruccioacuten y (2) no se requieren referencias a memoria Como se comentoacute en el Capiacutetulo 4 el tiempo de acceso a un registro interno del procesador es mucho menor que para la memoria principal La desventaja del direccionamiento a registros es que el espacio de direcciones estaacute muy limitado

Si se hace un uso masivo del direccionamiento a registros en un repertorio de instrucciones los registros del procesador se emplearaacuten intensamente Debido al nuacutemero tan limitado de registros (en comparacioacuten con el nuacutemero de posiciones de memoria principal) usarlos de esta manera tiene sentido solo si se emplean eficientemente Si todo operando se carga de memoria principal a un registro se opera con eacutel una vez y se devuelve a memoria principal resulta que se estariacutea antildeadiendo un paso intermedio improcedente Si en lugar de esto el operando del registro se mantiene en uso durante varias operaciones se estariacutea consiguiendo un ahorro real Un ejemplo son los resultados intermedios de un caacutelculo En particular suponga que se va a implementar en software el algoritmo de multiplicacioacuten en complemento a dos La posicioacuten A del diagrama de flujo (Figura 912) se referencia muchas veces y debiera estar implementada en un registro en lugar de en una posicioacuten de memoria principal

Depende del programador decidir queacute valores deben mantenerse en registros y cuaacuteles deben almacenarse en memoria principal La mayoriacutea de los procesadores modernos emplean muacuteltiples registros de uso general cargando al programador en lenguaje ensamblador (cuando desarrolla compiladores por ejemplo) con la responsabilidad de conseguir una ejecucioacuten eficiente

DIRECCIONAMIENTO INDIRECTO CON REGISTRO

Igual que el direccionamiento de registros es anaacutelogo al directo el direccionamiento indirecto con registro es anaacutelogo al direccionamiento indirecto En ambos casos la diferencia estriba en si el campo de direcciones hace referencia a una posicioacuten de memoria o a un registro Asiacute para el direccionamiento indirecto con registro

EA = (R)

Las ventajas y limitaciones del direccionamiento indirecto con registro son baacutesicamente las mismas que se tienen para el direccionamiento indirecto En ambos casos la limitacioacuten de espacio o rango de direcciones del campo de direcciones se supera

haciendo que dicho campo referencie una posicioacuten de una palabra completa (un registro completo en este caso) que contenga la direccioacuten Ademaacutes el direccionamiento indirecto con registro emplea una referencia menos a memoria que el direccionamiento indirecto

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

Los principales usos del direccionamiento con desplazamiento son

bull Desplazamiento relativo

bull Direccionamiento con registro base

bull Indexado

Direccionamiento relativo Para el direccionamiento relativo tambieacuten llamado direccionamiento relativo al PC el registro referenciado impliacutecitamente es el contador de programa (PC) Es decir la direccioacuten de instruccioacuten actual se suma al campo de direcciones para producir el valor EA Normalmente el campo de direcciones se trata como nuacutemero en complemento a dos para esta operacioacuten En consecuencia la direccioacuten efectiva es un desplazamiento relativo a la direccioacuten de la instruccioacuten

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 8: Arquitectura Trabajo

NUacuteMEROS

Todos los lenguajes maacutequina incluyen tipos de datos numeacutericos Incluso en el procesamiento de datos no numeacutericos se necesitan nuacutemeros que actuacuteen como contadores longitudes de campos etc Una distincioacuten importante entre los nuacutemeros utilizados en las matemaacuteticas ordinarias y los almacenados en un computador es que estos uacuteltimos estaacuten limitados Esto es cierto en dos sentidos En primer lugar hay un liacutemite para la magnitud de los nuacutemeros representabas en una maacutequina y en segundo lugar en el caso de nuacutemeros en coma flotante su precisioacuten estaacute limitada Por tanto el programador debe ser consciente de las consecuencias del redondeo el desbordamiento o el desbordamiento a cero

En los computadores son usuales tres tipos de datos numeacutericos

bull Enteros o en coma fija

bull En coma flotante

bull En decimal

CARACTERES

Una forma bastante comuacuten de datos es el texto o secuencias de caracteres Aunque la informacioacuten texual sea maacutes conveniente para las personas no puede ser almacenada o transmitida faacutecilmente en forma de caracteres por los sistemas de comunicacioacuten y de procesamiento de datos Tales sistemas estaacuten disentildeados para datos binarios Por lo tanto se han ideado diversos coacutedigos que permiten representar caracteres mediante secuencias de bits Tal vez el primer ejemplo fue el coacutedigo Morse Hoy en diacutea el coacutedigo de caracteres maacutes utilizado es el alfabeto de referencia internacional (IRA International Reference Alphabet) conocido en los Estados Unidos como ASCII (American Standard Code for Information Interchange) coacutedigo estaacutendar americano para intercambio de informacioacuten (veacutease Tabla 71) Cada caraacutecter es representado en este coacutedigo por un patroacuten distinto de 7 bits pueden representarse por tanto 128 caracteres diferentes Este nuacutemero es mayor que el necesario para representar los caracteres impresos utilizaacutendose algunos de los patrones para representar caracteres de control Algunos de estos se emplean para controlar la impresioacuten de caracteres en una paacutegina Otros caracteres de control estaacuten dedicados para procedimientos de comunicacioacuten Los caracteres codificados en ASCII se memorizan y transmiten utilizando casi siempre ocho bits por caraacutecter El octavo bit puede fijarse a cero o utilizarse como bit de paridad para la deteccioacuten de errores En el segundo caso el valor del bit se pone de manera que el nuacutemero total de unos en cada octeto sea o siempre impar (paridad impar) o siempre par (paridad par)

Observe en la Tabla 71 que con el ASCII los patrones de bits 011XXXX representan los diacutegitos 0 a 9 mediante sus valores binarios equivalentes 0000 a 1001 en los cuatro bits de la derecha Esta codificacioacuten coincide con la empleada en decimal empaquetado facilitaacutendose asiacute la conversioacuten entre ASCII de siete bits y decimal empaquetado de cuatro bits

Otro coacutedigo utilizado para caracteres es el coacutedigo de intercambio decimal codificado en binario ampliado (EBCDIC Extended Binary Coded Decimal Interchange Code) Este coacutedigo de ocho bits se emplea en los grandes computadores de IBM Como el ASCII el EBCDIC es compatible con el decimal empaquetado En el caso del EBCDIC los coacutedigos 11110000 a 11111001 representan los diacutegitos 0 a 9

DATOS LOacuteGICOS

Normalmente cada palabra o cualquier otra unidad direccionable (byte media palabra etc) es tratada como una unidad de datos individual Sin embargo a veces es uacutetil considerar una unidad de laquobits como n elementos o datos de un bit donde cada elemento tiene un valor 1 o 0 Cuando los datos son vistos de esta manera se consideran datos loacutegicos

Esta representacioacuten orientada a bits tiene dos ventajas La primera es que a veces puede interesarnos almacenar una matriz de elementos binarios o booleanos en la que cada elemento pueda tomar solo los valores 1 (verdadero) oacute 0 (falso) Con datos loacutegicos la memoria puede ser entonces utilizada

Repertorio de instrucciones modos de direccionamiento y formatos

DIRECCIONAMIENTO

El campo o campos de direcciones en un formato de instruccioacuten usual estaacute bastante limitado Seriacutea deseable poder referenciar un rango elevado de posiciones de memoria principal o en algunos sistemas de memoria virtual Para conseguir este objetivo se han empleado diversas teacutecnicas de direccionamiento Todas ellas implican alguacuten compromiso entre el rango de direcciones yo flexibilidad de direccionamiento de una parte y por otra el nuacutemero de referencias a memoria yo la complejidad de caacutelculo de las direcciones los modos de direccionamiento maacutes comunes son

bull Inmediato

bull Directo

bull Indirecto

bull Registro

bull Indirecto con registro

bull Con desplazamiento Pila

La Tabla 111 indica el caacutelculo de la direccioacuten realizado para cada modo de direccionamiento

Praacutecticamente todas las arquitecturas de computadores ofrecen maacutes de uno de estos modos de direccionamiento La cuestioacuten que surge es coacutemo determina la unidad de control queacute modo de direccionamiento se estaacute empleando en cada instruccioacuten Se adoptan diversos enfoques alternativos A menudo codops diferentes emplearaacuten modos de direccionamiento distintos Tambieacuten uno o maacutes bits del formato de instruccioacuten

pueden utilizarse como campo de modo El valor del campo de modo determina queacute modo de direccionamiento va a utilizarse

En un sistema sin memoria virtual la direccioacuten efectiva seraacute o una direccioacuten de memoria principal o un registro En un sistema con memoria virtual la direccioacuten efectiva es una direccioacuten virtual o un registro La correspondencia real con una direccioacuten fiacutesica dependeraacute del mecanismo de paginacioacuten y no estaacute visible al programador

DIRECCIONAMIENTO INMEDIATO

Es la forma maacutes sencilla de direccionamiento en el que el operando estaacute en realidad presente en la propia instruccioacuten

Operando = A

Este modo puede utilizarse para definir y utilizar constantes o para fijar valores iniciales de variables Normalmente el nuacutemero se almacena en complemento a dos el bit maacutes a la izquierda del campo de operando se utiliza como bit de signo Cuando el operando se carga en un registro de datos el bit de signo se replica hacia la izquierda hasta la longitud total de la palabra de datos

Como se ha definido anteriormente el pareacutentesis se interpreta como laquocontenido deraquo La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dos

La ventaja del direccionamiento inmediato es que una vez captada la instruccioacuten no se requiere una referencia a memoria para obtener el operando ahorraacutendose pues un ciclo de memoria o de cacheacute en el ciclo de instruccioacuten La desventaja es que el tamantildeo del nuacutemero estaacute restringido a la longitud del campo de direcciones que en la mayoriacutea de los repertorios de instrucciones es pequentildeo comparado con la longitud de palabra

DIRECCIONAMIENTO DIRECTO

Una forma muy sencilla de direccionamiento es el direccionamiento directo en el que el campo de direcciones contiene la direccioacuten efectiva del operando

EA = A

Esta teacutecnica fue comuacuten en las primeras generaciones de computadores y se encuentra auacuten en diversos sistemas Solo requiere una referencia a memoria y no necesita ninguacuten caacutelculo especial La limitacioacuten obvia es que proporciona un espacio de direcciones restringido

DIRECCIONAMIENTO INDIRECTO

El problema del direccionamiento directo es que la longitud del campo de direcciones es normalmente menor que la longitud de palabra limitando pues el rango de direcciones Una solucioacuten es hacer que el campo de direcciones referencie la direccioacuten de una palabra de memoria la cual contenga la direccioacuten completa del operando Esto es lo que se denomina direccionamiento indirecto

EA = (A)

La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dosccedil

Una variante de direccionamiento indirecto raramente utilizada es el direccionamiento multinivel o en cascada

EA = ((A))

En este caso uno de los bits de una palabra de direccioacuten es un indicador de laquoindireccioacutenraquo (I) Si el bit I es 0 la palabra contiene el valor de EA Si el bit I es 1 entonces se invoca otro nivel de laquoindireccioacutenraquo No parece que esta aproximacioacuten ofrezca ninguna ventaja particular y su desventaja es que podriacutean requerirse dos o maacutes referencias para captar un operando

DIRECCIONAMIENTO DE REGISTROS

El direccionamiento de registros es similar al directo La uacutenica diferencia es que el campo de direcciones referencia un registro en lugar de una direccioacuten de memoria principal

EA = R

Por ejemplo si el campo de direccioacuten de registro de la instruccioacuten es 5 la direccioacuten deseada es el registro R5 y el valor del operando es el contenido de R5 Normalmente un campo de direcciones que referencia a registros consta de tres a cinco bits de manera que pueden referenciarse un total de 8 a 32 registros de uso general

Las ventajas del direccionamiento de registros son que (1) solo es necesario un campo pequentildeo de direcciones en la instruccioacuten y (2) no se requieren referencias a memoria Como se comentoacute en el Capiacutetulo 4 el tiempo de acceso a un registro interno del procesador es mucho menor que para la memoria principal La desventaja del direccionamiento a registros es que el espacio de direcciones estaacute muy limitado

Si se hace un uso masivo del direccionamiento a registros en un repertorio de instrucciones los registros del procesador se emplearaacuten intensamente Debido al nuacutemero tan limitado de registros (en comparacioacuten con el nuacutemero de posiciones de memoria principal) usarlos de esta manera tiene sentido solo si se emplean eficientemente Si todo operando se carga de memoria principal a un registro se opera con eacutel una vez y se devuelve a memoria principal resulta que se estariacutea antildeadiendo un paso intermedio improcedente Si en lugar de esto el operando del registro se mantiene en uso durante varias operaciones se estariacutea consiguiendo un ahorro real Un ejemplo son los resultados intermedios de un caacutelculo En particular suponga que se va a implementar en software el algoritmo de multiplicacioacuten en complemento a dos La posicioacuten A del diagrama de flujo (Figura 912) se referencia muchas veces y debiera estar implementada en un registro en lugar de en una posicioacuten de memoria principal

Depende del programador decidir queacute valores deben mantenerse en registros y cuaacuteles deben almacenarse en memoria principal La mayoriacutea de los procesadores modernos emplean muacuteltiples registros de uso general cargando al programador en lenguaje ensamblador (cuando desarrolla compiladores por ejemplo) con la responsabilidad de conseguir una ejecucioacuten eficiente

DIRECCIONAMIENTO INDIRECTO CON REGISTRO

Igual que el direccionamiento de registros es anaacutelogo al directo el direccionamiento indirecto con registro es anaacutelogo al direccionamiento indirecto En ambos casos la diferencia estriba en si el campo de direcciones hace referencia a una posicioacuten de memoria o a un registro Asiacute para el direccionamiento indirecto con registro

EA = (R)

Las ventajas y limitaciones del direccionamiento indirecto con registro son baacutesicamente las mismas que se tienen para el direccionamiento indirecto En ambos casos la limitacioacuten de espacio o rango de direcciones del campo de direcciones se supera

haciendo que dicho campo referencie una posicioacuten de una palabra completa (un registro completo en este caso) que contenga la direccioacuten Ademaacutes el direccionamiento indirecto con registro emplea una referencia menos a memoria que el direccionamiento indirecto

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

Los principales usos del direccionamiento con desplazamiento son

bull Desplazamiento relativo

bull Direccionamiento con registro base

bull Indexado

Direccionamiento relativo Para el direccionamiento relativo tambieacuten llamado direccionamiento relativo al PC el registro referenciado impliacutecitamente es el contador de programa (PC) Es decir la direccioacuten de instruccioacuten actual se suma al campo de direcciones para producir el valor EA Normalmente el campo de direcciones se trata como nuacutemero en complemento a dos para esta operacioacuten En consecuencia la direccioacuten efectiva es un desplazamiento relativo a la direccioacuten de la instruccioacuten

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 9: Arquitectura Trabajo

Otro coacutedigo utilizado para caracteres es el coacutedigo de intercambio decimal codificado en binario ampliado (EBCDIC Extended Binary Coded Decimal Interchange Code) Este coacutedigo de ocho bits se emplea en los grandes computadores de IBM Como el ASCII el EBCDIC es compatible con el decimal empaquetado En el caso del EBCDIC los coacutedigos 11110000 a 11111001 representan los diacutegitos 0 a 9

DATOS LOacuteGICOS

Normalmente cada palabra o cualquier otra unidad direccionable (byte media palabra etc) es tratada como una unidad de datos individual Sin embargo a veces es uacutetil considerar una unidad de laquobits como n elementos o datos de un bit donde cada elemento tiene un valor 1 o 0 Cuando los datos son vistos de esta manera se consideran datos loacutegicos

Esta representacioacuten orientada a bits tiene dos ventajas La primera es que a veces puede interesarnos almacenar una matriz de elementos binarios o booleanos en la que cada elemento pueda tomar solo los valores 1 (verdadero) oacute 0 (falso) Con datos loacutegicos la memoria puede ser entonces utilizada

Repertorio de instrucciones modos de direccionamiento y formatos

DIRECCIONAMIENTO

El campo o campos de direcciones en un formato de instruccioacuten usual estaacute bastante limitado Seriacutea deseable poder referenciar un rango elevado de posiciones de memoria principal o en algunos sistemas de memoria virtual Para conseguir este objetivo se han empleado diversas teacutecnicas de direccionamiento Todas ellas implican alguacuten compromiso entre el rango de direcciones yo flexibilidad de direccionamiento de una parte y por otra el nuacutemero de referencias a memoria yo la complejidad de caacutelculo de las direcciones los modos de direccionamiento maacutes comunes son

bull Inmediato

bull Directo

bull Indirecto

bull Registro

bull Indirecto con registro

bull Con desplazamiento Pila

La Tabla 111 indica el caacutelculo de la direccioacuten realizado para cada modo de direccionamiento

Praacutecticamente todas las arquitecturas de computadores ofrecen maacutes de uno de estos modos de direccionamiento La cuestioacuten que surge es coacutemo determina la unidad de control queacute modo de direccionamiento se estaacute empleando en cada instruccioacuten Se adoptan diversos enfoques alternativos A menudo codops diferentes emplearaacuten modos de direccionamiento distintos Tambieacuten uno o maacutes bits del formato de instruccioacuten

pueden utilizarse como campo de modo El valor del campo de modo determina queacute modo de direccionamiento va a utilizarse

En un sistema sin memoria virtual la direccioacuten efectiva seraacute o una direccioacuten de memoria principal o un registro En un sistema con memoria virtual la direccioacuten efectiva es una direccioacuten virtual o un registro La correspondencia real con una direccioacuten fiacutesica dependeraacute del mecanismo de paginacioacuten y no estaacute visible al programador

DIRECCIONAMIENTO INMEDIATO

Es la forma maacutes sencilla de direccionamiento en el que el operando estaacute en realidad presente en la propia instruccioacuten

Operando = A

Este modo puede utilizarse para definir y utilizar constantes o para fijar valores iniciales de variables Normalmente el nuacutemero se almacena en complemento a dos el bit maacutes a la izquierda del campo de operando se utiliza como bit de signo Cuando el operando se carga en un registro de datos el bit de signo se replica hacia la izquierda hasta la longitud total de la palabra de datos

Como se ha definido anteriormente el pareacutentesis se interpreta como laquocontenido deraquo La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dos

La ventaja del direccionamiento inmediato es que una vez captada la instruccioacuten no se requiere una referencia a memoria para obtener el operando ahorraacutendose pues un ciclo de memoria o de cacheacute en el ciclo de instruccioacuten La desventaja es que el tamantildeo del nuacutemero estaacute restringido a la longitud del campo de direcciones que en la mayoriacutea de los repertorios de instrucciones es pequentildeo comparado con la longitud de palabra

DIRECCIONAMIENTO DIRECTO

Una forma muy sencilla de direccionamiento es el direccionamiento directo en el que el campo de direcciones contiene la direccioacuten efectiva del operando

EA = A

Esta teacutecnica fue comuacuten en las primeras generaciones de computadores y se encuentra auacuten en diversos sistemas Solo requiere una referencia a memoria y no necesita ninguacuten caacutelculo especial La limitacioacuten obvia es que proporciona un espacio de direcciones restringido

DIRECCIONAMIENTO INDIRECTO

El problema del direccionamiento directo es que la longitud del campo de direcciones es normalmente menor que la longitud de palabra limitando pues el rango de direcciones Una solucioacuten es hacer que el campo de direcciones referencie la direccioacuten de una palabra de memoria la cual contenga la direccioacuten completa del operando Esto es lo que se denomina direccionamiento indirecto

EA = (A)

La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dosccedil

Una variante de direccionamiento indirecto raramente utilizada es el direccionamiento multinivel o en cascada

EA = ((A))

En este caso uno de los bits de una palabra de direccioacuten es un indicador de laquoindireccioacutenraquo (I) Si el bit I es 0 la palabra contiene el valor de EA Si el bit I es 1 entonces se invoca otro nivel de laquoindireccioacutenraquo No parece que esta aproximacioacuten ofrezca ninguna ventaja particular y su desventaja es que podriacutean requerirse dos o maacutes referencias para captar un operando

DIRECCIONAMIENTO DE REGISTROS

El direccionamiento de registros es similar al directo La uacutenica diferencia es que el campo de direcciones referencia un registro en lugar de una direccioacuten de memoria principal

EA = R

Por ejemplo si el campo de direccioacuten de registro de la instruccioacuten es 5 la direccioacuten deseada es el registro R5 y el valor del operando es el contenido de R5 Normalmente un campo de direcciones que referencia a registros consta de tres a cinco bits de manera que pueden referenciarse un total de 8 a 32 registros de uso general

Las ventajas del direccionamiento de registros son que (1) solo es necesario un campo pequentildeo de direcciones en la instruccioacuten y (2) no se requieren referencias a memoria Como se comentoacute en el Capiacutetulo 4 el tiempo de acceso a un registro interno del procesador es mucho menor que para la memoria principal La desventaja del direccionamiento a registros es que el espacio de direcciones estaacute muy limitado

Si se hace un uso masivo del direccionamiento a registros en un repertorio de instrucciones los registros del procesador se emplearaacuten intensamente Debido al nuacutemero tan limitado de registros (en comparacioacuten con el nuacutemero de posiciones de memoria principal) usarlos de esta manera tiene sentido solo si se emplean eficientemente Si todo operando se carga de memoria principal a un registro se opera con eacutel una vez y se devuelve a memoria principal resulta que se estariacutea antildeadiendo un paso intermedio improcedente Si en lugar de esto el operando del registro se mantiene en uso durante varias operaciones se estariacutea consiguiendo un ahorro real Un ejemplo son los resultados intermedios de un caacutelculo En particular suponga que se va a implementar en software el algoritmo de multiplicacioacuten en complemento a dos La posicioacuten A del diagrama de flujo (Figura 912) se referencia muchas veces y debiera estar implementada en un registro en lugar de en una posicioacuten de memoria principal

Depende del programador decidir queacute valores deben mantenerse en registros y cuaacuteles deben almacenarse en memoria principal La mayoriacutea de los procesadores modernos emplean muacuteltiples registros de uso general cargando al programador en lenguaje ensamblador (cuando desarrolla compiladores por ejemplo) con la responsabilidad de conseguir una ejecucioacuten eficiente

DIRECCIONAMIENTO INDIRECTO CON REGISTRO

Igual que el direccionamiento de registros es anaacutelogo al directo el direccionamiento indirecto con registro es anaacutelogo al direccionamiento indirecto En ambos casos la diferencia estriba en si el campo de direcciones hace referencia a una posicioacuten de memoria o a un registro Asiacute para el direccionamiento indirecto con registro

EA = (R)

Las ventajas y limitaciones del direccionamiento indirecto con registro son baacutesicamente las mismas que se tienen para el direccionamiento indirecto En ambos casos la limitacioacuten de espacio o rango de direcciones del campo de direcciones se supera

haciendo que dicho campo referencie una posicioacuten de una palabra completa (un registro completo en este caso) que contenga la direccioacuten Ademaacutes el direccionamiento indirecto con registro emplea una referencia menos a memoria que el direccionamiento indirecto

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

Los principales usos del direccionamiento con desplazamiento son

bull Desplazamiento relativo

bull Direccionamiento con registro base

bull Indexado

Direccionamiento relativo Para el direccionamiento relativo tambieacuten llamado direccionamiento relativo al PC el registro referenciado impliacutecitamente es el contador de programa (PC) Es decir la direccioacuten de instruccioacuten actual se suma al campo de direcciones para producir el valor EA Normalmente el campo de direcciones se trata como nuacutemero en complemento a dos para esta operacioacuten En consecuencia la direccioacuten efectiva es un desplazamiento relativo a la direccioacuten de la instruccioacuten

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 10: Arquitectura Trabajo

La Tabla 111 indica el caacutelculo de la direccioacuten realizado para cada modo de direccionamiento

Praacutecticamente todas las arquitecturas de computadores ofrecen maacutes de uno de estos modos de direccionamiento La cuestioacuten que surge es coacutemo determina la unidad de control queacute modo de direccionamiento se estaacute empleando en cada instruccioacuten Se adoptan diversos enfoques alternativos A menudo codops diferentes emplearaacuten modos de direccionamiento distintos Tambieacuten uno o maacutes bits del formato de instruccioacuten

pueden utilizarse como campo de modo El valor del campo de modo determina queacute modo de direccionamiento va a utilizarse

En un sistema sin memoria virtual la direccioacuten efectiva seraacute o una direccioacuten de memoria principal o un registro En un sistema con memoria virtual la direccioacuten efectiva es una direccioacuten virtual o un registro La correspondencia real con una direccioacuten fiacutesica dependeraacute del mecanismo de paginacioacuten y no estaacute visible al programador

DIRECCIONAMIENTO INMEDIATO

Es la forma maacutes sencilla de direccionamiento en el que el operando estaacute en realidad presente en la propia instruccioacuten

Operando = A

Este modo puede utilizarse para definir y utilizar constantes o para fijar valores iniciales de variables Normalmente el nuacutemero se almacena en complemento a dos el bit maacutes a la izquierda del campo de operando se utiliza como bit de signo Cuando el operando se carga en un registro de datos el bit de signo se replica hacia la izquierda hasta la longitud total de la palabra de datos

Como se ha definido anteriormente el pareacutentesis se interpreta como laquocontenido deraquo La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dos

La ventaja del direccionamiento inmediato es que una vez captada la instruccioacuten no se requiere una referencia a memoria para obtener el operando ahorraacutendose pues un ciclo de memoria o de cacheacute en el ciclo de instruccioacuten La desventaja es que el tamantildeo del nuacutemero estaacute restringido a la longitud del campo de direcciones que en la mayoriacutea de los repertorios de instrucciones es pequentildeo comparado con la longitud de palabra

DIRECCIONAMIENTO DIRECTO

Una forma muy sencilla de direccionamiento es el direccionamiento directo en el que el campo de direcciones contiene la direccioacuten efectiva del operando

EA = A

Esta teacutecnica fue comuacuten en las primeras generaciones de computadores y se encuentra auacuten en diversos sistemas Solo requiere una referencia a memoria y no necesita ninguacuten caacutelculo especial La limitacioacuten obvia es que proporciona un espacio de direcciones restringido

DIRECCIONAMIENTO INDIRECTO

El problema del direccionamiento directo es que la longitud del campo de direcciones es normalmente menor que la longitud de palabra limitando pues el rango de direcciones Una solucioacuten es hacer que el campo de direcciones referencie la direccioacuten de una palabra de memoria la cual contenga la direccioacuten completa del operando Esto es lo que se denomina direccionamiento indirecto

EA = (A)

La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dosccedil

Una variante de direccionamiento indirecto raramente utilizada es el direccionamiento multinivel o en cascada

EA = ((A))

En este caso uno de los bits de una palabra de direccioacuten es un indicador de laquoindireccioacutenraquo (I) Si el bit I es 0 la palabra contiene el valor de EA Si el bit I es 1 entonces se invoca otro nivel de laquoindireccioacutenraquo No parece que esta aproximacioacuten ofrezca ninguna ventaja particular y su desventaja es que podriacutean requerirse dos o maacutes referencias para captar un operando

DIRECCIONAMIENTO DE REGISTROS

El direccionamiento de registros es similar al directo La uacutenica diferencia es que el campo de direcciones referencia un registro en lugar de una direccioacuten de memoria principal

EA = R

Por ejemplo si el campo de direccioacuten de registro de la instruccioacuten es 5 la direccioacuten deseada es el registro R5 y el valor del operando es el contenido de R5 Normalmente un campo de direcciones que referencia a registros consta de tres a cinco bits de manera que pueden referenciarse un total de 8 a 32 registros de uso general

Las ventajas del direccionamiento de registros son que (1) solo es necesario un campo pequentildeo de direcciones en la instruccioacuten y (2) no se requieren referencias a memoria Como se comentoacute en el Capiacutetulo 4 el tiempo de acceso a un registro interno del procesador es mucho menor que para la memoria principal La desventaja del direccionamiento a registros es que el espacio de direcciones estaacute muy limitado

Si se hace un uso masivo del direccionamiento a registros en un repertorio de instrucciones los registros del procesador se emplearaacuten intensamente Debido al nuacutemero tan limitado de registros (en comparacioacuten con el nuacutemero de posiciones de memoria principal) usarlos de esta manera tiene sentido solo si se emplean eficientemente Si todo operando se carga de memoria principal a un registro se opera con eacutel una vez y se devuelve a memoria principal resulta que se estariacutea antildeadiendo un paso intermedio improcedente Si en lugar de esto el operando del registro se mantiene en uso durante varias operaciones se estariacutea consiguiendo un ahorro real Un ejemplo son los resultados intermedios de un caacutelculo En particular suponga que se va a implementar en software el algoritmo de multiplicacioacuten en complemento a dos La posicioacuten A del diagrama de flujo (Figura 912) se referencia muchas veces y debiera estar implementada en un registro en lugar de en una posicioacuten de memoria principal

Depende del programador decidir queacute valores deben mantenerse en registros y cuaacuteles deben almacenarse en memoria principal La mayoriacutea de los procesadores modernos emplean muacuteltiples registros de uso general cargando al programador en lenguaje ensamblador (cuando desarrolla compiladores por ejemplo) con la responsabilidad de conseguir una ejecucioacuten eficiente

DIRECCIONAMIENTO INDIRECTO CON REGISTRO

Igual que el direccionamiento de registros es anaacutelogo al directo el direccionamiento indirecto con registro es anaacutelogo al direccionamiento indirecto En ambos casos la diferencia estriba en si el campo de direcciones hace referencia a una posicioacuten de memoria o a un registro Asiacute para el direccionamiento indirecto con registro

EA = (R)

Las ventajas y limitaciones del direccionamiento indirecto con registro son baacutesicamente las mismas que se tienen para el direccionamiento indirecto En ambos casos la limitacioacuten de espacio o rango de direcciones del campo de direcciones se supera

haciendo que dicho campo referencie una posicioacuten de una palabra completa (un registro completo en este caso) que contenga la direccioacuten Ademaacutes el direccionamiento indirecto con registro emplea una referencia menos a memoria que el direccionamiento indirecto

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

Los principales usos del direccionamiento con desplazamiento son

bull Desplazamiento relativo

bull Direccionamiento con registro base

bull Indexado

Direccionamiento relativo Para el direccionamiento relativo tambieacuten llamado direccionamiento relativo al PC el registro referenciado impliacutecitamente es el contador de programa (PC) Es decir la direccioacuten de instruccioacuten actual se suma al campo de direcciones para producir el valor EA Normalmente el campo de direcciones se trata como nuacutemero en complemento a dos para esta operacioacuten En consecuencia la direccioacuten efectiva es un desplazamiento relativo a la direccioacuten de la instruccioacuten

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 11: Arquitectura Trabajo

pueden utilizarse como campo de modo El valor del campo de modo determina queacute modo de direccionamiento va a utilizarse

En un sistema sin memoria virtual la direccioacuten efectiva seraacute o una direccioacuten de memoria principal o un registro En un sistema con memoria virtual la direccioacuten efectiva es una direccioacuten virtual o un registro La correspondencia real con una direccioacuten fiacutesica dependeraacute del mecanismo de paginacioacuten y no estaacute visible al programador

DIRECCIONAMIENTO INMEDIATO

Es la forma maacutes sencilla de direccionamiento en el que el operando estaacute en realidad presente en la propia instruccioacuten

Operando = A

Este modo puede utilizarse para definir y utilizar constantes o para fijar valores iniciales de variables Normalmente el nuacutemero se almacena en complemento a dos el bit maacutes a la izquierda del campo de operando se utiliza como bit de signo Cuando el operando se carga en un registro de datos el bit de signo se replica hacia la izquierda hasta la longitud total de la palabra de datos

Como se ha definido anteriormente el pareacutentesis se interpreta como laquocontenido deraquo La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dos

La ventaja del direccionamiento inmediato es que una vez captada la instruccioacuten no se requiere una referencia a memoria para obtener el operando ahorraacutendose pues un ciclo de memoria o de cacheacute en el ciclo de instruccioacuten La desventaja es que el tamantildeo del nuacutemero estaacute restringido a la longitud del campo de direcciones que en la mayoriacutea de los repertorios de instrucciones es pequentildeo comparado con la longitud de palabra

DIRECCIONAMIENTO DIRECTO

Una forma muy sencilla de direccionamiento es el direccionamiento directo en el que el campo de direcciones contiene la direccioacuten efectiva del operando

EA = A

Esta teacutecnica fue comuacuten en las primeras generaciones de computadores y se encuentra auacuten en diversos sistemas Solo requiere una referencia a memoria y no necesita ninguacuten caacutelculo especial La limitacioacuten obvia es que proporciona un espacio de direcciones restringido

DIRECCIONAMIENTO INDIRECTO

El problema del direccionamiento directo es que la longitud del campo de direcciones es normalmente menor que la longitud de palabra limitando pues el rango de direcciones Una solucioacuten es hacer que el campo de direcciones referencie la direccioacuten de una palabra de memoria la cual contenga la direccioacuten completa del operando Esto es lo que se denomina direccionamiento indirecto

EA = (A)

La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dosccedil

Una variante de direccionamiento indirecto raramente utilizada es el direccionamiento multinivel o en cascada

EA = ((A))

En este caso uno de los bits de una palabra de direccioacuten es un indicador de laquoindireccioacutenraquo (I) Si el bit I es 0 la palabra contiene el valor de EA Si el bit I es 1 entonces se invoca otro nivel de laquoindireccioacutenraquo No parece que esta aproximacioacuten ofrezca ninguna ventaja particular y su desventaja es que podriacutean requerirse dos o maacutes referencias para captar un operando

DIRECCIONAMIENTO DE REGISTROS

El direccionamiento de registros es similar al directo La uacutenica diferencia es que el campo de direcciones referencia un registro en lugar de una direccioacuten de memoria principal

EA = R

Por ejemplo si el campo de direccioacuten de registro de la instruccioacuten es 5 la direccioacuten deseada es el registro R5 y el valor del operando es el contenido de R5 Normalmente un campo de direcciones que referencia a registros consta de tres a cinco bits de manera que pueden referenciarse un total de 8 a 32 registros de uso general

Las ventajas del direccionamiento de registros son que (1) solo es necesario un campo pequentildeo de direcciones en la instruccioacuten y (2) no se requieren referencias a memoria Como se comentoacute en el Capiacutetulo 4 el tiempo de acceso a un registro interno del procesador es mucho menor que para la memoria principal La desventaja del direccionamiento a registros es que el espacio de direcciones estaacute muy limitado

Si se hace un uso masivo del direccionamiento a registros en un repertorio de instrucciones los registros del procesador se emplearaacuten intensamente Debido al nuacutemero tan limitado de registros (en comparacioacuten con el nuacutemero de posiciones de memoria principal) usarlos de esta manera tiene sentido solo si se emplean eficientemente Si todo operando se carga de memoria principal a un registro se opera con eacutel una vez y se devuelve a memoria principal resulta que se estariacutea antildeadiendo un paso intermedio improcedente Si en lugar de esto el operando del registro se mantiene en uso durante varias operaciones se estariacutea consiguiendo un ahorro real Un ejemplo son los resultados intermedios de un caacutelculo En particular suponga que se va a implementar en software el algoritmo de multiplicacioacuten en complemento a dos La posicioacuten A del diagrama de flujo (Figura 912) se referencia muchas veces y debiera estar implementada en un registro en lugar de en una posicioacuten de memoria principal

Depende del programador decidir queacute valores deben mantenerse en registros y cuaacuteles deben almacenarse en memoria principal La mayoriacutea de los procesadores modernos emplean muacuteltiples registros de uso general cargando al programador en lenguaje ensamblador (cuando desarrolla compiladores por ejemplo) con la responsabilidad de conseguir una ejecucioacuten eficiente

DIRECCIONAMIENTO INDIRECTO CON REGISTRO

Igual que el direccionamiento de registros es anaacutelogo al directo el direccionamiento indirecto con registro es anaacutelogo al direccionamiento indirecto En ambos casos la diferencia estriba en si el campo de direcciones hace referencia a una posicioacuten de memoria o a un registro Asiacute para el direccionamiento indirecto con registro

EA = (R)

Las ventajas y limitaciones del direccionamiento indirecto con registro son baacutesicamente las mismas que se tienen para el direccionamiento indirecto En ambos casos la limitacioacuten de espacio o rango de direcciones del campo de direcciones se supera

haciendo que dicho campo referencie una posicioacuten de una palabra completa (un registro completo en este caso) que contenga la direccioacuten Ademaacutes el direccionamiento indirecto con registro emplea una referencia menos a memoria que el direccionamiento indirecto

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

Los principales usos del direccionamiento con desplazamiento son

bull Desplazamiento relativo

bull Direccionamiento con registro base

bull Indexado

Direccionamiento relativo Para el direccionamiento relativo tambieacuten llamado direccionamiento relativo al PC el registro referenciado impliacutecitamente es el contador de programa (PC) Es decir la direccioacuten de instruccioacuten actual se suma al campo de direcciones para producir el valor EA Normalmente el campo de direcciones se trata como nuacutemero en complemento a dos para esta operacioacuten En consecuencia la direccioacuten efectiva es un desplazamiento relativo a la direccioacuten de la instruccioacuten

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 12: Arquitectura Trabajo

Una forma muy sencilla de direccionamiento es el direccionamiento directo en el que el campo de direcciones contiene la direccioacuten efectiva del operando

EA = A

Esta teacutecnica fue comuacuten en las primeras generaciones de computadores y se encuentra auacuten en diversos sistemas Solo requiere una referencia a memoria y no necesita ninguacuten caacutelculo especial La limitacioacuten obvia es que proporciona un espacio de direcciones restringido

DIRECCIONAMIENTO INDIRECTO

El problema del direccionamiento directo es que la longitud del campo de direcciones es normalmente menor que la longitud de palabra limitando pues el rango de direcciones Una solucioacuten es hacer que el campo de direcciones referencie la direccioacuten de una palabra de memoria la cual contenga la direccioacuten completa del operando Esto es lo que se denomina direccionamiento indirecto

EA = (A)

La ventaja obvia de esta aproximacioacuten es que para una longitud de palabra de Nbits se dispone ahora de un espacio de direcciones de 2N La desventaja es que la ejecucioacuten de la instruccioacuten requiere dos referencias a memoria para captar el operando una para captar su direccioacuten y otra para obtener su valor

Aunque el nuacutemero de palabras que pueden ahora direccionarse es 2Nt el nuacutemero de direcciones efectivas diferentes que pueden referenciarse en un instante dado estaacute limitado a 2K donde K es la longitud del campo de direcciones Normalmente esto no supone una restriccioacuten severa y puede superarse En un entorno de memoria virtual todas las posiciones de direcciones efectivas pueden confinarse a la paacutegina 0 de cualquier proceso Ya que el campo de direcciones de una instruccioacuten es pequentildeo solo se podraacuten generar direcciones directas con valores bajos las cuales apareceraacuten en la paacutegina 0 (la uacutenica restriccioacuten es que el tamantildeo de paacutegina debe ser mayor o igual que 2a) Cuando un proceso estaacute activo habraacute repetidas referencias a la paacutegina 0 haciendo que se quede en memoria real Por tanto una referencia indirecta a memoria implicaraacute como mucho un fallo de paacutegina en lugar de dosccedil

Una variante de direccionamiento indirecto raramente utilizada es el direccionamiento multinivel o en cascada

EA = ((A))

En este caso uno de los bits de una palabra de direccioacuten es un indicador de laquoindireccioacutenraquo (I) Si el bit I es 0 la palabra contiene el valor de EA Si el bit I es 1 entonces se invoca otro nivel de laquoindireccioacutenraquo No parece que esta aproximacioacuten ofrezca ninguna ventaja particular y su desventaja es que podriacutean requerirse dos o maacutes referencias para captar un operando

DIRECCIONAMIENTO DE REGISTROS

El direccionamiento de registros es similar al directo La uacutenica diferencia es que el campo de direcciones referencia un registro en lugar de una direccioacuten de memoria principal

EA = R

Por ejemplo si el campo de direccioacuten de registro de la instruccioacuten es 5 la direccioacuten deseada es el registro R5 y el valor del operando es el contenido de R5 Normalmente un campo de direcciones que referencia a registros consta de tres a cinco bits de manera que pueden referenciarse un total de 8 a 32 registros de uso general

Las ventajas del direccionamiento de registros son que (1) solo es necesario un campo pequentildeo de direcciones en la instruccioacuten y (2) no se requieren referencias a memoria Como se comentoacute en el Capiacutetulo 4 el tiempo de acceso a un registro interno del procesador es mucho menor que para la memoria principal La desventaja del direccionamiento a registros es que el espacio de direcciones estaacute muy limitado

Si se hace un uso masivo del direccionamiento a registros en un repertorio de instrucciones los registros del procesador se emplearaacuten intensamente Debido al nuacutemero tan limitado de registros (en comparacioacuten con el nuacutemero de posiciones de memoria principal) usarlos de esta manera tiene sentido solo si se emplean eficientemente Si todo operando se carga de memoria principal a un registro se opera con eacutel una vez y se devuelve a memoria principal resulta que se estariacutea antildeadiendo un paso intermedio improcedente Si en lugar de esto el operando del registro se mantiene en uso durante varias operaciones se estariacutea consiguiendo un ahorro real Un ejemplo son los resultados intermedios de un caacutelculo En particular suponga que se va a implementar en software el algoritmo de multiplicacioacuten en complemento a dos La posicioacuten A del diagrama de flujo (Figura 912) se referencia muchas veces y debiera estar implementada en un registro en lugar de en una posicioacuten de memoria principal

Depende del programador decidir queacute valores deben mantenerse en registros y cuaacuteles deben almacenarse en memoria principal La mayoriacutea de los procesadores modernos emplean muacuteltiples registros de uso general cargando al programador en lenguaje ensamblador (cuando desarrolla compiladores por ejemplo) con la responsabilidad de conseguir una ejecucioacuten eficiente

DIRECCIONAMIENTO INDIRECTO CON REGISTRO

Igual que el direccionamiento de registros es anaacutelogo al directo el direccionamiento indirecto con registro es anaacutelogo al direccionamiento indirecto En ambos casos la diferencia estriba en si el campo de direcciones hace referencia a una posicioacuten de memoria o a un registro Asiacute para el direccionamiento indirecto con registro

EA = (R)

Las ventajas y limitaciones del direccionamiento indirecto con registro son baacutesicamente las mismas que se tienen para el direccionamiento indirecto En ambos casos la limitacioacuten de espacio o rango de direcciones del campo de direcciones se supera

haciendo que dicho campo referencie una posicioacuten de una palabra completa (un registro completo en este caso) que contenga la direccioacuten Ademaacutes el direccionamiento indirecto con registro emplea una referencia menos a memoria que el direccionamiento indirecto

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

Los principales usos del direccionamiento con desplazamiento son

bull Desplazamiento relativo

bull Direccionamiento con registro base

bull Indexado

Direccionamiento relativo Para el direccionamiento relativo tambieacuten llamado direccionamiento relativo al PC el registro referenciado impliacutecitamente es el contador de programa (PC) Es decir la direccioacuten de instruccioacuten actual se suma al campo de direcciones para producir el valor EA Normalmente el campo de direcciones se trata como nuacutemero en complemento a dos para esta operacioacuten En consecuencia la direccioacuten efectiva es un desplazamiento relativo a la direccioacuten de la instruccioacuten

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 13: Arquitectura Trabajo

DIRECCIONAMIENTO DE REGISTROS

El direccionamiento de registros es similar al directo La uacutenica diferencia es que el campo de direcciones referencia un registro en lugar de una direccioacuten de memoria principal

EA = R

Por ejemplo si el campo de direccioacuten de registro de la instruccioacuten es 5 la direccioacuten deseada es el registro R5 y el valor del operando es el contenido de R5 Normalmente un campo de direcciones que referencia a registros consta de tres a cinco bits de manera que pueden referenciarse un total de 8 a 32 registros de uso general

Las ventajas del direccionamiento de registros son que (1) solo es necesario un campo pequentildeo de direcciones en la instruccioacuten y (2) no se requieren referencias a memoria Como se comentoacute en el Capiacutetulo 4 el tiempo de acceso a un registro interno del procesador es mucho menor que para la memoria principal La desventaja del direccionamiento a registros es que el espacio de direcciones estaacute muy limitado

Si se hace un uso masivo del direccionamiento a registros en un repertorio de instrucciones los registros del procesador se emplearaacuten intensamente Debido al nuacutemero tan limitado de registros (en comparacioacuten con el nuacutemero de posiciones de memoria principal) usarlos de esta manera tiene sentido solo si se emplean eficientemente Si todo operando se carga de memoria principal a un registro se opera con eacutel una vez y se devuelve a memoria principal resulta que se estariacutea antildeadiendo un paso intermedio improcedente Si en lugar de esto el operando del registro se mantiene en uso durante varias operaciones se estariacutea consiguiendo un ahorro real Un ejemplo son los resultados intermedios de un caacutelculo En particular suponga que se va a implementar en software el algoritmo de multiplicacioacuten en complemento a dos La posicioacuten A del diagrama de flujo (Figura 912) se referencia muchas veces y debiera estar implementada en un registro en lugar de en una posicioacuten de memoria principal

Depende del programador decidir queacute valores deben mantenerse en registros y cuaacuteles deben almacenarse en memoria principal La mayoriacutea de los procesadores modernos emplean muacuteltiples registros de uso general cargando al programador en lenguaje ensamblador (cuando desarrolla compiladores por ejemplo) con la responsabilidad de conseguir una ejecucioacuten eficiente

DIRECCIONAMIENTO INDIRECTO CON REGISTRO

Igual que el direccionamiento de registros es anaacutelogo al directo el direccionamiento indirecto con registro es anaacutelogo al direccionamiento indirecto En ambos casos la diferencia estriba en si el campo de direcciones hace referencia a una posicioacuten de memoria o a un registro Asiacute para el direccionamiento indirecto con registro

EA = (R)

Las ventajas y limitaciones del direccionamiento indirecto con registro son baacutesicamente las mismas que se tienen para el direccionamiento indirecto En ambos casos la limitacioacuten de espacio o rango de direcciones del campo de direcciones se supera

haciendo que dicho campo referencie una posicioacuten de una palabra completa (un registro completo en este caso) que contenga la direccioacuten Ademaacutes el direccionamiento indirecto con registro emplea una referencia menos a memoria que el direccionamiento indirecto

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

Los principales usos del direccionamiento con desplazamiento son

bull Desplazamiento relativo

bull Direccionamiento con registro base

bull Indexado

Direccionamiento relativo Para el direccionamiento relativo tambieacuten llamado direccionamiento relativo al PC el registro referenciado impliacutecitamente es el contador de programa (PC) Es decir la direccioacuten de instruccioacuten actual se suma al campo de direcciones para producir el valor EA Normalmente el campo de direcciones se trata como nuacutemero en complemento a dos para esta operacioacuten En consecuencia la direccioacuten efectiva es un desplazamiento relativo a la direccioacuten de la instruccioacuten

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 14: Arquitectura Trabajo

haciendo que dicho campo referencie una posicioacuten de una palabra completa (un registro completo en este caso) que contenga la direccioacuten Ademaacutes el direccionamiento indirecto con registro emplea una referencia menos a memoria que el direccionamiento indirecto

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

DIRECCIONAMIENTO CON DESPLAZAMIENTO

Un modo muy potente de direccionamiento combina las posibilidades de los direccionamientos directo e indirecto con registro Se conoce con distintos nombres dependiendo del contexto en que se emplee pero el mecanismo baacutesico es el mismo Nosotros usaremos la denominacioacuten de direccionamiento con desplazamiento

EA = A + (R)

El direccionamiento con desplazamiento requiere que las instrucciones tengan dos campos de direcciones al menos uno de los cuales expliacutecito El valor contenido en uno de los campos de direcciones (valor = A) se utiliza directamente El otro campo de direcciones o una referencia impliacutecita definida por el coacutedigo de operacioacuten se refiere a un registro cuyo contenido se suma a A para generar la direccioacuten efectiva

Los principales usos del direccionamiento con desplazamiento son

bull Desplazamiento relativo

bull Direccionamiento con registro base

bull Indexado

Direccionamiento relativo Para el direccionamiento relativo tambieacuten llamado direccionamiento relativo al PC el registro referenciado impliacutecitamente es el contador de programa (PC) Es decir la direccioacuten de instruccioacuten actual se suma al campo de direcciones para producir el valor EA Normalmente el campo de direcciones se trata como nuacutemero en complemento a dos para esta operacioacuten En consecuencia la direccioacuten efectiva es un desplazamiento relativo a la direccioacuten de la instruccioacuten

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 15: Arquitectura Trabajo

Si la mayoriacutea de las referencias a memoria estaacuten relativamente cerca de la instruccioacuten en ejecucioacuten el uso del direccionamiento relativo ahorra bits de direcciones en la instruccioacuten

Direccionamiento con registro base La interpretacioacuten del direccionamiento con registro- base es la siguiente el registro referenciado contiene una direccioacuten de memoria y el campo de direccioacuten contiene un desplazamiento (normalmente en representacioacuten entera sin signo) desde dicha direccioacuten La referencia a registro puede ser expliacutecita o impliacutecita

El direccionamiento con registro base aprovecha tambieacuten la localidad de las referencias a memoria Es una forma conveniente de implementar la segmentacioacuten que se estudioacute en el Capiacutetulo 8 En algunas implementaciones se emplea un solo registro de base de segmento y es utilizado impliacutecitamente En otras el programador puede seleccionar un registro para guardar la direccioacuten de base de un segmento y la instruccioacuten debe referendario de manera expliacutecita En este uacuteltimo caso si la longitud del campo de direcciones es K y el nuacutemero de registros posibles es N una instruccioacuten puede referen- ciar una de entre N aacutereas de 2palabras

Indexado La interpretacioacuten usual del indexado es la siguiente el campo de direccioacuten referencia una direccioacuten de memoria principal y el registro referenciado contiene un desplazamiento positivo desde esa direccioacuten Obseacutervese que este uso es justo el opuesto de la interpretacioacuten del direccionamiento con registro base Por supuesto hay algo maacutes que una mera cuestioacuten de interpretacioacuten de uso Ya que en el indexado se considera que el campo de direcciones es una direccioacuten de memoria generalmente contiene maacutes bits que un campo de direcciones de una instruccioacuten comparable que emplee direccionamiento con registro base Tambieacuten veremos que hay algunas mejoras del indexado que no seriacutean tan uacutetiles en el contexto de registros base No obstante el meacutetodo para calcular EA es el mismo para ambos tipos de direccionamiento y en ambos las referencias a los registros son a veces expliacutecitas y a veces impliacutecitas (para diferentes procesadores)

Un uso importante del indexado es como mecanismo eficiente para ejecutar operaciones iterativas Considere por ejemplo una lista de nuacutemeros almacenados a partir de la posicioacuten A Suponga que se quiere sumar 1 a cada elemento de la lista Necesitamos captar cada valor sumarle 1 y memorizar el resultado La secuencia de direcciones efectivas necesarias es A A + 1 A + 2 hasta la uacuteltima posicioacuten de la lista Con el indexado esto es faacutecil de hacer El valor A se almacena en el campo de direccioacuten de la instruccioacuten y el registro elegido llamado registro iacutendice se inicializa a 0 Tras cada operacioacuten el registro iacutendice se incrementa en 1

Dado que los registros iacutendice se usan normalmente para tales tareas iterativas es normal incrementarlos o decrementarlos tras cada referencia

Ya que esta es una operacioacuten comuacuten algunos sistemas la efectuacutean automaacuteticamente como parte del ciclo de instruccioacuten Esto se denomina autoindexado Si un registro concreto esta dedicado exclusivamente al indexado el autoindexado puede ser invocado impliacutecitamente y automaacuteticamente Si se emplean registros de uso general la operacioacuten de autoindexado puede requerir de un bit de la instruccioacuten que lo indique El autoindexado con incremento puede describirse como sigue

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 16: Arquitectura Trabajo

EA = A + (R)

(R )lt-(R )+1

Algunas maacutequinas disponen de direccionamiento tanto indirecto como indexado y es posible emplear ambos en la misma instruccioacuten Hay dos posibilidades el indexado se realiza bien antes o bien despueacutes de la laquoindireccioacutenraquo

Si la indexacioacuten se realiza despueacutes de la indireccioacuten se denomina post-indexado

EA = (A) + (R)

Primero el contenido del campo de direcciones se emplea para acceder a la posicioacuten de memoria que contiene una direccioacuten directa Esta direccioacuten se indexa entonces mediante el valor del registro Esta teacutecnica es uacutetil para acceder a uno de entre un nuacutemero de bloques de datos con un formato fijo Las operaciones que se realizan son las mismas independientemente del bloque Con preindexado la indexacioacuten se realiza antes de la laquoindireccioacutenraquo

EA = (A + (R))

La direccioacuten se calcula como en el caso de indexado simple No obstante en este caso la direccioacuten calculada no contiene al operando sino la direccioacuten del operando Un ejemplo de uso de esta teacutecnica es la construccioacuten de tablas de bifurcacioacuten multirama En un punto concreto de un programa puede haber una bifurcacioacuten a una de entre varias posiciones en funcioacuten de diversas condiciones Puede establecerse una tabla de direcciones que comience en la posicioacuten A y mediante indexado en esta tabla encontrar la posicioacuten requerida

Normalmente un mismo repertorio de instrucciones no incluiraacute el preindexado y el postindexado simultaacuteneamente

DIRECCIONAMIENTO DE PILA

Una pila es un bloque de posiciones reservado Los elementos se antildeaden en la cabecera de la pila de manera que en cualquier instante el bloque estaacute parcialmente lleno La pila tiene asociado un puntero cuyo valor es la direccioacuten de la cabecera o tope de la pila Alternativamente los dos elementos de la cabecera de la pila pueden residir en registros del procesador en cuyo caso el puntero de pila hace referencia al tercer elemento de la pila (Figura 1014b) El puntero de pila se mantiene en un registro Asiacute las referencias a posiciones de la pila en memoria son de hecho direcciones de acceso indirecto con registro

Formatos de instrucciones

Longitud de instruccioacuten asignacioacuten de los bits instrucciones de longitud variable

FORMATOS DE INSTRUCCIONES

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 17: Arquitectura Trabajo

Un formato de instrucciones define la descripcioacuten en bits de una instruccioacuten en teacuterminos de las distintas partes o campos que la componen Un formato de instrucciones debe incluir un coacutedigo de operacioacuten (codop) e impliacutecita o expliacutecitamente cero o maacutes operandos Cada operando expliacutecito se referencia utilizando uno de los modos de direccionamiento descritos en la Seccioacuten 111 El formato debe impliacutecita o expliacutecitamente indicar el modo de direccionamiento para cada operando En la mayoriacutea de los repertorios de instrucciones se emplean maacutes de un formato de instruccioacuten

El disentildeo de un formato de instruccioacuten es una labor compleja habieacutendose implementando una variedad muy amplia de disentildeos En esta seccioacuten examinamos los aspectos clave de disentildeo analizando brevemente algunos disentildeos que serviraacuten de ilustracioacuten y despueacutes examinaremos con detalle las soluciones adoptadas en el Pentium y en el PowerPC

LONGITUD DE INSTRUCCIOacuteN

El aspecto de disentildeo maacutes baacutesico a considerar en el formato es la longitud o tamantildeo de la instruccioacuten Esta decisioacuten afecta y se ve afectada por el tamantildeo de la memoria su organizacioacuten la estructura de buses la complejidad del procesador y la velocidad del procesador Esta decisioacuten define la riqueza y flexibilidad de la maacutequina desde el punto de vista del programador en lenguaje ensamblador

El compromiso maacutes obvio estaacute entre el deseo de disponer de un repertorio de instrucciones maacutequina potente y la necesidad de ahorrar espacio El programador desea maacutes codops maacutes operandos maacutes modos de direccionamiento y mayor rango de direcciones Maacutes codops y maacutes operandos facilitan el trabajo del programador ya que puede redactar programas maacutes cortos para resolver las mismas tareas De manera similar maacutes modos de direccionamiento dan maacutes flexibilidad al programador para imple- mentar ciertas funciones tales como la gestioacuten de tablas y las bifurcaciones multi-rama Y por supuesto con el aumento de tamantildeo de la memoria principal y el uso creciente de la memoria virtual los programadores demandan poder direccionar rangos de memoria grandes Todo esto (codops operan- dos modos de direccionamiento y rango de direcciones) requiere de bits y empuja hacia longitudes de instruccioacuten mayores Pero una longitud de instruccioacuten mayor puede ser improcedente Una instruccioacuten de 64 bits ocupa el doble de espacio que una de 32 bits pero probablemente no es el doble de uacutetil

Aparte de este compromiso baacutesico hay otras consideraciones a tener en cuenta Debiera cumplirse o bien que el tamantildeo de la instruccioacuten fuera igual al tamantildeo de las transferencias a memoria (en un sistema basado en un bus igual al tamantildeo del bus de datos) o bien que uno fuera un muacuteltiplo del otro En caso contrario no conseguiremos un nuacutemero iacutentegro de instrucciones durante un ciclo de captacioacuten Una cuestioacuten relacionada es la velocidad de transferencia de la memoria Esta velocidad no ha seguido el mismo aumento que la velocidad de los procesadores Por ello la memoria puede convertirse en un cuello de botella si el procesador puede ejecutar las instrucciones maacutes raacutepido que lo que tarda en captarlas Una solucioacuten a este problema es el uso de memoria cacheacute (veacutease la Seccioacuten 43) otra es utilizar instrucciones maacutes cortas De nuevo las instrucciones de 16 bits pueden captarse el doble de raacutepido que las de 32 bits pero probablemente no pueden ejecutarse el doble de raacutepido

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 18: Arquitectura Trabajo

Una caracteriacutestica aparentemente irrelevante pero sin embargo importante es que la longitud de la instruccioacuten debiera ser un muacuteltiplo de la longitud de un caraacutecter que normalmente es ocho bits y de la longitud de los nuacutemeros en coma fija Para verlo necesitamos hacer uso de un teacutermino desafortunadamente mal definido la palabra [FRAI83] La longitud de palabra de memoria es en cierto sentido la unidad laquonaturalraquo de organizacioacuten El tamantildeo de una palabra define normalmente el tamantildeo de los nuacuteme-ros en coma fija (usualmente ambos coinciden) El tamantildeo de palabra suele tambieacuten coincidir o al menos estaacute directamente relacionado con el tamantildeo de las transferencias a memoria Ya que una forma comuacuten de datos es el caraacutecter seriacutea deseable que una palabra almacenara un nuacutemero entero de caracteres Si no se perderiacutean bits en cada palabra cuando se almacenan muacuteltiples caracteres o habriacutea algunos caracteres partidos entre dos palabras La importancia de este punto es tal que IBM cuando introdujo el Sistema360 y quiso emplear caracteres de ocho bits tuvo que adoptar la decisioacuten draacutestica de pasar de la arquitectura de 36 bits de las maacutequinas cientiacuteficas de las series 7007000 a una arquitectura de 32 bits

ASIGNACIOacuteN DE LOS BITS

Para una longitud de instruccioacuten dada existe claramente un compromiso entre el nuacutemero de codops y la capacidad de direccionamiento Un mayor nuacutemero de codops obviamente implica maacutes bits en el campo de codop Esto reduce para un formato de instruccioacuten de una longitud dada el nuacutemero de bits disponibles para direccionamiento Hay un refinamiento interesante al respecto consistente en el uso de codops de longitud variable En esta aproximacioacuten existe una longitud miacutenima de codop pero para algunos de ellos se pueden especificar operaciones adicionales utilizando maacutes bits de la instruccioacuten En una instruccioacuten de longitud fija esto deja menos bits para direccionamiento Asiacute pues esta caracteriacutestica se emplea en aquellas instrucciones que requieren menos operandos yo menor capacidad de direccionamiento

Los siguientes factores relacionados entre siacute afectan a la definicioacuten del uso dado a los bits de direccionamiento

bull Nuacutemero de modos de direccionamiento un modo de direccionamiento puede a veces indicarse de manera impliacutecita Por ejemplo ciertos codops podriacutean siempre hacer referencia a indexacioacuten En otros casos los modos de direccionamiento deben ser expliacutecitos requirieacutendo- se uno o maacutes bits de modo

bull Nuacutemero de operandos hemos visto que menos direcciones pueden hacer que los programas sean maacutes largos y difiacuteciles (veacutease como ejemplo la Figura 103) Las instrucciones tiacutepicas de las maacutequinas actuales permiten dos operandos Cada direccioacuten de operando podriacutea requerir su propio indicador de modo dentro de la instruccioacuten o el uso del indicador de modo podriacutea estar limitado a solo uno de los campos de direcciones

bull Registros frente a memoria una maacutequina debe disponer de registros para traer los datos al procesador a fin de procesarlos En el caso de un solo registro visible para el usuario (denominado usualmente acumulador) la direccioacuten del operando estaacute impliacutecita y no consume bits de la instruccioacuten Sin embargo la programacioacuten con un uacutenico registro es engorrosa y requiere muchas instrucciones Incluso con varios registros solo se necesitan unos pocos bits para especificar el registro Diversos estudios indican que es

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 19: Arquitectura Trabajo

aconsejable disponer de 8 a 32 registros visibles para el usuario [LUND77 HUCK83] La mayoriacutea de las arquitecturas contemporaacuteneas disponen de al menos 32 registros

bull Nuacutemero de conjuntos de registros varias maacutequinas tienen un conjunto de registros de uso general que contiene 8 o 16 registros Estos registros pueden emplearse para guardar datos y para almacenar direcciones para direccionamiento con desplazamiento La tendencia actual ha sido pasar de un solo banco de registros de uso general a un grupo de dos o maacutes conjuntos especializados (por ejemplo para datos y para desplazamientos) Una ventaja de este enfoque es que para un nuacutemero dado de registros una particioacuten funcional de estos requiere menos bits de la instruccioacuten Por ejemplo con dos conjuntos de ocho registros solo se necesitan 3 bits para identificar un registro el codop determina de forma impliacutecita queacute conjunto de registros se estaacute referenciando

bull Rango de direcciones para referencias a memoria el rango de direcciones que puede utilizarse estaacute relacionado con el nuacutemero de bits de direccionamiento Dado que esto impone una limitacioacuten severa raramente se emplea direccionamiento directo En direccionamiento con desplazamiento el rango se ampliacutea al definido por la longitud del registro de direcciones Incluso asiacute es auacuten conveniente permitir desplazamientos bastante maacutes largos que los del registro de direcciones y esto requiere de un nuacutemero relativamente grande de bits de direcciones en la instruccioacuten

Granularidad de las direcciones para direcciones que hacen referencia a memoria en lugar de registros otro factor es la granularidad del direccionamiento En un sistema con palabras de 16 o 32 bits una direccioacuten puede referenciar una palabra o un byte seguacuten elija el disentildeador El direccionamiento por bytes es conveniente para manipular caracteres pero requiere para un tamantildeo de memoria dado de maacutes bits de direcciones

Por lo tanto el disentildeador se enfrenta con una gran cantidad de factores a tener en cuenta y sopesar No estaacute claro cuaacuten criacuteticas son las distintas opciones Como ejemplo citamos un estudio [CRAG79] que compara varios enfoques al formato de instrucciones incluyendo el uso de una pila registros de uso general un acumulador y aproximaciones solo memoria-a-registro Haciendo uso de un conjunto coherente de suposiciones no se observan diferencias significativas en espacio de coacutedigo o en tiempo de ejecucioacuten

Veamos brevemente coacutemo dos disentildeos de maacutequinas histoacutericas sopesan los distintos factores anteriores

PDP-8 Uno de los disentildeos de instrucciones maacutes sencillos para un computador de uso general fue el del PDP-8 [BELL78b] Utiliza instrucciones de doce bits y opera con palabras de doce bits Hay un solo registro de uso general el acumulador

A pesar de lo limitado de este disentildeo el direccionamiento es bastante flexible Cada referencia a memoria consta de siete bits maacutes dos modificadores de un bit La memoria se divide en paacuteginas de longitud fija cada una con 27 = 128 palabras El caacutelculo de direcciones se basa en las referencias a la paacutegina cero o a la paacutegina actual (paacutegina que contiene la instruccioacuten) seguacuten el valor del bit de paacutegina El segundo bit modificador indica si se va a usar direccionamiento directo o indirecto Estos dos modificadores pueden utilizarse conjuntamente de tal manera que una direccioacuten indirecta seraacute una

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 20: Arquitectura Trabajo

direccioacuten de doce bits contenida en una palabra de la paacutegina cero o de la paacutegina actual Ademaacutes ocho palabras dedicadas de la paacutegina cero son laquoregistrosraquo de autoindexado Cuando se hace una referencia indirecta a una de estas posiciones tiene lugar un preindexado

La Figura 114 muestra el formato de instruccioacuten del PDP-8 Hay un codop de tres bits y tres tipos de instrucciones Para los codops 0 a 5 el formato consiste en una instruccioacuten con una sola referencia a memoria incluyendo un bit de paacutegina y un bit de indireccioacuten Asiacute pues hay solo seis operaciones baacutesicas Para ampliar el grupo de operaciones el codop 7 define una referencia a registro o microins- truccioacuten En este formato los bits restantes se emplean para codificar operaciones adicionales En general cada bit define una operacioacuten especiacutefica (por ejemplo poner el acumulador a cero) y estos bits pueden combinarse en una sola instruccioacuten La estrategia de las microinstrucciones la empleoacute DEC ya con el PDP-1 y es en cierto sentido un precursor de las maacutequinas microprogramadas actuales que se trataraacuten en la Parte Cuatro del libro El codop seis es la operacioacuten de ES se emplean seis bits para seleccionar uno de entre 64 dispositivos y tres bits especifican una orden particular de ES

El formato de instruccioacuten del PDP-8 es bastante eficiente Permite direccionamiento indirecto direccionamiento con desplazamiento e indexado Con el uso de la ampliacioacuten de codop dispone de un total de 35 instrucciones Debido a lo limitado de una longitud de instruccioacuten de solo doce bits los disentildeadores difiacutecilmente lo podriacutean haber hecho mejor

PDP-10 En fuerte contraste con el repertorio de instrucciones del PDP-8 estaacute el del PDP-10 El PDP-10 se disentildeoacute para ser un sistema de tiempo compartido de gran escala haciendo hincapieacute en que fuera faacutecil de programar incluso a costa de hardware adicional

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 21: Arquitectura Trabajo

Algunos de los principios de disentildeo que se emplearon al definir el repertorio de instrucciones fueron [BELL78c]

bull Ortogonalidad es un principio que hace que dos variables sean independientes entre siacute En el contexto de los repertorios de instrucciones este teacutermino indica que otros elementos de una instruccioacuten son independientes de (no estaacuten determinados por) el codop Los disentildeadores del PDP-10 utilizan este teacutermino para describir el hecho de que una direccioacuten se calcula siempre de la misma manera independientemente del codop En esto difiere de muchas maacutequinas en las que el modo de direccionamiento a veces depende impliacutecitamente del operador que se estaacute usando

bull Complitud cada tipo de datos aritmeacuteticos (enteros en coma fija reales) debiera disponer de un conjunto completo e ideacutentico de operaciones

bull Direccionamiento directo el direccionamiento mediante base maacutes desplazamiento que responsabiliza al programador de la organizacioacuten de la memoria fue evitado en favor del direccionamiento directo

Cada uno de los principios anteriores es un avance hacia la meta global de una programacioacuten faacutecil

El PDP-10 tiene una longitud de palabra de 36 bits y una longitud de instruccioacuten de 36 bits El formato fijo de instruccioacuten se muestra en la Figura 115 El codop ocupa nueve bits permitiendo hasta 512 operaciones De hecho se define un total de 365

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 22: Arquitectura Trabajo

instrucciones diferentes La mayoriacutea de las instrucciones incluyen dos direcciones una de las cuales especifica uno de los 16 registros de uso general Esta referencia a operando ocupa pues cuatro bits La otra referencia a operando comienza con un campo de direcciones de 18 bits Este puede utilizarse como operando inmediato o como una direccioacuten de memoria En el segundo caso se permite direccionamiento tanto indirecto como indexado Los mismos registros de uso general se emplean tambieacuten como registros iacutendice

Una longitud de instruccioacuten de 36 bits es realmente un lujo No hay que hacer nada especial para conseguir aumentar el nuacutemero de codops un campo de coacutedigo de operacioacuten de nueve bits es maacutes que suficiente El direccionamiento es tambieacuten obvio Un campo de direccioacuten de 18 bits hace deseable el direccionamiento directo Para tamantildeos de memoria superiores a 218 se dispone del direccionamiento indirecto Para facilidad del programador se dispone de indexado para manejar tablas y programas ite-rativos Tambieacuten con un campo de operando de 18 bits resulta atractivo el direccionamiento inmediato

El disentildeo de repertorio de instrucciones del PDP-10 cumple los objetivos antes enumerados [LUND77] Este repertorio facilita el trabajo del programador a costa de una utilizacioacuten ineficiente del espacio Esto fue una decisioacuten consciente de los disentildeadores y no puede pues calificarse como un disentildeo poco elaborado

INSTRUCCIONES DE LONGITUD VARIABLE

Los ejemplos vistos hasta ahora hacen uso de una uacutenica longitud de instruccioacuten fija e impliacutecitamente hemos discutido compromisos adoptados en ese contexto No obstante los disentildeadores pueden optar por utilizar varios formatos de instruccioacuten de longitudes diferentes Esta taacutectica hace faacutecil proporcionar un amplio repertorio de codops de longitud variable El direccionamiento puede ser maacutes flexible con varias combinaciones de referencias a registros y a memoria asiacute como de modos de direccionamiento Con instrucciones de longitud variable estas muacuteltiples variaciones pueden proporcionarse de manera eficiente y compacta

El precio a pagar por las instrucciones de longitud variable es el aumento de complejidad del procesador La disminucioacuten del precio del hardware el uso de microprogramacioacuten (discutida en la Parte Cuatro) y un aumento general en el conocimiento de los principios de disentildeo de procesadores contribuyen todos a hacer que el precio a pagar mencionado sea leve

El uso de instrucciones de longitud variable no elimina el deseo de que todas las longitudes de instrucciones esteacuten directamente relacionadas con la longitud de palabra Ya que el procesador no conoce la longitud de la siguiente instruccioacuten a captar una estrategia usual es captar un nuacutemero de bytes o de palabras igual al menos al tamantildeo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 23: Arquitectura Trabajo

de la instruccioacuten maacutes larga Esto significa que a veces se captan varias instrucciones Sin embargo como veremos en el Capiacutetulo 12 esta es siempre una buena a seguir

PDP-11 Se disentildeoacute para proporcionar un repertorio de instrucciones flexible dentro de las limitaciones de un minicomputador de 16 bits [BELL70]

Emplea un conjunto de ocho registros de uso general de 16 bits Dos de estos registros tienen una funcioacuten adicional uno se emplea como puntero de pila en operaciones especiacuteficas con la pila y el otro se emplea como contador de programa que contiene la direccioacuten de la siguiente instruccioacuten

La Figura 116 muestra los formatos de instrucciones del PDP-11 Se usan trece formatos diferentes compaginando instrucciones de ninguna una y dos direcciones La longitud del codop puede variar de cuatro a 16 bits Para las referencias a registros se emplean seis bits Tres bits identifican el registro y los otros tres restantes indican el modo de direccionamiento El PDP-11 estaacute dotado de una rica variedad de modos de direccionamiento Una ventaja de asociar el modo de direccionamiento con el operando en lugar de con el codop como en ocasiones se hace es que todos los modos de direc-cionamiento pueden emplearse con cualquier codop Como hemos mencionado con anterioridad esta independencia se denomina ($(3(amp2))lt

Las instrucciones del PDP-11 tienen normalmente la longitud de una palabra (16 bits) En algunas instrucciones se antildeaden una o dos direcciones de memoria asiacute que hay instrucciones de 32 y de 48 bits formando parte del repertorio Esto permite una flexibilidad de direccionamiento adicional

El repertorio de instrucciones del PDP-11 y su capacidad de direccionamiento son complejos Esto aumenta tanto el coste del hardware como la complejidad de programacioacuten La ventaja es que pueden desarrollarse programas maacutes eficientes o compactos

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 24: Arquitectura Trabajo

VAX La mayoriacutea de las arquitecturas proporcionan un nuacutemero relativamente pequentildeo de formatos de instrucciones Esto puede causar dos problemas al programador En primer lugar el modo de direccionamiento y el codop no son ortogonales Por ejemplo para una operacioacuten dada un operando debe proceder de un registro y otro de memoria o ambos de registros etc En segundo lugar solo puede contemplarse un nuacutemero limitado de operandos normalmente hasta dos o tres Dado que algunas operaciones requieren maacutes operandos deben emplearse estrategias que permitan conseguir el resultado deseado mediante dos o maacutes instrucciones

Para evitar estos problemas se siguieron dos criterios al disentildear el formato de instruccioacuten del VAX [STRE78]

1 Todas las instrucciones debiacutean tener el nuacutemero laquonaturalraquo de operandos

2 Todos los operandos debiacutean tener la misma generalidad de especificacioacuten

El resultado es un formato de instruccioacuten muy variable Una instruccioacuten consta de un codop de uno o dos bytes seguido de una especificacioacuten de cero a seis operandos que depende del codop en cuestioacuten La longitud miacutenima de instruccioacuten es un byte pudieacutendose construir instrucciones de hasta 37 bytes La Figura 117 muestra algunos ejemplos

Una instruccioacuten del VAX comienza por un codop de 1 byte Este es suficiente para representar la mayoriacutea de las instrucciones del VAX No obstante como dispone de maacutes de trescientas instrucciones

El resto de la instruccioacuten consta de hasta seis especificadores de operandos Un especificador de operando ocupa como miacutenimo un byte en el que los cuatro bits de la izquierda especifican el modo de direccionamiento La uacutenica excepcioacuten a esta regla es el modo literal que es identificado por el patroacuten 00 en los dos bits maacutes a la izquierda

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 25: Arquitectura Trabajo

quedando espacio para un literal de seis bits Debido a esta excepcioacuten son un total de doce los modos de direccionamiento que se pueden especificar

Un especificador de operando consiste a menudo en un solo byte en el que los cuatro bits de la derecha especifican uno de entre los 16 registros de uso general La longitud del especificador de operando puede ampliarse en una de las dos formas siguientes en primer lugar un valor constante de uno o maacutes bytes puede seguir inmediatamente al primer byte del especificador de operando Un ejemplo es el modo de desplazamiento en el que se emplea un desplazamiento de 8 16 o 32 bits En segundo lugar puede utilizarse un modo indexado de direccionamiento En este caso el primer byte del especificador de operando estaacute formado por el coacutedigo de modo de direccionamiento de cuatro bits 0100 y un identificador de registro iacutendice de cuatro bits El resto del especificador de operando contiene la especificacioacuten de la direccioacuten base que puede a su vez ocupar uno o maacutes bytes

Puede que el lector se pregunte como tambieacuten lo hizo el autor queacute clase de instruccioacuten puede requerir seis operandos Sorprendentemente el VAX dispone de varias de estas instrucciones Consideremos

ADDP6 OP1 OP2 OP3 OP4 OP5 OP6

Esta instruccioacuten suma dos nuacutemeros decimales empaquetados OP1 y OP2 especifican la longitud y la direccioacuten de inicio de una de las cadenas decimales OP3 y OP4 especifican la segunda cadena Las dos cadenas se suman y el resultado es memorizado como cadena decimal cuya longitud y posicioacuten inicial vienen dadas por OP5 y OP6

El repertorio de instrucciones del VAX ofrece una gran variedad de operaciones y de modos de direccionamiento Esto proporciona al programador una herramienta muy potente y flexible para el desarrollo de programas Tambieacuten en teoriacutea debiera producir compilacioneseficientes en lenguaje maacutequina de programas en lenguajes de alto nivel y en general obtener un uso eficiente y efectivo de los recursos del procesador El precio a pagar por estos beneficios es un incremento en la complejidad del procesador en comparacioacuten con un procesador que posea un repertorio de instrucciones maacutes reducido y de formato maacutes sencillo

Computador de repertorio reducido de instrucciones

Puntos clave

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 26: Arquitectura Trabajo

gt Los estudios del comportamiento de la ejecucioacuten de los programas escritos en lenguajes de alto nivel proporcionaron la orientacioacuten para disentildear un nuevo tipo de arquitectura del procesador el computador de repertorio reducido de instrucciones (Reduced Instruction Set Computer RISC) Las sentencias de asignacioacuten predominan lo que sugiere que las transferencias sencillas de datos deberiacutean optimizarse Hay tambieacuten muchas instrucciones IF y LOOP lo que sugiere que el mecanismo de control de secuencia subyacente ha de ser optimizado para permitir una segmentacioacuten eficiente Los estudios de los patrones de referencia a operandos sugieren que deberiacutea ser posible mejorar las prestaciones teniendo guardados un nuacutemero moderado de operandos en registros

gt Estos estudios han motivado las caracteriacutesticas fundamentales de las maacutequinas RISC (1) un repertorio de instrucciones limitado y con un formato fijo (2) un gran nuacutemero de registros o la utilizacioacuten de un compilador que optimice el uso de estos y (3) un eacutenfasis en la optimizacioacuten del cauce de instrucciones

El repertorio sencillo de instrucciones de un RISC se presta a una segmentacioacuten eficiente porque hay menos operaciones llevadas a cabo por cada instruccioacuten y estas son maacutes previsibles Una arquitectura de repertorio de instrucciones RISC tambieacuten se presta a la teacutecnica de salto retardado en la cual las instrucciones de salto se reubican entre otras instrucciones para mejorar la eficiencia del cauce

Desde el desarrollo del computador de programa almacenado alrededor de 1950 ha habido extraordinariamente pocas innovaciones auteacutenticas en las aacutereas de organizacioacuten y arquitectura de computadores Los siguientes son algunos de los principales avances desde el nacimiento del computador

bull El concepto de familia introducido por IBM en su System360 en 1964 y seguido poco despueacutes por DEC en su PDP-8 El concepto de familia separa la arquitectura de una maacutequina de su implementacioacuten Se ofrece un conjunto de computadores con distintas caracteriacutesticas en cuanto a precioprestaciones que presentan al usuario la misma arquitectura Las diferencias en precio y prestaciones se deben a las distintas implementaciones de la misma arquitectura

bull Unidad de control microprogramada propuesta por Wilkes en 1951 e introducida por IBM en la liacutenea S360 en 1964 La microprogramacioacuten facilita la tarea de disentildear e implementar la unidad de control y da soporte al concepto de familia

bull Memoria cacheacute introducida comercialmente por primera vez en el IBM S360 Modelo 85 en 1968 La introduccioacuten de este elemento en la jerarquiacutea de memoria mejoroacute las prestaciones de manera espectacular

bull Segmentacioacuten de cauce una manera de introducir paralelismo en la naturaleza esencialmente secuencial de un programa constituido por instrucciones maacutequina Dos ejemplos son la segmentacioacuten de instrucciones y el procesamiento vectorial

bull Muacuteltiples procesadores esta categoriacutea cubre diferentes organizaciones y objetivos

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 27: Arquitectura Trabajo

bull Arquitectura de computador de repertorio reducido de instrucciones D5 4$) lt Instruction Sel C onfuta RISC) es el nuacutecleo

La arquitectura RISC se aparta de manera draacutestica de la tendencia histoacuterica en la arquitectura del procesador Un anaacutelisis de la arquitectura RISC involucra la mayoriacutea de los asuntos importantes de organizacioacuten y arquitectura de computadores

Aunque los sistemas RISC se han definido y disentildeado de diversas formas por parte de diferentes grupos los elementos principales compartidos por la mayoriacutea de los disentildeos son

bull Un gran nuacutemero de registros de uso general o el uso de tecnologiacutea de compiladores para optimizar la utilizacioacuten de los registros

bull Un repertorio de instrucciones limitado y sencillo

bull Un eacutenfasis en la optimizacioacuten de la segmentacioacuten de instrucciones

La Tabla 131 compara varios sistemas RISC y no RISC

CARACTERIacuteSTICAS DE LA EJECUCIOacuteN DE INSTRUCCIONES

Uno de los aspectos relacionados con los computadores que ha evolucionado de manera maacutes visible es el de los lenguajes de programacioacuten Conforme el coste del hardware ha disminuido el coste relativo del software ha ido creciendo Junto con esto la escasez permanente de programadores ha hecho subir los costes del software en teacuterminos absolutos De ahiacute que el coste principal del ciclo de vida de un sistema sea el software no el hardware Otro elemento que se antildeade al coste y a otros inconvenientes es la falta

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 28: Arquitectura Trabajo

de fiabilidad es frecuente que los programas tanto de sistema como de aplicacioacuten continuacuteen mostrando nuevos errores despueacutes de antildeos de funcionamiento

La respuesta de los investigadores y de la industria fue desarrollar lenguajes de programacioacuten de alto nivel maacutes potentes y complejos Estos lenguajes de alto nivel (High-Level Languages HLL) permiten al programador expresar los algoritmos de manera maacutes concisa se encargan de gran parte de los pormenores y a menudo favorecen de manera natural la programacioacuten estructurada o el disentildeo orientado a objetos

Desgraciadamente la solucioacuten ocasionoacute otro problema conocido como el salto semaacutentico la diferencia entre las operaciones que proporcionan los HLL y las que proporciona la arquitectura del computador Los supuestos siacutentomas de este salto o hueco incluiacutean ineficiencia de la ejecucioacuten tamantildeo excesivo del programa en lenguaje maacutequina y complejidad de los compiladores Los disentildeadores respondieron con arquitecturas que se proponiacutean cerrar ese hueco Sus caracteriacutesticas principales incluyen repertorios de instrucciones grandes docenas de modos de direccionamiento y determinadas sentencias HLL implementadas en hardware Un ejemplo de esto uacuteltimo es la instruccioacuten maacutequina CASE del VAX Tales repertorios complejos de instrucciones estaacuten pensados para

bull Facilitar el trabajo del escritor de compiladores

bull Mejorar la eficiencia de la ejecucioacuten ya que las secuencias complejas de operaciones pueden implementarse en microcoacutedigo

bull Dar soporte a HLL aun maacutes complejos y sofisticados

Mientras tanto se hicieron algunos estudios durante antildeos para determinar las caracteriacutesticas y patrones de ejecucioacuten de las instrucciones maacutequina generadas por programas escritos en HLL Los resultados de estos estudios movieron a algunos investigadores a buscar una aproximacioacuten diferente a saber realizar una arquitectura que diera un soporte maacutes sencillo a los HLL en lugar de maacutes complejo

Para comprender la liacutenea de razonamiento de los partidarios de los RISC comenzamos con una breve revisioacuten de las caracteriacutesticas de la ejecucioacuten de instrucciones Los aspectos cuyo caacutelculo tiene intereacutes son los siguientes

bull Operaciones realizadas determinan las funciones que lleva a cabo el procesador y su interaccioacuten con la memoria

bull Operandos usados los tipos de operandos y su frecuencia de uso determinan la organizacioacuten de memoria para almacenarlos y los modos de direccionamiento para acceder a ellos

bull Secuenciamiento de la ejecucioacuten determina la organizacioacuten del control y del cauce segmentado

En el resto de esta seccioacuten resumimos los resultados de varios estudios sobre programas escritos en lenguaje de alto nivel Todos los resultados se basan en medidas dinaacutemicas

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 29: Arquitectura Trabajo

Es decir las medidas estaacuten tomadas ejecutando el programa y contando el nuacutemero de veces que alguna caracteriacutestica ha aparecido o una propiedad concreta ha sido cierta Por contraste las medidas estaacuteticas solo realizan estas cuentas sobre el texto fuente del programa Estas no nos dan una informacioacuten uacutetil sobre las prestaciones ya que no estaacuten ponderadas por el nuacutemero de veces que se ejecuta cada sentencia

Caracteriacutesticas CISC y RISC -gt Lib-02 pag 300

Computadora de conjunto de instrucciones reducido (RISC)

Un aspecto importante de la arquitectura de computadoras es el disentildeo de conjunto de instrucciones para el procesador El conjunto de instrucciones elegido pata una computadora particular determina la manera en que se construyen los programas de lenguaje de maacutequina Las primeras computadoras teniacutean conjuntos de instrucciones pequentildeos y simples forzados sobre todo por la necesidad de minimizar la circuiteriacutea utilizada para implantarlos Conforme la circuiteriacutea digital se hizo maacutes barata con la aparicioacuten de los circuitos integrados las instrucciones de computadora tendieron a aumentar tanto en cantidad como en complejidad Muchas computadoras tienen con-juntos de instrucciones gue incluyen maacutes de 100 y en ocasiones maacutes de 200 instrucciones Las computadoras tambieacuten emplean diversos tipos de datos y una gran cantidad de modos de direccionamiento La tendencia hacia la complejidad de la circuiteriacutea de computadora la produjeron varios factores como el mejoramiento de los modelos existentes para proporcionar maacutes aplicaciones al cliente la adicioacuten de instrucciones que facilitaban la traduccioacuten de programas en lenguaje de alto nivel a programas de lenguaje de maacutequina y la buacutesqueda para desarrollar maacutequinas que trasladaran funciones de implantaciones de programa a implantaciones de hardware Una computadora con una gran cantidad de instrucciones se clasifica como una compu-tadora con conjunto de instrucciones complejo CISC (complex instruction set computer)

Al principio de los antildeos ochenta muchos disentildeadores de computadora recomendaron que las maacutequinas utilizaran menos instrucciones con foacutermulas sencillas para que pudieran ejecutarse con mucha mayor rapidez dentro de la CPU sin tener que utilizar la memoria con tanta frecuencia Este tipo de computadoras se clasifica como computadoras de conjunto de instrucciones reducido RISC (reduced instruction set computer) En esta seccioacuten presentamos las principales caracteriacutesticas de las arquitecturas CISC y RISC y despueacutes el conjunto de instrucciones y el formato de instrucciones de un procesador

Caracteriacutesticas CISC

El disentildeo de un conjunto de instrucciones para una computadora debe considerar no soacutelo foacutermulas de lenguaje de maacutequina sino tambieacuten los requerimientos internos en la utilizacioacuten de lenguajes de programacioacuten de alto nivel La traduccioacuten de programas de alto nivel a programas de lenguaje de maacutequina se realiza mediante un programa compilador Una razoacuten para la tendencia a proporcionar conjuntos de instrucciones complejos es el deseo de simplificar la compilacioacuten y mejorar el desempentildeo general de la computadora La tarea de un compilador es generar una secuencia de instrucciones de

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 30: Arquitectura Trabajo

maacutequina para cada enunciado de lenguaje de alto nivel La tarea se simplifica si existen instrucciones de maacutequina que integren los enunciados en forma directa El propoacutesito esencial de una arquitectura CISC es intentar proporcionar una uacutenica instruccioacuten de maacutequina para cada enunciado que esteacute escrita en un lenguaje de alto nivel Algunos ejemplos de las arquitecturas CISC son la computadora V AX de Digital Equipment Corporation y la IBM 370

Otra caracteriacutestica de la arquitectura CISC es la incorporacioacuten de formatos de instrucciones de tamantildeo variable Las instrucciones que necesitan operandos de registro pueden tener soacutelo dos bytes de longitud pero las instrucciones que necesitan direcciones de memoria pueden necesitar cinco bytes para incluir todo el coacutedigo de la instruccioacuten Si la computadora tiene palabras de 32 bits (cuatro bytes) la primera instruccioacuten ocupa la mitad de una palabra en tanto la segunda instruccioacuten necesita una palabra maacutes un byte en la siguiente Para guardar formatos de instrucciones variables en una palabra de memoria de longitud fija se necesitan circuitos especiales de decodificacioacuten que cuenten los bytes dentro de la palabra y separen las instrucciones de acuerdo con la longitud de sus bytes

Las instrucciones en un procesador CISC tiacutepico proporcionan la manipulacioacuten directa de los operandos que residen en la memoria Por ejemplo una instruccioacuten ADD puede especificar un operando en la memoria mediante un direccionamiento de iacutendice y un segundo operando en la memoria por medio de un direccionamiento directo Puede incluirse en la instruccioacuten otra localidad de memoria para almacenar la suma Esto requiere tres referencias de memoria durante la ejecucioacuten de la instruccioacuten Aunque los procesadores CTSC tienen instrucciones que soacutelo utilizan registros de procesador la disponibilidad de otros modos de operaciones tiende a simplificar la compilacioacuten de lenguajes de alto nivel Sin embargo conforme se incorporan maacutes instrucciones y modos de direccionamiento en una computadora se necesita maacutes circuiteriacutea loacutegica para implantarlos y soportarlos y esto puede producir que los caacutelculos se hagan lentos En resumen las principales caracteriacutesticas de la arquitectura CISC son

1 Una gran cantidad de instrucciones por lo general de 100 a 250

2 Algunas instrucciones que ejecuten tareas especializadas y que no se usen con frecuencia

3 Una gran cantidad de modos de direccionamiento por lo general de S a 20 modos diferentes

4 Formatos de instrucciones de extensioacuten variable

5 Instrucciones que manipulen operandos en la memoria

Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun Caracteriacutesticas RISC

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 31: Arquitectura Trabajo

El concepto de la arquitectura RJSC significa un intento para reducir el tiempo de ejecucioacuten al simplificar el conjunto de instrucciones de la computadora Las principales caracteriacutesticas de un procesador RISC sun

1 Relativamente pocas instrucciones

2 Relativamente pocos modos de direccionamiento

3 El acceso a memoria limitado a instrucciones de carga y almacenamiento

4 Todas las operaciones realizadas dentro de los registros de la CPU

5 Formatos de instrucciones decodificados con facilidad de longitud fija

6 Ejecucioacuten del ciclo de instruccioacuten uacutenica

7 Control por circuiteriacutea en lugar de microprogramado

El pequentildeo conjunto de instrucciones de un procesador RISC tiacutepico consiste principalmente en operaciones registro a registro y soacutelo tiene las operaciones cargar y almacenar para accesar la memoria Cada operando se introduce al procesador con una instruccioacuten cargar Todos los caacutelculos se hacen entre los datos almacenados en los registros del procesador Los resultados se transfieren a la memoria mediante instrucciones almacenar Esta caracteriacutestica de arquitectura simplifica el conjunto de instrucciones y estimula la optimizacioacuten de la manipulacioacuten de registros Se usan unos cuantos modos de direccionamiento porque casi todas las instrucciones tienen registros de direccionamiento simple Pueden incluirse otros modos de direccionamiento como los operandos inmediatos y el modo relativo

Al usar un formato de instrucciones simple la longitud de las instrucciones puede fijarse y auumlnearse en palabras contiguas Un aspecto importante del formato de instruccioacuten RISC es que resulta faacutecil de decodificar Por lo tanto el control puede accesar simultaacuteneamente el coacutedigo de operacioacuten y los campos de registro del coacutedigo de la instruccioacuten Al simplificar las instrucciones y su formato tambieacuten puede hacerse maacutes sencilla la loacutegica de control Para operaciones maacutes raacutepidas es preferible un control de circuiteriacutea sobre uno microprogramado

Una caracteriacutestica de los procesadores RISC es su capacidad para ejecutar una instruccioacuten por ciclo de reloj Esto se logra al hacer simultaacuteneamente las fases de recuperacioacuten decodificacioacuten y ejecucioacuten de dos o tres instrucciones usando un procedimiento denominado paralelismo Una instruccioacuten cargar o almacenar puede requerir dos ciclos de reloj porque el acceso a memoria toma maacutes tiempo que las operaciones de registro En ocasiones se atribuyen middota RISC un paralelismo eficiente y otras cuantas caracteriacutesticas aunque tambieacuten pueden existir en arquitecturas no RISC Otras caracteriacutesticas que se le atribuyen a la arquitectura RISC son

1 Una cantidad de registros en el procesador relativamente grande

2 Uso de ventanas de registros traslapados para acelerar la llamada y retorno de procedimientos

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 32: Arquitectura Trabajo

3 Paralelismo de instrucciones eficiente

4 Soporte de compilador para traduccioacuten eficiente de programas de lenguaje de alto nivel a programas de lenguaje de maacutequina

Es conveniente tener una gran cantidad de registros para almacenar los resultados intermedios y para optimizar las referencias de operandos La ventaja del almacenamiento en registros a diferencia del almacenamiento en memoria es que los registros pueden transferir informacioacuten a otros registros mucho maacutes raacutepido que la transferencia de informacioacuten hacia y desde la memoria Por esa razoacuten se pueden minimizar las operaciones al conservar en registros los operandos a los que se accede con mayor frecuencia Los estudios que muestran un rendimiento mejorado para la arquitectura RISC no establecen la diferencia entre los efectos del conjunto reducido de instrucciones y los efectos de un archivo de registros grande Debido a eso a veces se asocian con procesadores RISC una gran cantidad de registros en la unidad de procesamiento En la siguiente seccioacuten se explica el uso de ventanas de registros traslapados cuando se transfiere el control de programas despueacutes de una solicitud de procedimiento El conducto de instrucciones en RISC se presenta en la seccioacuten 9-5 despueacutes de que se explica el concepto de conduccioacuten y saturacioacuten de liacutenea

Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas Ventanas de registros traslapados

En los lenguajes de programacioacuten de alto nivel ocurren con frampuencia llamadas y retornos de procedimientos Cuando se traduce a lenguaje de maacutequina una llamada de procedimiento produce una secuencia de instrucciones que guardan valores de registros pasan paraacutemetros que necesita el procedimiento y despueacutes solicitan una subrutina que ejecute el cuerpo del procedimiento Despueacutes de un retorno de procedimiento el programa restablece los valores de registro anteriores trasmite los resultados al progra-ma solicitante y retoma de la subrutina Guardar y restablecer registros y pasar paraacutemetros y resultados son operaciones que consumen tiempo Algunas computadoras proporcionan bancos de registros muacuteltiples y a cada procedimiento se le asigna su propio banco de registros Esto elimina la necesidad de guardar y restablecer los valores de los registros Algunas computadoras utilizan la pila de memoria para almacenar los paraacutemetros que necesita el procedimiento pero esto reguiere un acceso a memoria cada vez que se accesa la pila

Una caracteriacutestica de algunos procesadores RISC es que utilizan ventanas de registros traslapados para ofrecer el paso de paraacutemetros y evitar la necesidad de guardar y restablecer valores de registros Cada solicitud de procedimiento produce la asignacioacuten de una nueva ventana que consiste en un conjunto de registros del archivo de registros

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 33: Arquitectura Trabajo

para que la use el nuevo procedimiento Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar un apuntador mientras que el enunciado de retorno decrementa el apuntador y produce la activacioacuten de la ventana anterior Las ventanas para procedimientos adyacentes tienen registros traslapados que comparten para proporcionar el paso de paraacutemetros y resultados

El concepto de ventanas con registros traslapados se ilustra en la figura 8-9 El sistema tiene un total de 64 registros Los registros del RO al R9 son registros globales que contienen paraacutemetros que comparten todos los procedimientos Los otros 64 registros se dividen en cuatro ventanas para alojar los procedimientos A B C y D Cada ventana de registros consta de 10 registros locales y dos conjuntos de seis registros comunes a las ventanas adyacentes Los registros locales se utilizan para las variables locales Los registros comunes se utilizan para el intercambio de paraacutemetros y resultados entre procedimientos adyacentes Los registros traslapados comunes permiten que se pasen paraacutemetros y el movimiento real de datos En cualquier momento dado soacutelo estaacute activa una ventana de registro con un apuntador que la sentildeala como activa Cada solicitud de procedimiento activa una nueva ventana de registros al incrementar el apuntador Los registros altos del procedimiento llamado se sobreponen a los registros bajos del procedimiento llamado y por lo tanto los paraacutemetros se transfieren en forma automaacutetica del procedimiento que llama al llamado

Como ejemplo supongamos que el procedimiento A solicita el procedimiento B Los registros del R26 al R31 son comunes a los dos procedimientos y por lo tanto el procedimiento A almacena los paraacutemetros para el procedimiento B en estos registros El procedimiento B utiliza los registros locales del R32 al R41 para el almacenamiento de variables locales Si el procedimiento B solicita el procedimiento C pasaraacute los paraacutemetros por medio de los registros del R42 al R47 Cuando el procedimiento B estaacute listo para retomar al final su computacioacuten el programa almacena los resultados de estos caacutelculos en los registros del R26 al R31 y transfiere de vuelta la ventana de registros al procedimiento A Notese que los registros RlO al R15 son comunes a los procedimientos A y D por Jo que las cuatro ventanas tienen una organizacioacuten circular en donde A es adyacente a D

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 34: Arquitectura Trabajo

Como se mencionoacute antes los 10 registros globales RO al R9 estaacuten disponibles para todos los procedimientos Cada procedimiento en la figura 8-9 tiene disponible un total de 32 registros mientras estaacute activo Esto incluye 10 registros globales 10 registros locales seis registros bajos traslapados y seis registros altos traslapados Son posibles otros esquemas de ventanas de registros de tamantildeo fijo y cada una puede variar en el tamantildeo de la ventana de registro y en el tamantildeo de todo el archjvo de registros En general la organizacioacuten de las ventanas de registros tendraacute las siguientes relaciones

Cantidad de registros globales = G

Cantidad de registros locales en cada ventana = L Cantidad de registros comunes a las dos ventanas = C Cantidad de ventanas = W

La cantidad de registros disponibles para cada ventana se calcula de la manera siguiente

Tamantildeo de ventana = L + 2C + G

La cantidad total de registros necesarios en el procesador

Archivo de registros = (L + C) W + G

En el ejemplo de la figura 8-9 tenemos que G = 10 L = 10 C = 6 y W = 4 El tamantildeo de la ventana es 10 + 12 + 10 = 32 registros y el archivo de registros consta de (10 + 6) X 4 + 10 = 74 registros

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 35: Arquitectura Trabajo

RISC I de Berkeley

Uno de los primeros proyectos que pretendioacute mostrar las ventajas de la arquitectura RISC se mostroacute en la Universidad de California Berkeley La RISC J de Berkeley es una CPU de circuitos integrados de 32 bits Soporta direcciones de 32 bits y datos de 8 16 y 32 bits Tiene un formato de instruccioacuten de 32 bits y un total de 31 instrucciones Existen tres modos de direccionamiento baacutesico Direccionamiento de registros operando inmediato y direccionamiento relativo al PC para instrucciones de transferencia o brinco Tiene un archivo de registros de 138 registros en un arreglo de 10 registros globales y 8 ventanas de 32 registros cada una Los 32 registros en cada ventana tienen una organizacioacuten similar a la que se muestra en la figura 8-9 Como soacutelo se accesa un conjunto de 32 registros en una ventana en cualquier momento dado el formato de instruccioacuten puede especificar un registro de procesador con un campo de registros de 5 bits

La figura 8-10 muestra los formatos de instrucciones de 32 bits utilizados para instrucciones de registro a registro y de acceso a memoria Siete de los bits en el coacutedigo de operacioacuten especifican una operacioacuten y el octavo indica si se actualizan los bits de estado despueacutes de una operacioacuten ALU Para instrucciones de registro a registro el campo Rd de S bits selecciona uno de los 32 registros como destino para el resultado de la operacioacuten La operacioacuten se ejecuta con los datos especificados en los campos Rs y S2 Rs es uno de los registros fuente Si el bit 13 de la instruccioacuten es O los S bits de orden menor de S2 especifican otro registro fuente Si el bit 13 de la instruccioacuten es 1 S2 especifica una constante de 13 bits de signo extendido Por lo tanto la instruccioacuten tiene un formato de tres direcciones pero la segunda fuente puede ser un registro o un operando inmediato Las instrucciones de acceso a memoria utiliza Rs para especificar una direccioacuten de 32 bits en un registro y S2 para especificar un desplazamiento El registro RO contiene soacutelo nuacutemeros O por lo que puede utilizarse en cualqui1048608r campo para especificar una cantidad de cero El tercer formato de instruccioacuten combina los tres uacuteltimos campos para formar una direccioacuten relativa de diecinueve bits Y y se usa sobre todo con las instrucciones brincar y llamar El campo CONO sustituye el campo Rd para instrucciones de brinco y se utiliza para especuumlicar t1na de 16 condiciones de brinco posibles

Las 31 instrucciones de la RJSC I se listan en la tabla 8-12 Se han agrupado en tres categoriacuteas Las instrucciones de manipulacioacuten de datos ejecutan operaciones

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 36: Arquitectura Trabajo

aritmeacuteticas loacutegicas y de corrimiento Los siacutembolos bajo las columnas del coacutedigo de operacioacuten y operando se utilizan cuando se escriben programas de lenguaje ensamblador

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 37: Arquitectura Trabajo

Las columnas de transferencia de registros y descripcioacuten explican la instruccioacuten en notacioacuten de transferencia de registro y en palabras Noacutetese que todas las instrucciones tienen tres operandos La segunda fuente S2 puede ser un registro o un operando inmediato representado mediante el signo Por ejemplo consideremos la instruccioacuten ADD y coacutemo puede utilizarse para ejecutar diversas operaciones

ADD R22 R21 R23 R23 lt- R22 + R21

ADD R22 150 R23 R23 lt-R22 + 150

ADD ROR21R22 R22 lt-R21 (Mover)

ADD RC150R22 R 2 2 lt-150 Carga inmediata

ADD R221R22 R22 lt-R22 + 1 Incrementar

Al usar el registro RO el cual siempre contiene nuacutemeros O es posible transferir el contenido de un registw o de una constante dentro de otro registro La operacioacuten incrementar se realiza al sumar una constante 1 a un registro

Las instrucciones de transferencia de datos constan de seis instrucciones de carga tres instrucciones de almacenamiento y dos instrucciones que transfieren la palabra de estado del programa PSW El registro que contiene la PSW contiene el estado de la CPU e incluye el contador de programa los bits de estado de la ALU apuntadores usados ju1to con las ventanas de registro y otra informacioacuten que determina el estado de la CPU

Las instrucciones de cargar y almacenar mueven los datos entre un registro y una memoria Las instrucciones cargar acomodan datos con o sin signo de 8 bits (byte) o 16 bits (palabra corta) Las instrucciones de palabra larga operan en datos de 32 bits Aunque parece existir un modo de direccionamiento de registro maacutes desplazamiento en las instrucciones de transferencia de datos tambieacuten es posible el direccionamiento directo e indirecto por registros Los siguientes son ejemplos de coacutemo se cargan instrucciones largas con diferentes modos de direccionamiento

LDL (R22)150RS R5lt-M[R22] + 150

LDL (R22)0RS R5lt-M[R22]

LDL (RO)SOORS RSlt-M[500]

La direccioacuten efectiva en la primera instruccioacuten se evaluacutea a partir del contenido del registro R22 maacutes un desplazamiento de 150 La segunda instruccioacuten utiliza un desplazamiento O el cual lo reduce a un modo indirecto por registro La tercera instruccioacuten utiliza todos los nuacutemeros O del registro RO para producir un tipo de instruccioacuten de direccionamiento directo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 38: Arquitectura Trabajo

Las instrucciones de control de programa operan con el contador de programa PC para controlar la secuencia del programa Hay dos instruccio nes de brincar y dos instrucciones de llamada Una utiliza un direccionamiento iacutendice maacutes desplazamiento la segunda utiliza un modo relativo a PC con el valor Y de 19 bits como La direccioacuten relativa Las instrucciones llamar y retomar utilizan un registro de apuntador de ventana actual CWP (current window pointer) de 3 bits que apunta a la ventana de registros activa en ese momento Cada vez que el programa solicita un nuevo procedimiento CWP se decrementa en uno para apuntar a la ventana de registro de nivel inmediato inferior Despueacutes una instruccioacuten de retorno CWP se incrementa en uno para retornar a la ventana de registros previa

OPERACIONES

Existe una gran concordancia en los resultados de esta mezcla de lenguajes y aplicaciones Las sentencias de asignacioacuten predominan lo cual indica que el sencillo movimiento de datos tiene mucha importancia Tambieacuten predominan las sentencias condicionales (IF LOOP) Estas sentencias se implementan en el lenguaje maacutequina con alguna instruccioacuten del tipo comparar y saltar Esto indica que el mecanismo incluido en el repertorio de instrucciones para el control del secuenciamiento es importante

Estos resultados son instructivos para el disentildeador del repertorio de instrucciones maacutequina dicieacutendole queacute tipos de sentencias tienen lugar maacutes a menudo y por consiguiente deben ser imple- mentadas de una forma laquooacuteptimaraquo No obstante estos resultados no revelan queacute sentencias consumen maacutes tiempo en la ejecucioacuten de un programa tiacutepico Es decir dado un programa en lenguaje maacutequina compilado iquestqueacute sentencias del lenguaje fuente provocan la ejecucioacuten de la mayoriacutea de las instrucciones en lenguaje maacutequina

Para averiguar este fenoacutemeno subyacente los programas de Patterson [PATT82a] descritos en el apeacutendice 4A se compilaron en VAX PDP-11 y Motorola 68000 para determinar el nuacutemero medio de instrucciones maacutequina y referencias a memoria por cada tipo de sentencia La segunda y tercera columnas de la Tabla 132 muestran la frecuencia relativa de aparicioacuten de varias instrucciones de HLL en varios programas los datos se obtuvieron observando las apariciones en programas en ejecucioacuten en lugar de examinar solo el nuacutemero de veces que aparecen esas sentencias en el coacutedigo fuente Por tanto se trata de estadiacutesticas de frecuencia dinaacutemica Para obtener los datos de las columnas cuatro y cinco

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 39: Arquitectura Trabajo

(instrucciones maacutequina ponderadas) cada valor de la segunda y tercera columnas se multiplicoacute por el nuacutemero de instrucciones maacutequina generadas por el compilador Estos resultados estaacuten ademaacutes normalizados para que las columnas cuatro y cinco muestren la frecuencia relativa de aparicioacuten ponderada por el nuacutemero de instrucciones maacutequina por sentencia de HLL De un modo parecido la sexta y seacuteptima columnas se obtienen multiplicando la frecuencia de aparicioacuten de cada tipo de sentencia por el nuacutemero relativo de referencias a memoria originado por esa sentencia Los datos en las columnas de la cuatro a la siete proporcionan medidas sustitutivas del tiempo real empleado en la ejecucioacuten de varios tipos de sentencias Los resultados indican que la llamadaretomo de procedimientos es la operacioacuten que consume maacutes tiempo en los programas tiacutepicos escritos en HLL

Esta tabla indica la importancia relativa de varios tipos de sentencias de un HLL cuando ese HLL se compila para una arquitectura tiacutepica con un repertorio de instrucciones actual Posiblemente alguna otra arquitectura puede producir diferentes resultados Sin embargo este estudio proporciona resultados representativos de las arquitecturas contemporaacuteneas de repertorio complejo de instrucciones (CISC) De ahiacute que estos resultados puedan servir de orientacioacuten a quienes busquen formas maacutes eficientes de dar soporte a los HLL

OPERANDOS

El estudio de Patterson ya referenciado [PATT82a] tambieacuten consideroacute la frecuencia dinaacutemica de aparicioacuten de distintas clases de variables (Tabla 133) Los resultados coherentes para programas en Pascal y en C muestran que la mayoriacutea de las referencias se hacen a variables escalares simples Ademaacutes maacutes del ochenta por ciento de los datos escalares eran variables locales (al procedimiento) Asimismo las referencias a matricesestructuras requieren una referencia previa a su iacutendice o puntero que nuevamente suele ser un dato escalar local Por consiguiente hay un predominio de referencias a operandos escalares y estos estaacuten muy localizados

El estudio de Patterson examinoacute el comportamiento dinaacutemico de los programas escritos en HLL de manera independiente de la arquitectura subyacente Como se discutioacute antes es preciso analizar las arquitecturas reales para examinar el comportamiento del programa con mayor profundidad Un estudio [LUND77] examinoacute dinaacutemicamente las instrucciones del DEC-10 y encontroacute que cada instruccioacuten referencia en promedio 05 operandos de memoria y 14 registros En [HUCK83] se ofrecen resultados semejantes para programas en C Pascal y FORTRAN ejecutados en los computadores S370 PDP-11 y VAX Naturalmente estas cifras dependen mucho de la arquitectura y del compila-dor pero sirven para ilustrar la frecuencia de acceso a los operandos

Estos uacuteltimos estudios reflejan la importancia de una arquitectura que se preste a un raacutepido acceso a operandos dado que es una operacioacuten que se realiza con mucha

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 40: Arquitectura Trabajo

frecuencia El estudio de Patterson indica que un candidato fundamental a optimizar es el mecanismo de almacenamiento y acceso a variables escalares locales

LLAMADAS A PROCEDIMIENTOS

Hemos visto que las llamadas y retomos de procedimientos constituyen un aspecto importante de los programas en HLL Los datos (Tabla 132) indican que son las operaciones que consumen maacutes tiempo en programas en HLL compilados Asiacute seraacute ventajoso considerar formas de implementar estas operaciones eficientemente Hay dos aspectos importantes el nuacutemero de paraacutemetros y variables que maneja un procedimiento y la profundidad de anidamiento

El estudio de Tanenbaum [TANE78] encontroacute que al 98 por ciento de los procedimientos llamados dinaacutemicamente se les pasaban menos de seis argumentos y que el 92 por ciento de ellos usaban menos de seis variables escalares locales El equipo de RISC de Berkeley presentoacute resultados parecidos [KATE83] como se puede ver en la Tabla 134 Estos resultados muestran que el nuacutemero de palabras necesarias por cada activacioacuten de un procedimiento no es muy grande Los resultados expuestos ante-riormente indicaban que una gran proporcioacuten de referencias a operandos se haciacutea a variables locales escalares Estos estudios muestran que tales referencias se limitan de hecho a relativamente pocas variables

El mismo grupo de Berkeley tambieacuten estudioacute los patrones seguidos por las llamadas y retomos de procedimientos de programas en HLL Encontraron que es poco comuacuten tener una larga secuencia ininterrumpida de llamadas a procedimientos seguida por la secuencia correspondiente de retomos Vieron maacutes bien que un programa permanece confinado en una ventana bastante estrecha de profundidad de invocacioacuten a procedimientos Esto lo ilustroacute la Figura 416 que se discutioacute en el Capiacutetulo 4 Tales resultados refuerzan la conclusioacuten de que las referencias a operandos estaacuten muy localizadas

CONSECUENCIAS

Varios grupos han estudiado resultados como los que se acaban de exponer y han llegado a la conclusioacuten de que intentar realizar una arquitectura de repertorio de instrucciones cercana a los HLL no

Tabla 134 Argum entos de procedim ientos y variables locales escalares

es la estrategia de disentildeo maacutes efectiva En su lugar se puede ofrecer mejor soporte para los HLL optimizando las prestaciones de las caracteriacutesticas de los programas tiacutepicos en

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten

Page 41: Arquitectura Trabajo

HLL que maacutes tiempo consumen

Partiendo del trabajo de varios investigadores surgen tres elementos que por lo general caracterizan las arquitecturas RISC El primero de ellos consiste en usar un gran nuacutemero de registros o un compilador que optimice su tratamiento Su finalidad es optimizar las referencias a operandos Los estudios recieacuten discutidos muestran que hay varias referencias por instruccioacuten de HLL y que hay una alta proporcioacuten de sentencias de transferencia (asignacioacuten) Esto asociado con la localidad y el predominio de las referencias a datos escalares sugiere que las prestaciones pueden mejorarse reduciendo las referencias a memoria a costa de maacutes referencias a registros Debido a la localidad de estas referencias parece praacutectico un conjunto de registros ampliado

En segundo lugar hay que prestar una cuidadosa atencioacuten al disentildeo de los cauces de instrucciones Debido a la alta proporcioacuten de instrucciones de salto condicional y de llamada a procedimientos un cauce de instrucciones sencillo seraacute ineficiente Esto se pone de manifiesto como una gran proporcioacuten de instrucciones que se precaptan pero que nunca llegan a ejecutarse

Por uacuteltimo es recomendable un repertorio simplificado (reducido) de instrucciones Este punto no es tan obvio como los otros pero deberiacutea quedar maacutes claro tras la siguiente discusioacuten