¿Qué son los registros de la CPU?

27

Esta pregunta me ha estado molestando por algún tiempo y hoy pensé que lo buscaría en Google. He leído algunas cosas al respecto y me pareció muy similar a lo que siempre he conocido como caché del procesador .

¿Hay alguna diferencia entre los dos o tengo razón cuando creo que son iguales? ¿Es necesario que un registro esté dentro de una CPU para que funcione?

Según Wikipedia, un registro es un lugar en la CPU donde se puede acceder y modificar rápidamente la memoria antes de enviarla de vuelta a la RAM. ¿Entendí esto mal o el caché y el registro son realmente iguales?

Jeroen
fuente
13
Un registro de CPU es una organización que realiza un seguimiento de su CPU por usted. La NSA es un ejemplo de un registro de CPU.
Jimmy Hoffa
3
El caché de nivel 1 de CPU a menudo está hecho del mismo tipo de material de silicio que los registros. No es tan rápido porque necesita búsquedas adicionales para asociar direcciones almacenadas en caché con ubicaciones de caché. Pero los registros y el caché son definitivamente lugares diferentes en los chips.
Zan Lynx
3
@JimmyHoffa: Me temo que su comentario será muy confuso para OP, en detrimento del conocimiento de la informática.
rwong
3
@rwong Nah Lo entendí, pensé que era bastante divertido. : P
Jeroen
1
Y otra diferencia es el tamaño: un archivo de registro rara vez es más grande que un par de cientos de palabras, mientras que el caché L1 puede ser fácilmente tan grande como 64k.
SK-logic

Respuestas:

61

No son exactamente lo mismo. Los registros son los lugares donde se encuentran los valores en los que la CPU está trabajando realmente. El diseño de la CPU es tal que solo puede modificar o actuar sobre un valor cuando está en un registro. Por lo tanto, los registros pueden funcionar con lógica, mientras que la memoria (incluida la memoria caché) solo puede contener valores de los que la CPU lee y escribe.

Imagina un carpintero en el trabajo. Tiene algunos elementos en sus manos (registros) y luego, muy cerca en su banco de trabajo (caché) cosas en las que está trabajando con frecuencia, pero que no usa en este momento, y luego en el taller (memoria principal) cosas que pertenecen a el proyecto en cuestión pero que no son lo suficientemente importantes como para estar en el banco de trabajo.

EDITAR: Aquí hay una explicación simple de cómo funciona la lógica de registro.

Imaginemos que tenemos cuatro registros llamados R1..R4. Si compila una declaración que se ve así:

x = y + z * 3;

el compilador generaría un código de máquina que (cuando se desmonta) se ve así:

LOAD  R1, ADDRESS_Z //move the value of Z into register 1
MUL   R1, 3         //multiply the value of register 1 by 3
LOAD  R2, ADDRESS_Y //move the value of Y into register 2
ADD   R1, R2        //adds the value in R2 to the value in R1
STORE R1, ADDRESS_X //move the value of register 1 into X

Dado que la mayoría de las CPU modernas tienen registros de 32 o 64 bits de ancho, pueden hacer cálculos matemáticos en cualquier valor hasta el tamaño que pueden contener. No necesitan registros especiales para valores más pequeños; solo usan instrucciones especiales de ASM que le indican que solo use parte del registro. Y, al igual que el carpintero con solo dos manos, los registros solo pueden contener una pequeña cantidad de datos a la vez, pero pueden reutilizarse, pasando datos activos dentro y fuera de ellos, lo que significa que "muchos registros" no terminar siendo necesario. (Tener un lote disponible permite a los compiladores generar código más rápido, por supuesto, pero no es estrictamente necesario).

Mason Wheeler
fuente
26
Y más cosas en el almacén de la ciudad (disco) y otras cosas que puede tener Fedex'd en (red) :-)
Dan Pichelman
2
Depende en gran medida de la arquitectura del sistema en cuestión.
Ingeniero mundial
55
@Binero en un procesador x86 de 16 bits tiene registros llamados Ax, Bx, etc. Cuando se trasladaron a procesadores de 32 bits, extendieron los registros a EAx, EBx de 32 bits, si accede a Ax obtiene los 16 bits de EAx bajos. En el modo de 64 bits, nombraron los registros RAx, siendo los 32 bits inferiores EAx y los 16 bits inferiores siendo Ax. revise estos diagramas para ver cómo llega a otras partes de bytes como AH para obtener el byte alto del registro Ax de 16 bits: en.wikipedia.org/wiki/X86#Structure
stonemetal
2
Y en las CPU modernas, esto también se descompone, debido a que los registros son simplemente asignaciones temporales a un banco interno de Memoria Realmente Rápida, que cambia según el flujo de instrucciones y qué tan cerca está siguiendo el flujo de instrucciones pronosticado.
Vatine
2
@MasonWheeler Una buena elección de tu parte.
Vatine
3

