stringtranslate.com

Ventana de registro

Ejemplo de un sistema de ventanas de registro de 4 ventanas.

En ingeniería informática , las ventanas de registro son una característica que dedica registros a una subrutina asignando alias dinámicamente un subconjunto de registros internos a registros fijos visibles para el programador. Las ventanas de registro se implementan para mejorar el rendimiento de un procesador al reducir la cantidad de operaciones de pila requeridas para llamadas y retornos de funciones. Una de las características más influyentes del diseño RISC de Berkeley , posteriormente se implementaron en arquitecturas de conjuntos de instrucciones como AMD Am29000 , Intel i960 , Sun Microsystems SPARC e Intel Itanium .

Operación general

Se proporcionan varios conjuntos de registros para las diferentes partes del programa. Los registros se ocultan deliberadamente al programador para obligar a varias subrutinas a compartir recursos del procesador.

Hacer que los registros sean invisibles se puede implementar de manera eficiente; la CPU reconoce el movimiento de una parte del programa a otra durante una llamada a un procedimiento. Se logra mediante una de un pequeño número de instrucciones ( prólogo ) y termina con una de un conjunto igualmente pequeño ( epílogo ) . En el diseño de Berkeley, estas llamadas provocarían que un nuevo conjunto de registros se "intercambiara" en ese punto, o se marcara como "inactivo" (o "reutilizable") cuando finalice la llamada.

Aplicación en CPU

En el diseño RISC de Berkeley, sólo ocho registros de un total de 64 son visibles para los programas. El conjunto completo de registros se conoce como archivo de registro , y cualquier conjunto particular de ocho como ventana . El archivo permite que hasta ocho llamadas a procedimientos tengan sus propios conjuntos de registros. Siempre y cuando el programa no invoque cadenas de más de ocho llamadas de profundidad, los registros nunca tendrán que ser desbordados , es decir, guardados en la memoria principal o caché, lo cual es un proceso lento en comparación con el acceso a los registros.

En comparación, la arquitectura SPARC de Sun Microsystems proporciona visibilidad simultánea en cuatro conjuntos de ocho registros cada uno. Tres conjuntos de ocho registros cada uno tienen "ventanas". Ocho registros (i0 a i7) forman los registros de entrada al nivel de procedimiento actual. Ocho registros (L0 a L7) son locales para el nivel de procedimiento actual, y ocho registros (o0 a o7) son las salidas del nivel de procedimiento actual al siguiente nivel llamado. Cuando se llama a un procedimiento, la ventana de registro cambia dieciséis registros, ocultando los registros de entrada antiguos y los registros locales antiguos y convirtiendo los registros de salida antiguos en los nuevos registros de entrada. Los registros comunes (registros de salida antiguos y registros de entrada nuevos) se utilizan para pasar parámetros. Finalmente, ocho registros (g0 a g7) son visibles globalmente para todos los niveles del procedimiento.

El AMD 29000 mejoró el diseño al permitir que las ventanas sean de tamaño variable, lo que ayuda a la utilización en el caso común en el que se necesitan menos de ocho registros para una llamada. También separó los registros en un conjunto global de 64 y 128 adicionales para las ventanas. De manera similar, la arquitectura IA-64 (Itanium) utilizaba ventanas de tamaño variable, con 32 registros globales y 96 para las ventanas.

En la arquitectura Infineon C166 , la mayoría de los registros son simplemente ubicaciones en la RAM interna que tienen la propiedad adicional de ser accesibles como registros. De estos, las direcciones de los 16 registros de propósito general (R0-R15) no son fijas. En cambio, el registro R0 está ubicado en la dirección señalada por el registro "Puntero de contexto" (CP), y los 15 registros restantes siguen secuencialmente a partir de entonces. [1]

Las ventanas de registro también proporcionan una ruta de actualización sencilla. Dado que los registros adicionales son invisibles para los programas, se pueden agregar ventanas adicionales en cualquier momento. Por ejemplo, el uso de programación orientada a objetos a menudo resulta en un mayor número de llamadas "más pequeñas", que pueden acomodarse aumentando las ventanas de ocho a dieciséis, por ejemplo. Este fue el enfoque utilizado en SPARC, que ha incluido más ventanas de registro con nuevas generaciones de arquitectura. El resultado final es menos operaciones lentas de llenado y derrame de ventanas de registro porque las ventanas de registro se desbordan con menos frecuencia.

Crítica

Las ventanas de registro no son la única forma de mejorar el rendimiento del registro. El grupo de la Universidad de Stanford que diseñó el MIPS vio el trabajo de Berkeley y decidió que el problema no era la escasez de registros, sino la mala utilización de los existentes. En cambio, invirtieron más tiempo en la asignación de registros de su compilador , asegurándose de que utilizara sabiamente el conjunto más grande disponible en MIPS. Esto dio como resultado una complejidad reducida del chip, con la mitad del número total de registros, al tiempo que ofrece un rendimiento potencialmente mayor en aquellos casos en los que un único procedimiento podría hacer uso del mayor espacio de registro visible. Al final, con los compiladores modernos, MIPS hace un mejor uso de su espacio de registro incluso durante las llamadas a procedimientos. [ cita necesaria ]

Referencias

  1. ^ "Manual del conjunto de instrucciones de la familia Infineon C166" (PDF) . Keil . Consultado el 12 de marzo de 2020 .