11
Registros Visibles para el Usuario Un computador emplea una jerarquía de memoria. En los niveles más altos de la jerarquía, la memoria es más rápida, más pequeña y más cara (por bit). Dentro del procesador hay un conjunto de registros que funciona como un nivel de memoria por encima de la memoria principal y de la caché en la jerarquía. Los registros del procesador son de dos tipos: Registros visibles por el usuario: permiten al programador de lenguaje máquina o de ensamblador minimizar las referencias a memoria principal por medio de la optimización del uso de registros. Registros de control y de estado: son utilizados por la unidad de control para controlar el funcionamiento del procesador y por programas privilegiados del sistema operativo para controlar la ejecución de programas. No hay una separación bien definida de registros dentro de estas dos categorías. Por ejemplo, en algunas máquinas el contador de programa es visible por el usuario (por ejemplo, en el Pentium), pero en muchas no lo es. Para el objetivo de la siguiente discusión, no obstante, usaremos estas categorías. REGISTROS VISIBLES POR EL USUARIO Un registro visible por el usuario es aquél que puede ser referenciado por medio del lenguaje máquina que ejecuta el procesador. Podemos clasificarlos en las siguientes categorías: Uso general Datos Direcciones Códigos de condición

Registros Visibles para el Usuario

Embed Size (px)

Citation preview

Registros Visibles parael Usuario

Un computador emplea una jerarquía de memoria. En los nivelesmás altos de la jerarquía, la memoria es más rápida, más pequeña ymás cara (por bit). Dentro del procesador hay un conjunto deregistros que funciona como un nivel de memoria por encima de lamemoria principal y de la caché en la jerarquía. Los registros delprocesador son de dos tipos:

Registros visibles por el usuario: permiten al programador delenguaje máquina o de ensamblador minimizar las referencias amemoria principal por medio de la optimización del uso deregistros.

Registros de control y de estado: son utilizados por launidad de control para controlar el funcionamiento del procesadory por programas privilegiados del sistema operativo para controlarla ejecución de programas.

No hay una separación bien definida de registros dentro deestas dos categorías. Por ejemplo, en algunas máquinas el contadorde programa es visible por el usuario (por ejemplo, en elPentium), pero en muchas no lo es. Para el objetivo de lasiguiente discusión, no obstante, usaremos estas categorías.

REGISTROS VISIBLES POR EL USUARIO

Un registro visible por el usuario es aquél que puede serreferenciado por medio del lenguaje máquina que ejecuta elprocesador. Podemos clasificarlos en las siguientes categorías:

Uso general Datos Direcciones Códigos de condición

Los registros de uso general pueden ser asignados por elprogramador a diversas funciones. A veces, su uso dentro delrepertorio de instrucciones es ortogonal a la operación. Es decir,cualquier registro de uso general puede contener el operando paracualquier código de operación. Esto proporciona una utilización deregistros de uso general auténtico. Con frecuencia, sin embargo,existen restricciones.

Por ejemplo, puede haber registros específicos paraoperaciones en coma flotante y para operaciones con la pila.

En algunos casos los registros de uso general puedenutilizarse para funciones de direccionamiento (por ejemplo, endireccionamientos indirectos por medio de registro o condesplazamiento).

En otros casos hay una separación parcial o total entreregistros de datos y registros de direcciones.

Los registros de datos pueden usarse únicamente para contenerdatos y no se pueden emplear en el cálculo de la dirección de unoperando. Los registros de dirección pueden ser de uso más O menosgeneral, o pueden estar dedicados a un modo de direccionamientoparticular. Entre otros, se pueden citar los siguientes ejemplos:

Punteros de segmento: en una máquina condireccionamiento segmentado un registro de segmentocontiene la dirección de la base del segmento. Puedehaber múltiples registros: por ejemplo uno para elsistema operativo y otro para el proceso actual.

Registros índice: se usan para direccionamiento indexadoy pueden ser autoindexados.

