Capítulo 5: Gestión de la memoria principal

Publicado por P. Ruiz en

Introducción

Podemos entender la memoria principal como un inmenso casillero, que almacena programas y datos. Cada una de las casillas está numerada (con una dirección) y su contenido recibe el nombre de palabra.

Una palabra es el conjunto de bits que la arquitectura de un ordenador puede manejar como un todo. Los tamaños de palabra más comunes son de 16, 32 ó 64 bits.

Como dijimos al hablar de procesos, para que un programa pueda ejecutarse, sus instrucciones y sus datos tendrán que estar presentes en la memoria principal del sistema, lo que conocemos como memoria RAM. Como ya sabemos, planificando el uso del procesador, mejoraremos el rendimiento general del sistema, pero esto implicará la necesidad de compartir la memoria principal entre varios procesos de forma simultánea. Por lo tanto, una buena administración de la memoria, repercutirá de forma inmediata en el comportamiento de todo el sistema informático.

El gestor de memoria deberá asignar la porción necesaria de memoria principal a cada proceso que lo necesite.

Como ya dijimos, para ejecutar una instrucción, habría que leerla desde la memoria a un registro del procesador y decodificarla (averiguar qué significa). A continuación, es posible que el sistema deba volver a la memoria para obtener los datos implicados en la operación. Finalmente, es común que los resultados obtenidos también haya que guardarlos en la memoria. Por todo ello, si la gestión de la memoria no es adecuada, el rendimiento general del sistema se verá inmediatamente disminuido.

Los sistemas operativos modernos son, casi siempre, multiprogramados. Es decir, ejecutan varios procesos de forma concurrente. Esto significa que la memoria debe dividirse para darles cabida.

Cuanto más eficaz sea ese reparto, más procesos podrán ejecutarse a la vez, lo que redundará en un mayor rendimiento (no debemos olvidar que el procesador es el elemento más rápido del sistema y que el objetivo principal consiste en que siempre tenga instrucciones listas para ser ejecutadas).

Además, la gestión de memoria deberá cumplir con las siguientes necesidades:

  • Protección: Debe evitarse que un proceso haga referencia a posiciones de memoria de un proceso diferente.

    Como el sistema operativo no puede anticiparse a todos los accesos que realizará un proceso durante su ejecución, es el procesador quien debe tener un mecanismo que intercepte los accesos no permitidos.

  • Reubicación: Como veremos más adelante, una forma de dar cabida a más procesos consiste en descargar a disco la totalidad o una parte de la memoria ocupada por un proceso (por ejemplo, mientras se encuentra bloqueado). La reubicación consiste en que al volver a la memoria, no sea necesario que ocupe la posición original.

    Para que esto sea posible las referencias que hagan los programas a direcciones de memoria deben ser lógicas y serán el hardware y el sistema operativo quienes colaboren para realizar la traducción.

  • Compartición: Debe existir la posibilidad de que varios procesos compartan información a través de una zona de memoria compartida. Por ejemplo, es más eficiente que varios procesos accedan al mismo código de una biblioteca de funciones compartida (lo que en Windows conocemos como DLL), que mantener varias copias de ésta.

    Igual puede ocurrir con datos que manejen diferentes procesos.

Sin embargo, para tratar de comprender la complejidad de la gestión de memoria, estudiaremos distintos mecanismos, de más sencillo a más complejo, pudiendo entender la explicación como una evolución.