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?
terminology
memory
cpu
register
Jeroen
fuente
fuente
Respuestas:
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í:
el compilador generaría un código de máquina que (cuando se desmonta) se ve así:
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).
fuente
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
fuente
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.
fuente
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.
fuente