Puntero de pila: si existe direccionamiento a pilavisible por el usuario, normalmente hay un registrodedicado que apunta a la cabecera de ésta. Ello permiteun direccionamiento implícito; es decir, apilar (push),desapilar (pop) y otras instrucciones de la pila nonecesitan contener un operando explícito referente aella.

Hay varias cuestiones de diseño a tratar en este punto. Unimportante asunto es decidir si utilizar registros de usocompletamente general o si especializar su uso. Con el uso deregistros especializados, generalmente puede quedar implícito enel código de operación a qué tipo de registro se refiere undeterminado campo de operando. El campo de operando solo tiene queidentificar un registro de un conjunto de registros especializadosen lugar de uno de entre todos los registros, lo cual ahorra bits.Por otra parte, esta especialización limita la flexibilidad delprogramador.

Otro problema de diseño es el número de registros, de usogeneral o de datos más direcciones, que tienen que incluirse. Denuevo, ello afecta al diseño del repertorio de instrucciones, yaque si hay más registros se necesitan más bits para el campo deoperando. Como discutimos anteriormente, parece óptimo disponer deun número de registros entre 8 y 32 [LUND77]. Menos registros setraducen en más referencias a memoria; más registros no reducensignificativamente las referencias a memoria (véase, por ejemplo[WILL90]). No obstante, existe una nueva aproximación, que sacapartido al uso de cientos de registros, utilizada en algunossistemas RISC y estudiada en el Capítulo 13.

Por último, está la cuestión del tamaño de los registros. Losregistros que han de contener direcciones deben ser losuficientemente grandes como para albergar la dirección mayor. Losregistros de datos deben ser capaces de contener valores de lamayoría de tipos de datos. Algunas máquinas permiten que dosregistros contiguos sean usados como uno solo para contenervalores de tamaño doble.

