La unidad mínima de información es el bit. Cualquier dispositivo que podamos mantener en dos estados diferentes contiene un bit de información: un switche apagado/encendido, un capacitor: descargado/cargado, un transistor: corte/saturación, un núcleo magnético: magnetizado sur / magnetizado norte, etc. Llamaremos, de forma general y abstracta, cero/uno a esos estados. En la práctica tratamos varios bits como un conjunto, una unidad mayor de información. Así con dos bits podemos distinguir cuatro estados diferentes: 00 / 01 / 10 / 11. Con cuatro bits, distinguimos 16 estados diferentes; esa unidad, o conjunto de bits, la llamamos nible. Una unidad universalmente usada es el conjunto de 8 bits, que llamamos byte. Otra unidad, a la que nos referiremos a menudo en este curso, es la palabra. La palabra puede ser de 16, 24, 32, 48, 64 o más bits. El tamaño de la palabra es variable según la arquitectura y se refiere al número de bits que viajan en paralelo entre las diferentes unidades del computador, por ejemplo entre la memoria y el CPU. Las vías por donde viaja la información las llamamos buses. No basta sin embargo los buses para interconectar las diferentes unidades, se precisa de los registros, estos son dispositivos con capacidad para almacenar una palabra de información. Los registros sostienen la información al menos por el tiempo necesario para que se estabilice los valores que vamos a alimentar, sea a la memoria, a la UAL, o a otra unidad del computador. Algunos registros guardan información por tiempos mayores y pueden servir para pasar información entre una instrucción y otra (information carry over).
Los pricipales registros, casi invariablemente encontrados en cualquier computador son los siguientes: Registro de Dirección y Registro de Contenido, ubicados en la unidad de memoria, que consideraremos en detalle en lecciones siguientes. Registro de Instrucción y Apuntador de Programa, ubicados en el CPU. Operando1, Operando2 y Resultado, en la UAL. En los dispositivos de entrada y salida encontramos registros, usualmente de 8 bits, conocidos como puertos.
Aparte de esos registros básicos podemos encontrar: Registro de estado (status) donde cada bit indica el particular estado de alguna unidad o de la última operación realizada (veremos los detalles en la lección sobre repertorio de instrucciones) . Registro Acumulador, donde se mantiene el resultado acumulado de operaciones realizadas por la UAL; registros para direccionamiento, como el Registro Índice y Registros de Segmento (que estudiaremos en la lección sobre modos de direccionamiento). Finalmente, y sobre todo en las arquitecturas más recientes, se suele encontrar grupos de registros de propósito general (acumuladores, scratch pad, de direccionamiento) agrupados en lo que se denomina banco de registros. Estos bancos de registros son similares a una memoria, en cuanto que tienen registro de dirección, para seleccionar el particular registro que deseamos accesar, y registro de contenido, para recibir la información grabada (lectura), o grabar una nueva información (escritura), en el registro seleccionado. A diferencia de la memoria, estos bancos de registros son de pequeño tamaño, típicamente unos 16 o 32 registros y no los miles o millones de celdas que hay en una memoria. Así, el registro de dirección de un banco de registros de 32 registros será de 5 bits, mientras su registro de contenido será del tamaño que corresponda a la palabra usada en esa arquitectura, por ejemplo 32 o 64 bits. Por supuesto el acceso al banco de registros es órdenes de magnitud más rápido que el acceso a una gran memoria. Adicionalmente, para hacer aún más rápido y flexible el banco de registros, éstos pueden tener dos puertos, es decir dos registros de dirección y dos de contenidos, uno dedicado a las lecturas y otro a las escrituras, de ese modo puede escribirse en un registro mientras al mismo tiempo se puede leer otro.
Desde el punto de vista de la programación, un banco de registros de propósito general se emplea para mantener allí las variables más repetidamente utilizadas por el programa en un momento dado, ahorrando así gran cantidad de accesos a la memoria. Un ejemplo notable de utilizacioón del BR sería en algoritmos como el método de Newton para calcular raiz cuadrada por aproximaciones sucesivas. Todo el algoritmo, que puede implicar centenares de cálculos, se ejecuta con sólo dos accesos a memoria: uno al inicio para cargar en algún registro del BR el radicando y otro al final para devolver a memoria el resultado, la raíz. Todos los cálculos intermedios avanzan a gran velocidad utilizando únicamente registros. Para hacer un uso así de eficiente del BR se precisa de una programación a bajo nivel (assembler), pero en la práctica la gente programa en alto nivel, de modo que se depende de la sofisticación de los compiladores para que generen un código que realmente aproveche el BR.
Más adelnte, cuando estudiemos multiprogramación, encontraremos que existe cierto precio o penalización por el uso de BR.
-
01 – Introducción
-
02 – Partes del Computador
-
03 – Memoria
-
04 – Registros
-
05 – Funcionamiento del Computador
-
06 – Formato de Instrucción
-
07 – Modos de Direccionamiento
-
08 – Repertorio de Instrucciones
-
09 – Trayectorias de Datos
-
10 – Entrada y Salida
-
11 – Velocidad de Procesamiento y Capacidad de Memoria
-
12 – Interrupciones
-
13 – Organización Tubular
-
14 – Memoria Cache
-
15 – Memoria Virtual
-
16 – Multiprocesadores
-
Post Template