Definición


El espacio de direcciones o Address space es la abstracción fundamental sobre la memoria de una computadora.

Crear un mecanismo que permite que la memoria física de una computadora sea utilizada de forma fácil y eficiente llevo paulatinamente a concebir el concepto de espacio de direcciones, la abstracción para la memoria

El address space de un proceso contiene todo el estado de la memoria del programa en ejecución.

Por ejemplo

  • El código del programa tiene que estar alojado en la memoria en algún lugar
  • El programa mientras se está ejecutado usa el stack para mantener registro de donde se encuentra en la cadena de llamadas a funciones o procedimientos para reservar espacios para las variables locales, para pasar parámetros y a su vez devolver valores de y hacia una rutina.
  • Finalmente se utiliza el heap para reservar memoria de forma dinámica
  • Existen otras cosas de la memoria, como variables estáticas, constantes, etc.

Ejemplo


Se presenta un pequeño espacio de direcciones de

El código fuente del programa vive en lo alto del espacio de direcciones empezando de en este ejemplo y esta empaquetado en la primer del espacio de direcciones. El código fuente es estático por ende se puede poner al principio del espacio de direcciones y no necesitará más espacio mientras que el programa se ejecute.

Por otro lado hay dos regiones del espacio de direcciones que pueden crecer o achicarse mientras el programa se esta ejecutando. Como ya se sabe son el heap y el stack, debido a que ambas en algún momento van a querer crecer siempre se ponen en los extremos del espacio de direcciones enfrentadas entre sí.

De esta forma se permite tal crecimiento solamente que el mismo se dirige a direcciones opuestas

  • El heap empieza justo después del código fuente y crece hacia abajo
  • El stack empieza al final del espacio de direcciones y crece hacia arriba

Por supuesto que cuando se describe de esta forma el espacio de direcciones lo que se esta describiendo es la abstracción que el sistema operativo provee para ejecutar un programa.

En realidad el programa no se encuentra en el rango de las direcciones de memoria física entre y . Cuando el sistema operativo realiza esto, se dice que esta virtualizando memoria.

Por ejemplo, cuando un proceso trata de cargar el contenido de la dirección 0, que a partir de ahora llamaremos la dirección virtual , de alguna forma el sistema operativo con ayuda de MMU se asegura que no se cargue la dirección física real más bien que se cargue la dirección física en la cual el espacio de direcciones de ese proceso se encuentre.