Una última categoría de registros, que es al menosparcialmente visible por el usuario, contiene códigos de condición(también llamados indicadores o «flags» l. Los códigos decondición son bits fijados por el hardware del procesador comoresultado de alguna operación. Por ejemplo, una operaciónaritmética puede producir un resultado positivo, negativo, nulo ocon desbordamiento. Además de almacenarse el propio resultado en

un registro o en la memoria, se obtiene también un código decondición.

El código puede ser examinado con posterioridad como parte deuna operación de salto condicional.

Los bits de códigos de condición se agrupan en uno o másregistros. Normalmente forman parte de un registro de control. Porlo general, las instrucciones máquina permiten que estos bits seanleídos por referencia implícita, pero el programador no puedealterarlos.

Muchos procesadores, incluyendo los basados en laarquitectura lA-64 y los procesadores MIPS, no usan códigos decondición en absoluto. En lugar de ello, las instrucciones desalto condicional especifican una comparación que debe hacerse yactúan de acuerdo con el resultado de la comparación, sinalmacenar ningún código de condición. La Tabla 12.1, basada en[DER087], enumera las principales ventajas e inconvenientes de loscódigos de condición.

En algunas máquinas, una llamada a una subrutina hará que seguarden automáticamente todos los registros visibles por elusuario, que serán restablecidos en el retomo de la subrutina. Elprocesador lleva a cabo las operaciones de guardar y restablecerlos registros como parte de la ejecución de las instrucciones dellamada y retomo. Ello permite a cada subrutina usar los registrosvisibles por el usuario de manera independiente. En otrasmáquinas, es responsabilidad del programador guardar loscontenidos de los registros visibles por el programador que seanrelevantes antes de la llamada a la subrutina, incluyendo en elprograma instrucciones para este fin.

Registros de Control y deEstados

Hay diversos registros del procesador que se emplean paracontrolar su funcionamiento. La mayoría de ellos, en la mayorparte de las máquinas, no son visibles por el usuario. Algunos deellos pueden ser visibles por ciertas instrucciones máquinaejecutadas en un modo de controlo de sistema operativo.

Naturalmente, máquinas diferentes tendrán distintasorganizaciones de registros y usarán distinta terminología. Acontinuación se presenta una lista razonablemente completa detipos de registros, con una breve descripción.

Son esenciales cuatro registros para la ejecución de unainstrucción:

Contador de programa (Program Counter, PC): contiene ladirección de la instrucción a captar.

Registro de instrucción (lnstruction Register, IR):contiene la instrucción captada más recientemente.

Registro de dirección de memoria (Memory AddressRegister, MAR): contiene la dirección de una posición dememoria.

Registro intermedio de memoria (Memory Buffer Register,MBR): contiene la palabra de datos a escribir en memoriao la palabra leída más recientemente.

No todos los procesadores tienen registros internosdesignados como MAR y MBR, pero es necesario algún mecanismo dealmacenamiento intermedio equivalente mediante el cual se désalida a los bits que van a ser transferidos al bus del sistema yse almacenen temporalmente los bits leídos del bus de datos.

Típicamente, el procesador actualiza PC después de cadacaptación de instrucción de manera que siempre apunta a lasiguiente instrucción a ejecutar. Una instrucción de bifurcación o

salto también modificará el contenido de PC. La instruccióncaptada se carga en IR, donde son analizados el código deoperación y los campos de operando. Se intercambian datos con lamemoria por medio de MAR y de MBR. En un sistema con organizaciónde bus, MAR se conecta directamente al bus de direcciones, y MBRdirectamente al bus de datos. Los registros visibles por elusuario repetidamente intercambian datos con MBR.

Los cuatro registros que se acaban de mencionar se usan parala transferencia de datos entre el procesador y la memoria. Dentrodel procesador, los datos tienen que ofrecerse a la ALU para suprocesamiento.

La ALU puede tener acceso directo a MBR y a los registrosvisibles por el usuario. Como alternativa, puede haber registrosintennedios adicionales en tomo a la ALU; estos registros sirvencomo registros de entrada y salida de la ALU e intercambian datoscon MBR y los registros visibles por el usuario.

Muchos diseños de procesadores incluyen un registro o unconjunto de registros, conocidos a menudo como palabra de estadodel programa (PSW, program status worá), que contiene informaciónde estado. PSW contiene típicamente códigos de condición además deotra información de estado.

Entre los campos o indicadores comunes se incluyen lossiguientes:

Signo: contiene el bit de signo del resultado de laúltima operación aritmética.

Cero: puesto a uno cuando el resultado es O. Acarreo: puesto a uno si una operación da lugar a un

acarreo (en la suma) o adeudo (en la resta) del bit mássignificativo. Se usa en operaciones aritméticasmultipalabra.

Igual: puesto a uno si el resultado de una comparaciónlógica es la igualdad.

Desbordamiento: usado para indicar un desbordamientoaritmético.

Interrupciones habilitadas/inhabilitadas: usado parapermitir o inhabilitar interrupciones.

Supervisor: indica si el procesador funciona en modossupervisor o usuario. Únicamente en modo supervisor sepueden ejecutar ciertas instrucciones privilegiadas y sepuede acceder a ciertas áreas de memoria.

En algún diseño concreto de procesador es posible encontrarotros registros relativos a estado y control. Puede existir unpuntero a un bloque de memoria que contenga información de estadoadicional (por ejemplo, bloques de control de procesos). En lasmáquinas que usan interrupciones vectorizadas puede existir unregistro de vector de interrupción. Si se utiliza una pila parallevar a cabo ciertas funciones (por ejemplo, llamada asubrutina), se necesita un puntero de pila del sistema. En unsistema de memoria virtual se usa un puntero a la tabla depáginas. Por último, pueden emplearse registros para el control deoperaciones de E/S.

En el diseño de la organización de los registros de control yestado entran en juego varios factores.

Una cuestión primordial es el soporte del sistema operativo.Algunos tipos de información de control son de utilidad específicapara el sistema operativo. Si el diseñador del procesador poseeuna comprensión funcional del sistema operativo que se va autilizar, la organización de los registros puede adaptarse hastacierto punto a ese sistema operativo.

Otra decisión importante en el diseño es la distribución deinformación de control entre registros y memoria. Es frecuentededicar los primeros (más bajos) pocos cientos o miles de palabrasde memoria para fines de control. El diseñador debe decidir cuántainformación de control debiera estar en registros y cuánta enmemoria. Se presenta el compromiso habitual entre coste yvelocidad.

Ejemplos de organizaciónde registros de CPU reales

Resulta instructivo examinar y comparar las organizaciones deregistros de sistemas análogos. En esta sección, examinamos dosmicroprocesadores de 16 bits que fueron diseñados aproximadamenteal mismo tiempo: el Motorola MC68000 [STRI79] y el lotel 8086[MORS78]. Las Figuras 12.3a y b representan la organización deregistros de cada uno de ellos; los registros estrictamenteinternos, tales como el registro de dirección de memoria, no semuestran.

El MC68000 distribuye sus registros de 32 bits en ocho dedatos y nueve de direcciones. Los ocho registros de datos se usanprincipalmente para manipulación de datos y también se usan endireccionamiento como registros índice. El ancho de los registrospermite operaciones con datos de 8, 16 Y 32 bits, según determineel código de operación. Los registros de direcciones contienendirecciones de 32 bits (no hay segmentación); dos de estosregistros se usan también como punteros de pila, uno para losusuarios y el otro para el sistema operativo, dependiendo del modode ejecución en curso. Los dos registros se referencian como 7,dado que solo uno de ellos puede usarse en un instante dado. ElMC68000 también incluye un contador de programa de 32 bits y unregistro de estado de 16 bits. El equipo de Motorola quiso unrepertorio de instrucciones muy regular, sin registros de usoespecial.

Su interés por la eficiencia del código los condujo a dividirlos registros en dos componentes funcionales, ahorrando un bit encada campo de especificación de registro. Parece un compromisorazonable entre generalidad total y compacidad del código.

El Intel 8086 usa un enfoque diferente para la organizaciónde los registros. Cada uno de los registros tiene un uso especial,aunque algunos registros se pueden emplear también para un uso

general. El 8086 contiene cuatro registros de datos de 16 bits queson direccionables como registros de bytes o como registros de 16bits, y cuatro registros punteros e índices de 16 bits. Losregistros de datos pueden utilizarse como de uso general enalgunas instrucciones. En otras, los registros se usanimplícitamente. Por ejemplo, una instrucción de multiplicaciónsiempre usa el acumulador. Los cuatro registros punteros se usantambién implícitamente en algunas operaciones; cada uno contieneun desplazamiento dentro de un segmento. Hay también cuatroregistros de segmento de 16 bits. Tres de los cuatro registros desegmento se usan de una forma dedicada e implícita para apuntar alsegmento de la instrucción en curso (útil para instrucciones desalto), a un segmento que contenga datos, y a un segmento quecontenga una pila, respectivamente. Estos usos dedicados eimplícitos proporciona una codificación compacta con el coste deuna flexibilidad reducida. El 8086 incluye también un puntero deinstrucciones y un conjunto de indicadores de un bit de estado yde control.

Debe quedar claro qué es lo significativo de estacomparación. No hay, por el momento, una filosofía universalmenteaceptada sobre la mejor forma de organizar los registros delprocesador [TOON81). Igual que ocurre en el diseño global delrepertorio de instrucciones y en algunos de los aspectos deldiseño del procesador, se trata más bien de una cuestión deopinión y de gustos.

En la Figura 12.3c se ilustra un segundo aspecto instructivoacerca del diseño de la organización de los registros. Esta figuramuestra la organización de los registros visibles por el usuarioen el Intel 80386 [ELAY85), un microprocesador de 32 bits diseñadocomo una ampliación del 8086'. El 80386 usa registros de 32 bits.No obstante, para proporcionar compatibilidad ascendente para losprogramas escritos en la primera máquina, el 80386 conserva laorganización de registros original integrada en la nuevaorganización. Dada esta restricción en el diseño, los arquitectosde los procesadores de 32 bits han limitado la flexibilidad aldiseñar la organización de los registros.