TEMA 6. ADMISTRACIÓN DE LA MEMORIA
[YRAO94]6.1Organización y gestión de la memoria. Conceptos generales
6.2Gestión de la memoria en los sistemas monoprogramados
6.3 Gestión de la memoria en los sistemas multiprogramados
6.4 Asignación de memoria contigua
6.4.1 Particiones estáticas
6.4.2 Particiones dinámicas
6.4.3 Estrategias de colocación
6.4.4 Intercambio
6.5 Asignación de memoria no contigua
6.5.1 Esquema general de traducción
6.5.2 Paginación
6.5.2.1 Memoria asociativa
6.5.2.2 Páginas compartidas
6.5.2.3 Protección
6.5.2.4 Dos visiones de la memoria
6.5.3 Segmentación
6.5.3.1 Visión del usuario de la memoria
6.5.3.2 Hardware
6.5.3.3 Implementación de las Tablas de Segmentos
6.5.3.4 Compartición y Protección
6.5.3.5 Fragmentación
6.5.4 Segmentación Paginada
Durante este nuevo tema nos enfrentaremos con el problema de la gestión de la memoria. Haremos un breve estudio preliminar de las posibles alternativas y variantes a la hora de organizar y administrar el espacio de direcciones de un sistema. Esta primera toma de contacto nos servirá de excusa para introducir algunos conceptos generales, que se irán desarrollando luego.
Empezaremos por el tipo de gestión más básico, el de los sistemas de monoprogramación que apenas necesitan de ninguna organización. La irrupción de los sistemas multiprogramados hace necesario tomar decisiones sobre aspectos tan diversos como cuánto espacio se dedica a cada proceso, de qué modo se le asigna, en qué lugar se ubica, durante cuánto tiempo permanece en memoria, qué sucede si no existe suficiente espacio o cómo se protege frente a accesos ajenos. Todos estos factores serán valorados primero para técnicas de asignación contigua(particiones estáticasy dinámicas) y para métodos de asignación no contigua (paginación, segmentacióny segmentación paginada). También se discutirá el soporte hardware, y el grado de protección y compartición que es posible con cada uno de los esquemas. Dentro del segundo paquete de estrategias de administración de la memoria tendrán un particular interés los esquemas de traducción de direcciones, por su repercusión en el tiempo efectivo de acceso a memoria y, por tanto, en el rendimiento del sistema.
6.1 La organización y gestión de la memoria. Conceptos generales
[DEIT93][LIST86][MILE94][STAL95]Para que un proceso pueda ejecutarse debe estar ubicado en la memoria principal del ordenador. Una parte del sistema operativo se va a encargar de gestionar la memoria principal, de forma que los procesos puedan residir en la memoria sin conflictos. La gestión de la memoria implica varias tareas, una de ellas es llevar un registro de qué zonas están libres (es decir, no están siendo utilizadas por ningún proceso), y qué zonas están ocupadas por qué procesos. Otra tarea importante surge en sistemas en los que no todos los procesos, o no todo el código y datos de un proceso, se ubican en la memoria principal. En estos sistemas, a menudo se debe pasar parte, o la totalidad del código y datos de un proceso, de memoria a disco, o viceversa; siendo el sistema operativo responsable de esta tarea. De esta forma se libera al usuario de realizar estas transferencias de información, de las cuales no es consciente.
Otros dos temas importantes en la gestión de la memoria son el de la carga de los programas de disco a memoria y el de la protección. Desde el momento en que varios procesos deben compartir la memoria del ordenador surge el problema de la protección. En general, se pretende que un proceso no pueda modificar las direcciones de memoria en las que no reside. Esto es así ya que en las direcciones de memoria donde no está ubicado el proceso pueden residir otros procesos, o código o estructuras de datos del S.O. Si un proceso puede modificar indiscriminadamente la memoria, podría, por ejemplo, cambiar el valor de una dirección de memoria donde residiera una variable de otro proceso, con la consecuente ejecución incorrecta del proceso propietario de la variable. Algunos sistemas ni siquiera permiten que un proceso pueda leer las direcciones de memoria en las que no reside, con esto se consigue privacidad sobre el código y datos de los procesos. Conforme avance este tema y el siguiente se profundizará en todos estos aspectos.
Existen varias formas de gestionar la memoria. Por lo común, la forma de gestión dependerá de la máquina virtual que se quiera proporcionar y del hardware subyacente. Con independencia de la forma de gestión es necesario decidir qué estrategias se deben utilizar para obtener un rendimiento óptimo. Las estrategias de administración de la memoria determinan el comportamiento de una organización de memoria determinada cuando se siguen diferentes políticas: ¿ Cuándo se coge un nuevo programa para colocarlo en la memoria ? ¿ Se coge el programa cuando el sistema lo necesita, o se intenta anticiparse a las peticiones del sistema ? ¿ En qué lugar de la memoria principal se coloca el siguiente programa por ejecutar ? ¿ Se colocan los programas lo más cerca posible unos de otros en los espacios disponibles de la memoria principal para reducir al mínimo el desperdicio de espacio, o se colocan lo más rápido posible para reducir el tiempo empleado en tomar la decisión ?
Los sistemas actuales son en su mayor parte sistemas con almacenamiento virtual, muchas de la formas de gestión estudiadas en este tema tienen principalmente valor histórico, pero sientan las bases de los sistemas actuales.
Jerarquía de la memoria
Los programas y datos necesitan estar en la memoria principal para ser ejecutados, o para poder ser referenciados. Los programas o datos que no se necesitan de inmediato pueden guardarse en la memoria secundaria hasta que se necesiten, y en ese momento se transfieren a la memoria principal para ser ejecutados o referenciados. Los soportes de memoria secundaria, como cintas o discos, son en general menos caros que la memoria principal, y su capacidad es mucho mayor. Normalmente, es mucho más rápido el acceso a la memoria principal que a la secundaria.
En los sistemas con varios niveles de memoria hay muchas transferencias constantes de programas y datos entre los distintos niveles. Estas transferencias consumen recursos del sistema, como tiempo de la CPU, que de otro modo podrían utilizarse provechosamente.
En los años sesenta se hizo evidente que la jerarquía de la memoria podía extenderse un nivel más, con una clara mejora del rendimiento. Este nivel adicional, la memoria caché, es una memoria de alta velocidad, mucho más rápida que la memoria principal. La memoria caché es extremadamente cara, si se compara con la principal, por lo que sólo se utilizan memorias caché relativamente pequeñas. La figura 6.1 muestra la relación que existe entre la memoria caché, la principal y la secundaria.
La memoria caché introduce un nivel adicional de transferencia de información en el sistema. Los programas en memoria principal se pasan a la memoria caché antes de ejecutarse. En la memoria caché se pueden ejecutar mucho más rápido que en la principal. La esperanza de los diseñadores es que el trabajo extra requerido por la transferencia de programas sea mucho menor que el incremento del rendimiento obtenido por la ejecución más rápida en la caché.
6.2 Gestión de la memoria en los sistemas monoprogramados
[MILE94] [TANE93]En los sistemas de monoprogramación sólo existe un proceso de usuario, que disfruta de todos los recursos del ordenador. Esto va a simplificar notablemente la gestión de la memoria, ya que ésta sólo debe ser compartida por los programas del sistema operativo, y por el único proceso de usuario existente. Esto se muestra en la figura 6.2. Dependiendo de detalles de diseño, el sistema operativo ocupará la parte baja de la memoria RAM, como se muestra en la figura 6.2 (a); o la parte alta de la memoria ROM, como se muestra en la figura 6.2 (b). El PC de IBM ubica parte del sistema operativo en RAM, y los gestores de dispositivos en ROM; a esta última parte se le llama BIOS (Basic Input/Output System, sistema básico de entrada/salida), esto último se ilustra en la figura 6.2 (c).
Si el usuario conoce la ubicación en la memoria del sistema operativo, entonces puede escribir programas en términos de direcciones absolutas de memoria. Una dirección absoluta de memoria es una dirección física (es decir, real) de la memoria. En contraposición se tienen las direcciones relativas. Un programa está escrito en término de direcciones relativas cuando se escribe suponiendo que empieza a cargarse en la dirección cero de la memoria. Por lo general, los usuarios escriben programas en lenguajes de alto nivel, por lo que son los traductores los encargados de generar las direcciones que ocupan las variables, procedimientos, etc, en la memoria. Los compiladores no generan direcciones absolutas de memoria, pues no saben dónde se almacenarán los procesos.
Por lo común, los sistemas operativos monousuario de monoprogramación (muy comunes en las microcomputadoras) no tienen protección de la memoria. Por lo tanto, el único proceso de usuario que existe en la memoria, puede modificar posiciones de memoria pertenecientes al sistema operativo, esto provocaría errores al ejecutarse la zona modificada. La protección se puede realizar mediante un registro de límite integrado en la CPU. Si se tiene un esquema como el de la figura 6.2 (b) el registro de límite contendrá la dirección de inicio de carga del S.O. El hardware, en tiempo de ejecución, verifica que las direcciones generadas por el proceso de usuario no son superiores al valor del registro de límite. En caso de ser superior, el proceso de usuario intenta acceder al S.O., esto provoca una interrupción hardware que gestiona el S.O., normalmente eliminando al proceso.
ENLACE al tema anterior: INTERBLOQUEOS
ENLACE al siguiente tema: MEMORIA VIRTUAL