En realidad, un registro en la terminología de la CPU es una pequeña porción de memoria con nombre Disponible dentro de un microprocesador (CPU), los registros tienen nombres, tamaños y funciones específicos que varían de un procesador a otro, por ejemplo, si el microprocesador 8085 es un procesador de 8 bits que tiene 8 -bit Registros (A: Acumulador, B, C, D, E, H y L Los registros y un registro de bandera son todos de 8 bits). Dos registros de 16 bits PC y SP tienen funciones especiales y las funciones entran en escena durante la programación del ensamblaje. El control de pocos registros está más allá del programador.

Si toma otro procesador, los registros variarán, digamos que 8086 es un procesador de 16 bits y tiene AX, BX, CX y DX, todos son registros de 16 bits, PC, SP y bandera.

como usted citó en la pregunta, ellos deben acelerar la ejecución del programa y actuar como caché del procesador, pero ahora la arquitectura del procesador cambió y ellos (Intel) agregaron mucha memoria al procesador de llamadas

pero existe una ligera diferencia entre el caché del procesador (CPU) y los registros del procesador (CPU), registros realmente necesarios para algunas actividades especiales como el puntero de memoria, el estado del programa, etc. SP: puntero de pila que actúa como puntero de memoria en la memoria de pila y el acumulador es el búfer y el registro principal para acceder a ALU para operaciones aritméticas ...

Puedes ver la explicación de Mason Wheeler para ejemplos

Mohan PAKALAPATI
fuente
1

Creo que ayuda pensar que los Registros no son memoria y no deberían considerarse como tales.

Piense más como OO: el registro es una clase, no derivada de la memoria y la memoria es una clase no derivada del registro, pero la clase de registro tiene métodos (códigos de operación de máquina) para convertir sus datos hacia y desde la memoria. La memoria, por otro lado, no sabe nada acerca de los registros y no puede invocar acciones sobre ellos. Como resultado, todas las operaciones de la CPU son realizadas por registros, que a menudo acceden a la memoria.

No es raro ver registros de solo escritura, apenas un atributo de la memoria. También es posible que un valor de registro cambie sin escribir en él, de nuevo, no el comportamiento que espera de la memoria.

Mattnz
fuente
En la E / S mapeada en memoria, las regiones de "memoria" de solo escritura no son tan infrecuentes.
SK-logic
@ SK-logic - Correcto - sin embargo, el contexto de la pregunta formulada claramente el OP piensa en la memoria como algo de lo que lees y escribes. No hay necesidad de confundirlo más :)
mattnz
0

La respuesta proporcionada por @Mason Wheeler fue precisa, pero creo que es posible poner su pregunta bajo otra perspectiva. A juzgar por su pregunta, me parece que el concepto que necesita para comprender perfectamente la diferencia entre un caché y un registro es la ruta de datos . Como Mason señaló correctamente, la lógica de la CPU (es decir, su ruta de datos) está diseñada de tal manera que la información de la memoria no puede ser tratada directamente por la CPU y es por eso que existen los registros. De hecho, la CPU ni siquiera es capaz de decodificar la instrucción actual del programa que está ejecutando si esa instrucción no se cargó primero en el registro adecuado (generalmente el denominado IR, "Registro de instrucciones").

Esto está relacionado con la forma en que está conectada la CPU. No hay una ruta física entre la memoria y la ALU; Todos los datos suministrados a la ALU deben almacenarse de alguna manera en algún registro. Podría ser diferente, pero los circuitos necesarios para conectar la memoria directamente a la ALU serían demasiado complejos: es más fácil y más eficiente mediar en todas las comunicaciones entre la memoria y la ALU a través del archivo de registro , según lo determinado por la ruta de datos mencionada anteriormente . De hecho, incluso cuando una instrucción dada especifica una posición de memoria como un operando (un modo de direccionamiento conocido como direccionamiento directo ), la unidad de datos correspondiente se carga en un registro conocido como MBR (Memory Buffer Register, a veces llamado MDR, Memory Data Buffer) )

Tenga en cuenta que desde el punto de vista de la CPU, realmente no importa si la información (datos o código) proviene de la memoria principal o el caché, pero este último es mucho más rápido. Las memorias caché existen por razones de rendimiento, los registros existen debido al diseño de la CPU (es decir, debido a la ruta de datos). Los programadores inteligentes (compiladores inteligentes, en realidad) intentan maximizar el uso de registros para minimizar los accesos a la memoria (los registros son más rápidos que la memoria caché o la memoria). Esto es justificable porque la información almacenada en los registros tiende a usarse varias veces y, de hecho, este es uno de los principios de la filosofía RISC.

Humberto Fioravante Ferro
fuente