Gestión De La Memoria Virtual
Cristelys22 de Enero de 2012
4.753 Palabras (20 Páginas)819 Visitas
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.
Espacio de Direcciones Lógicas vs. Físicas
• El concepto de espacio de direcciones lógicas que esta ligado a un espacio de direcciones físicas separadas es central para la apropiada administración de la memoria.
– Dirección Lógica – generada por el CPU; también
conocida como dirección virtual.
– Dirección Física – direcciones vistas por la unidad de
memoria.
• Las direcciones Lógicas y Físicas son las mismas en el tiempo de compilación y en el tiempo de carga.
• En los esquemas de vinculación (liga) de direcciones; la dirección Lógica (Virtual) y la dirección Física difieren en el tiempo de ejecución .
1.1. 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). Esta técnica divide en módulos el programa cuyo tamaño sobrepasa la capacidad de la memoria principal, y que reside por tanto en memoria secundaria (disco). Después se introducen en los lugares adecuados de cada módulo, y al margen de la lógica propia del programa, las instrucciones de E/S necesarias para cargar en memoria principal aquellos módulos cuyas instrucciones deban ejecutarse o cuyos datos vayan a ser referenciados en el inmediato futuro. Es decir, el propio programa se ocupa de cargar por anticipado los módulos que van a ser referenciados.
Con este mecanismo se puede superar la limitación del tamaño de la memoria principal, pero tiene el inconveniente de hacer depender el programa de las dimensiones concretas de la memoria del computador para el que se codifica, obligando a revisar la división modular del programa cuando cambie la configuración de la máquina.
1.2. 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.
1.3. 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.
1.4. 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).
1.5. 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.
2. Memoria virtual
El sistema de memoria virtual implementa todas las funciones anteriores de forma integrada.
En un computador con memoria virtual (MV) las direcciones de los programas (generadas
por la CPU) hacen referencia a un espacio mayor que el espacio físico realmente disponible en la memoria principal o memoria física (MF).
Los programas operan virtualmente con un tamaño físico de memoria principal mucho mayor que el realmente disponible. En estas máquinas hay que diferenciar, pues, entre el espacio de direcciones virtuales generado por la CPU y el espacio de direcciones físicas o reales existentes en memoria principal y determinado por el número de líneas del bus de direcciones.
El espacio virtual se soporta sobre un disco con la ayuda de un mecanismo de traducción que genera la dirección física de memoria principal a partir de la virtual. En la siguiente figura hemos representado el mecanismo de traducción de direcciones virtuales (DV) a direcciones físicas (DF).
Tanto la memoria principal como la memoria del disco se dividen en páginas de igual tamaño. El número de páginas de la memoria virtual en general es mayor que el número de páginas disponibles de la memoria física. Por este motivo, en cada momento sólo las copias de un conjunto de páginas virtuales del programa residen en la memoria física. Este conjunto recibe el nombre de conjunto de trabajo o conjunto activo, y resulta relativamente estable a lo largo del tiempo, debido a la localidad referencial que manifiestan los programas. Esta es la clave del buen funcionamiento de la memoria virtual, al igual que ocurría con la memoria cache.
Los bits de una DV se consideran divididos en dos campos, el número de página virtual (NPV) los más significativos, y el desplazamiento dentro de la página (DP), los menos significativos. El número de bits del campo DP lo determina el tamaño de página (nº de bits de DP = log2 tamaño de página). El número de bits del campo NPV lo determina el número de páginas virtuales (nº de bits de NPV = log2 nº de páginas virtuales). Los bits de una DF se consideran divididos también en dos campos, el número de página física (NPF) los más significativos, y el desplazamiento dentro de la página (DP), los menos significativos. El número de bits del campo DP de una DF es el mismo que el de una DV, puesto que las páginas tienen igual tamaño en MV y MF.
El número de bits del campo NPF lo determina el número de páginas físicas de MF (nº de bits de NPF = log2 nº de páginas físicas).
Las DVs generadas por la CPU se traducen a DFs con la ayuda de una Tabla de Páginas (TP). Esta tabla contiene en principio tantas entradas como páginas existen en la MV, y la posición en la tabla de una entrada correspondiente a una página virtual concreta coincide con su NPV.
Cada entrada contiene un primer campo de bits de control, de los que por el momento haremos referencia tan sólo a uno, el bit de presencia (P). Si este bit está activo (por ejemplo a 1) significa que la página virtual correspondiente a esa entrada está presente en la MF, y en este caso el segundo campo de la entrada contiene el correspondiente NPF. Si el bit P está inactivo (por ejemplo a 0) significa que la correspondiente página virtual no está en la MF, sino en el disco. En este caso el segundo campo de la entrada apunta a la dirección del disco donde se encuentra la página virtual. Como en un momento se pueden estar ejecutando más de un programa (multiprogramación o multiusuario) existirán más de una TP, una para cada programa (proceso) activo. Por ello, el acceso a la TP se realiza con la ayuda de un registro base de la tabla de páginas (RBTP) asociado a cada programa.
Para traducir una DV en DF se busca en la correspondiente entrada de la TP. Si el bit P de esta entrada vale 1, se dice que ha ocurrido un acierto de página, y se lee el contenido del segundo campo que en los aciertos constituye el NPF en la memoria principal. La DF completa se obtiene concatenando los bits de NPF con los de DP de la DV. Si el bit P de la entrada de la TP vale 0, se dice que ha ocurrido un fallo de página, lo que significa que la página virtual donde se ubica la DV que se está traduciendo, no se encuentra en MF. En este caso el fallo de página se sirve buscado la página en el disco, ubicándola en MF y actualizando la correspondiente entrada de la TP.
2.1. Memoria virtual paginada
El mecanismo de traducción de DV a DF que acabamos de describir corresponde a un sistema de memoria virtual paginada. En él el espacio virtual (y físico) se divide en páginas de igual tamaño. Veremos en el apartado siguiente otra alternativa en la que la MV se divide en segmentos de longitud variable, dando lugar a la memoria virtual segmentada. Las entradas de la TP de una MV paginada, además del NPF contiene unos bits de control, de
...