Introducción:
en una computadora, todas las instrucciones y datos se almacenan en la memoria principal o primaria. Durante la ejecución, tienen que ser transferidos a la unidad de procesamiento, también conocida como CPU, donde se realizan las operaciones, dependiendo de la instrucción y si hay algún resultado, se envía de vuelta a la memoria. Pero, ¿dónde se almacenan estas instrucciones y datos dentro de la CPU durante la ejecución? La respuesta es un Registro.
Un registro es una unidad de hardware que actúa como un área de almacenamiento a la que el procesador de la computadora puede acceder rápidamente. Almacenan principalmente la dirección de una instrucción, la instrucción en sí, los operandos, así como el resultado de una operación, que luego puede cargarse en la memoria. Las variables que se utilizan en los lenguajes de programación de alto nivel se almacenan en los registros, o más bien se asignan a un registro particular durante la ejecución del programa.
En un lenguaje de programación, puede haber una serie de variables en uso, que deben almacenarse en registros para un acceso más rápido, lo que hace que el programa se ejecute rápidamente. Es trabajo del compilador decidir cómo asignar variables a los registros. No todas las variables están asignadas a un registro, sino sólo las que están en uso.
Problemas sin derramar:
ahora aquí surgen dos problemas:
- En una computadora, la cantidad de registros es limitada, ya que son unidades de hardware, por lo que es imposible aumentar o disminuir la cantidad de registros una vez que se fabrica el chip.
- No se puede asignar espacio a dos o más variables en el mismo registro a la vez.
La característica de un procesador ideal es ejecutar un número creciente de instrucciones por ciclo. Por lo tanto, se requiere más espacio para almacenar las variables y realizar operaciones sobre ellas. Como se mencionó, el espacio de registro es limitado. Esto conduce a fallas en la asignación de registros. Por lo tanto, es trabajo del compilador hacer uso del registro y del espacio de memoria.
Si no hay suficientes registros para contener las variables. luego, algunas variables se mueven a la memoria principal, para hacer espacio para la variable que requiere un registro. Esto se conoce como un derrame de registro.
¿Qué es derramar?
Hablando formalmente, el derrame es una técnica en la que una variable se mueve desde un espacio de registro a la memoria principal (la RAM) para hacer espacio para otras variables, que se utilizarán en el programa que se está ejecutando actualmente.
¿Por qué derramar?
El derrame se realiza para satisfacer las siguientes condiciones:
- Evite fallas en la asignación de registros:
esto sucede cuando hay un número limitado de registros para contener las variables en vivo, por lo tanto, se intercambian entre el registro y la memoria. - Paso de parámetros en la función:
los parámetros son argumentos que se pasan a una función. Cuando no se pueden pasar a registros, se almacenan en ubicaciones de memoria. - Asignaciones dinámicas:
un programador puede necesitar agregar nombres, que se generan durante el tiempo de ejecución. Como los registros tienen nombres estáticos, el compilador se basa en la memoria para la generación dinámica de nombres.
Existe un cuarto problema, durante las llamadas a funciones. El cuerpo de la función llamada accede a todo el conjunto de registros, por lo que se produce una serie de guardados y restauraciones. Para superar la sobrecarga, se hacen referencias a la memoria, lo que es posible mediante el uso de derrames.
Ventaja de Derramar –
Tiene pocas ventajas, son –
- La mayor ventaja es un aumento en el rendimiento del hardware.
- El tiempo de acceso es inferior al de un caché (para pequeños derrames).
Ejemplo:
comprendamos todo el proceso con la ayuda de un ejemplo. Considere una expresión simple:
R = (A+B)*(C+D)
La instrucción One Address correspondiente es la siguiente:-
1. LOAD A // ACC = M[A] 2. ADD B // ACC = ACC + M[B] 3. STORE T // M[T] = ACC 4. LOAD C // ACC = M[C] 5. ADD D // ACC = ACC + M[D] 6. MUL T // ACC = ACC * M[T] 7. STORE R // M[R] = ACC
En este ejemplo, en la instrucción número 3, el valor almacenado en el acumulador se mueve a la memoria y se almacena allí para hacer espacio para nuevas variables. Este es un ejemplo de derrame.
Publicación traducida automáticamente
Artículo escrito por duttabhishek0 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA