fbpx
Wikipedia

Zona roja (computación)

En ciencias de la computación, una zona roja (red zone) es un área de memoria en la pila de llamadas que se encuentra más allá de la dirección de memoria apuntada por el puntero de pila (%rsp) y que se mantiene sin asignar. Dicha región de memoria no es modificada por interrupciones o excepciones. La existencia de la zona roja es una característica peculiar en procesadores con un conjunto de instrucciones x86-64.

Las especificaciones de x86-64 admiten que un programa puede usar hasta 128 bytes por debajo (es decir, direcciones de memoria inferiores) de aquella apuntada por el puntero de pila en ese momento. Esta región de memoria adicional permite que el programa pueda almacenar datos temporales en memoria sin la necesidad de tener que modificar el puntero de pila, lo cual permite ejecutar dichas operaciones de forma más rápida y eficiente para el procesador.

Uso de zona roja

Normalmente, los programas evitan acceder a la zona roja siempre que les sea posible guardar todas las variables locales en los registros enteros, pero es posible que sí se use la zona roja cuando se hace referencia a una variable local de duración muy efímera, (como por ejemplo, un array local) ya que podría ser más costoso para el procesador almacenar dicha variable en un registro local o en la propia pila y después sacarlo (con las consiguientes modificaciones del puntero de pila) que simplemente hacer uso de dicha zona y ahorrar la modificación del puntero de pila.

En un lenguaje de programación de alto nivel, como C, un programa como el siguiente intercambia el contenido de dos variables haciendo uso de un array local:

void intercambio (long *a, long *b) { volatile long loc[2]; loc[0] = *a; loc[1] = *b; *a = loc[1]; *b = loc[0]; } 

Para este programa, el compilador GCC generaría un código máquina que en sintaxis de lenguaje ensamblador sería:

.intercambio: movq (%rdi), %rax movq %rax, -24(%rsp) movq (%rsi), %rax movq %rax, -16(%rsp) movq -16(%rsp), %rax movq %rax, (%rdi) movq -24(%rsp), %rax movq %rax, (%rsi) ret 

En el ejemplo, podemos ver cómo se hace referencia al puntero de pila (%rsp), que es el que apunta al tope de la pila —es decir, la dirección de memoria de la pila más baja asignada por el procedimiento actual. Sin embargo, podemos ver cómo dichas referencias tienen un desplazamiento (offset) negativo; por ejemplo, en la línea 3, se mueve el valor contenido en el registro %rax a una posición 24 bytes por debajo del puntero de pila (-24(%rsp). Dicha posición, que en principio estaría fuera del espacio de memoria del programa actual, está haciendo referencia a la zona roja. Por tanto, podemos ver que dicho programa está aprovechando la zona roja para almacenar temporalmente los contenidos del array local que hemos declarado. Así, el procesador ahorra tener que meter (push) dichas variables en la pila y a continuación sacarlas (pop), con todas las consiguientes modificaciones del puntero de pila, mejorando notablemente la eficiencia.

Véase también

Bibliografía

  • "i386 and x86-64 Options - Using the GNU Compiler Collection (GCC)".
  • "OpenCores Wiki - OpenRISC GNU toolchain".
  • Computer Systems. A Programmer's Perspective - Bryant · O'Hallaron
  • Apuntes sobre Estructura de Computadores - Universidad de Granada
  •   Datos: Q7305420

zona, roja, computación, ciencias, computación, zona, roja, zone, área, memoria, pila, llamadas, encuentra, más, allá, dirección, memoria, apuntada, puntero, pila, mantiene, asignar, dicha, región, memoria, modificada, interrupciones, excepciones, existencia, . En ciencias de la computacion una zona roja red zone es un area de memoria en la pila de llamadas que se encuentra mas alla de la direccion de memoria apuntada por el puntero de pila rsp y que se mantiene sin asignar Dicha region de memoria no es modificada por interrupciones o excepciones La existencia de la zona roja es una caracteristica peculiar en procesadores con un conjunto de instrucciones x86 64 Las especificaciones de x86 64 admiten que un programa puede usar hasta 128 bytes por debajo es decir direcciones de memoria inferiores de aquella apuntada por el puntero de pila en ese momento Esta region de memoria adicional permite que el programa pueda almacenar datos temporales en memoria sin la necesidad de tener que modificar el puntero de pila lo cual permite ejecutar dichas operaciones de forma mas rapida y eficiente para el procesador Uso de zona roja EditarNormalmente los programas evitan acceder a la zona roja siempre que les sea posible guardar todas las variables locales en los registros enteros pero es posible que si se use la zona roja cuando se hace referencia a una variable local de duracion muy efimera como por ejemplo un array local ya que podria ser mas costoso para el procesador almacenar dicha variable en un registro local o en la propia pila y despues sacarlo con las consiguientes modificaciones del puntero de pila que simplemente hacer uso de dicha zona y ahorrar la modificacion del puntero de pila En un lenguaje de programacion de alto nivel como C un programa como el siguiente intercambia el contenido de dos variables haciendo uso de un array local void intercambio long a long b volatile long loc 2 loc 0 a loc 1 b a loc 1 b loc 0 Para este programa el compilador GCC generaria un codigo maquina que en sintaxis de lenguaje ensamblador seria intercambio movq rdi rax movq rax 24 rsp movq rsi rax movq rax 16 rsp movq 16 rsp rax movq rax rdi movq 24 rsp rax movq rax rsi ret En el ejemplo podemos ver como se hace referencia al puntero de pila rsp que es el que apunta al tope de la pila es decir la direccion de memoria de la pila mas baja asignada por el procedimiento actual Sin embargo podemos ver como dichas referencias tienen un desplazamiento offset negativo por ejemplo en la linea 3 se mueve el valor contenido en el registro rax a una posicion 24 bytes por debajo del puntero de pila 24 rsp Dicha posicion que en principio estaria fuera del espacio de memoria del programa actual esta haciendo referencia a la zona roja Por tanto podemos ver que dicho programa esta aprovechando la zona roja para almacenar temporalmente los contenidos del array local que hemos declarado Asi el procesador ahorra tener que meter push dichas variables en la pila y a continuacion sacarlas pop con todas las consiguientes modificaciones del puntero de pila mejorando notablemente la eficiencia Vease tambien EditarPila de llamadas x86 64 Arquitectura de computadoresBibliografia Editar i386 and x86 64 Options Using the GNU Compiler Collection GCC OpenCores Wiki OpenRISC GNU toolchain Computer Systems A Programmer s Perspective Bryant O Hallaron Apuntes sobre Estructura de Computadores Universidad de Granada Datos Q7305420Obtenido de https es wikipedia org w index php title Zona roja computacion amp oldid 125249396, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos