Gestión de memoria

El sistema de memoria virtual de los actuales computadores surgió para liberar al programador de una serie de tareas relacionadas con el uso que los programas debían realizar con la memoria. La memoria virtual automatiza la gestión entre los dos niveles principales de la jerarquía de memoria: memoria principal y disco.

Antes de entrar en los mecanismos específicos de la memoria virtual revisaremos una serie de funciones que deben incorporarse en la gestión de memoria.

Solapamiento (overlay)

El tamaño de la memoria principal disponible en los computadores ha aumentado de forma sostenida desde sus orígenes. Sin embargo, el tamaño de los programas ha crecido más rápidamente, por lo que la necesidad de ejecutar programas que no cabían en la memoria principal ha sido una constante en la historia de los computadores. Una forma de superar esta limitación es el uso de la técnica de solapamiento (overlay).

En primer lugar, con la técnica de solapamiento se divide en módulos el programa que no cabe completo en la memoria principal. Después hay que situar en los lugares adecuados de cada módulo las instrucciones de E/S necesarias para cargar en memoria principal aquellos módulos residentes en el disco cuyas instrucciones deban ejecutarse o cuyos datos sean referenciados. Es decir, el propio programa se encarga de cargar dinámicamente aquellos módulos que son referenciados.

Con este mecanismo se puede superar la limitación de la memoria principal, sin embargo tiene el inconveniente de hacer depender el programa del tamaño de la memoria disponible en el computador, con lo que variaciones en su configuración obligan a revisar la división modular del programa.

Solapamiento

Reubicación

En sistemas con multiprogramación se necesita que varios programas residan simultáneamente en memoria. El tiempo de CPU se va distribuyendo entre ellos de acuerdo a una política de prioridades determinada. La ubicación en memoria de los programas no se conoce en tiempo de compilación, por lo que no se pueden generar direcciones absolutas.

Para conseguir una asignación dinámica de memoria en tiempo de ejecución se utilizan registros de reubicación. La dirección efectiva se obtiene sumando a la dirección generada por el compilador el contenido del registro de reubicación asignado al programa.

Paginación

La paginación también surgió de la necesidad de mantener más de un programa residente en memoria cuando la capacidad de ésta es inferior a la suma de los tamaños de los programas. Se trata de un mecanismo automático de solapamiento múltiple que practica el Sistema Operativo para hacer posible la multiprogramación. El espacio de memoria principal se divide en bloques de tamaño fijo denominados páginas. Los programas se dividen también en páginas y residen en el disco.

El Sistema Operativo se encarga de asignar páginas físicas a los programas en ejecución (multiprogramación). De esta forma el tiempo de CPU puede distribuirse entre los programas residentes.

Protección

Un papel importante de la gestión de memoria es la protección. Si varios programas comparten la memoria principal debe asegurarse que ninguno de ellos pueda modificar el espacio de memoria de los demás. Como casi todos los lenguajes permiten el uso de punteros dinámicos, los test en tiempo de compilación no son suficientes para garantizar la protección. Esta debe mantenerla en tiempo de ejecución el sistema de gestión de memoria (MMU)

Compartición

Esta función parece estar en contradicción con la anterior. Sin embargo, con frecuencia los programas de un sistema multiprogramado deben poder compartir y actualizar información, por ejemplo, un sistema de bases de datos. Además, no es necesario tener varias copias de una rutina si se permite que todos los programas accedan a una misma copia.

Fuente: Estructura de Computadores, Facultad de Informática, UCM