Paginación en Memoria Virtual Por: Edgar A

Anuncio
1
Paginación en Memoria Virtual
Por:
Edgar A. Mendieta
I. Gestión de Memoria.
En un sistema con multiprogramación, el sistema operativo debe encargarse de
realizar un reparto transparente, eficiente y seguro de los distintos recursos de la
máquina entre los diversos procesos, de forma que cada uno de ellos crea que
«tiene una máquina para él solo». Esto es, el sistema operativo debe permitir
que los programadores desarrollen sus aplicaciones sin verse afectados por la
posible coexistencia de su programa con otros durante su ejecución.
En el caso de la memoria, el sistema operativo, con el apoyo del hardware de
gestión de memoria del procesador, debe repartir el almacenamiento existente
proporcionando un espacio de memoria independiente para cada proceso y
evitando la posible interferencia voluntaria o involuntaria de cualquier otro
proceso.
Se podría considerar que, en el caso del procesador, se realiza un reparto en el
tiempo, mientras que en el de la memoria, se trata de un reparto en el espacio
La acción combinada de estos dos mecanismos ofrece a los programas una
abstracción de procesador virtual que les independiza del resto de los procesos.
1. Requisitos de la Gestión de Memoria.
Sea cual sea la política de gestión de memoria empleada en un determinado
sistema, se pueden destacar las siguientes características como objetivos
deseables del sistema de gestión de memoria:
• Ofrecer a cada proceso un espacio lógico propio.
• Proporcionar protección entre los procesos.
• Permitir que los procesos compartan memoria.
• Dar soporte a las distintas regiones del proceso.
• Maximizar el rendimiento del sistema.
• Proporcionar a los procesos mapas de memoria muy grandes.
1.1. Reubicación.
Paginación en Memoria Virtual
Edgar A. Mendieta
2
En un sistema operativo multiprogramado de propósito general no se puede
conocer a priori la posición de memoria que ocupará un programa cuando se
cargue en memoria para proceder a su ejecución, puesto que dependerá del
estado de ocupación de la memoria, pudiendo variar, por tanto, en sucesivas
ejecuciones del mismo.
El código máquina de un programa contenido en un archivo ejecutable incluirá
referencias a memoria, utilizando los diversos modos de direccionamiento del
juego de instrucciones del procesador, tanto para acceder a sus operandos
como para realizar bifurcaciones en la secuencia de ejecución. Estas referencias
típicamente estarán incluidas en un intervalo desde 0 hasta un valor máximo N.
1.2. Protección.
En un sistema con monoprogramación es necesario proteger al sistema
operativo de los accesos que realiza el programa en ejecución para evitar que,
voluntaria o involuntariamente, pueda interferir en el correcto funcionamiento del
mismo. Todos los usuarios que han trabajado en un sistema que no cumple este
requisito de protección, como por ejemplo MS-DOS, han experimentado cómo
un error de programación en una aplicación puede causar que todo el sistema se
colapse durante la ejecución de la misma al producirse una alteración imprevista
del código o las estructuras de datos del sistema operativo.
En un sistema con multiprogramación el problema se acentúa ya que no sólo
hay que proteger al sistema operativo sino también a los procesos entre sí. El
mecanismo de protección en este tipo de sistemas necesita del apoyo del
hardware puesto que es necesario validar cada una de las direcciones que
genera un programa en tiempo de ejecución. Este mecanismo está típicamente
integrado en el mecanismo de traducción: la función de traducción debe
asegurar que los espacios lógicos de los procesos sean disjuntos entre sí y con
el del propio sistema operativo.
Observe que en el caso de un sistema que use un procesador con mapa de
memoria y E/S común, el propio mecanismo de protección integrado en el
proceso de traducción permite impedir que los procesos accedan directamente a
Paginación en Memoria Virtual
Edgar A. Mendieta
3
los dispositivos de E/S, haciendo simplemente que las direcciones de los
dispositivos no formen parte del mapa de ningún proceso.
1.3. Compartición.
Para cumplir el requisito de protección, el sistema operativo debe crear espacios
lógicos independientes y disjuntos para los procesos. Sin embargo, en ciertas
situaciones, bajo la supervisión y control del sistema operativo, puede ser
provechoso que los procesos puedan compartir memoria.
Esto es, la posibilidad de que direcciones lógicas de dos o más procesos,
posiblemente distintas entre sí, se correspondan con la misma dirección física.
1.4.
Soporte de las regiones del proceso.
Como se analizará con más detalle en secciones posteriores, el mapa de un
proceso no es homogéneo sino que está formado por distintos tipos de regiones
con diferentes características y propiedades.
Dado que el sistema operativo conoce qué regiones incluye el mapa de memoria
de cada proceso, el gestor de memoria con el apoyo del hardware debería dar
soporte a las características específicas de cada región.
Así, por ejemplo, el contenido de la región que contiene el código del programa
no debe poder modificarse. Se debería detectar cualquier intento de escritura
sobre una dirección incluida en dicha región y tratarlo adecuadamente (p. ej.:
mandando una señal al proceso).
Otro aspecto a resaltar es que el mapa del proceso no es estático. Durante la
ejecución de un programa puede variar el tamaño de una región o, incluso,
pueden crearse nuevas regiones o eliminarse regiones existentes. El sistema de
memoria debe controlar qué regiones están presentes en el mapa de memoria y
cuál es el tamaño actual de cada una.
1.5. Maximizar el rendimiento.
El gestor de memoria debe, por tanto, realizar un reparto de la memoria entre los
procesos intentando que quepa el mayor número de ellos en memoria y
minimizando el desperdicio inherente al reparto. Para ello, debe establecerse
Paginación en Memoria Virtual
Edgar A. Mendieta
4
una política de asignación adecuada. La política de asignación determina qué
direcciones de memoria se asignan para satisfacer una determinada petición.
Hay que resaltar que la propia gestión de la memoria requiere un gasto en
espacio de almacenamiento para que el sistema operativo almacene las
estructuras de datos implicadas en dicha gestión. Así, será necesario guardar la
tabla de regiones y la función de traducción asociada a cada proceso
(normalmente implementadas como tablas), así como una estructura que refleje
qué partes de la memoria permanecen libres y cuáles están ocupadas. Dado que
el almacenamiento de estas estructuras resta espacio de memoria para los
procesos, es importante asegurar que su consumo se mantiene en unos
términos razonables.
II. Memoria Virtual.
1. Estructura de Control y Hardware.
Si se comparan la paginación y segmentación simple con la partición estática y
dinámica, se pueden ver los avances fundamentales en la gestión de memoria.
Las claves de estos avances son las siguientes características.
•
Los procesos pueden ser descargados y cargados a memoria principal de
memoria principal en cualquier instante a lo largo de la ejecución. Ya que
las referencias a memoria de un proceso son lógicas; las cuales son
traducidas a direcciones físicas, dinámicamente durante la ejecución del
proceso.
•
Gracias a la combinación de la traducción dinámica de direcciones de
memoria y el uso de tablas de páginas o de segmentos los procesos
pueden dividirse en varias partes sin que sea necesario que dichas partes
estén contiguas en memoria principal.
Si las características mencionadas anteriormente están presentes no será
necesario que todas las páginas de o todos los segmentos de un proceso estén
en la memoria principal durante la ejecución. Bastara con la parte que contiene
los datos a acceder.
Paginación en Memoria Virtual
Edgar A. Mendieta
5
Los métodos de administración de la memoria principal, que no utilizan Memoria
Virtual y esquemas de Paginación y Segmentación, es decir que llevan a las
direcciones directamente al bus de la memoria, tienen un inconveniente:
producen lo que se denomina fragmentación.
La fragmentación, que son huecos en la memoria que no pueden usarse
debido a lo pequeño de su espacio, provoca un desperdicio de memoria
principal.
Al utilizar la memoria virtual, las direcciones no pasan en forma directa al bus de
memoria, sino que van a una unidad administradora de la memoria (MMU –
Memory Management Unit). Estas direcciones generadas por los programas se
llaman direcciones virtuales y conforman el hueco de direcciones virtuales. Este
hueco se divide en unidades llamadas páginas. Las unidades correspondientes
en la memoria física se llaman marcos para página o frames. Las páginas y los
marcos tienen siempre el mismo tamaño.
Al momento de querer traer un proceso a memoria en un instante dado. El
sistema operativo comienza trayendo solo unos fragmentos, incluyendo el que
tiene el comienzo del programa.
Se llamará conjunto residente del proceso a la parte que está realmente en la
memoria principal.
Si el procesador encuentra una dirección lógica que no está en la memoria
principal, genera una interrupción que indica un fallo de acceso a la memoria. El
S.O pone al proceso interrumpido en estado Bloqueado y toma el control. Para
que la ejecución de este proceso siga más tarde, el S.O necesita traer a la
memoria principal el fragmento del proceso que contiene la dirección. Para ello
se emite una solicitud de Lectura de E/S al disco; luego se expide otro proceso
para que se ejecute mientras se realiza la operación.
Una vez que el fragmento deseado se ha traído a la memoria principal y se ha
emitido la interrupción de E/S, se devuelve el control al S.O, que coloca el
proceso afectado en el estado de Listo.
Como los procesos se ejecutan sólo en memoria principal, a esta memoria se le
llama memoria real. Un programado o usuario puede ver la ejecución de dicho
Paginación en Memoria Virtual
Edgar A. Mendieta
6
proceso en espacios de memoria mayores a la memoria real; esta memoria será
espacios disco que tomara dicho proceso para ejecutarse. Está memoria
residente o que hace uso de espacio en disco es denominada memoria virtual.
2. Memoria Virtual.
La memoria virtual es una técnica para proporcionar la simulación
de
un
espacio de memoria mucho mayor que la memoria física de una máquina. Esta
"ilusión" permite que los programas se hagan sin tener en cuenta el tamaño
exacto de la memoria física.
La ilusión de la memoria virtual está soportada por el mecanismo de traducción
de memoria, junto con una gran cantidad de almacenamiento rápido en disco
duro. Así en cualquier momento el espacio de direcciones virtual hace un
seguimiento de tal forma que una pequeña parte de él, está en memoria real y el
resto almacenado en el disco, y puede ser referenciado fácilmente.
Debido a que sólo la parte de memoria virtual que está almacenada en la
memoria principal, es accesible a la CPU, según un programa va ejecutándose,
la proximidad de referencias a memoria cambia, necesitando que algunas partes
de la memoria virtual se traigan a la memoria principal desde el disco, mientras
que otras ya ejecutadas, se pueden volver a depositar en el disco (archivos de
paginación).
La memoria virtual ha llegado a ser un componente esencial de la mayoría de los
S.O actuales. Y como en un instante dado, en la memoria sólo se tienen unos
pocos fragmentos de un proceso dado, se pueden mantener más procesos en la
memoria. Es más, se ahorra tiempo, porque los fragmentos que no se usan no
se cargan ni se descargan de la memoria. Sin embargo, el S.O debe saber cómo
gestionar este esquema.
La memoria virtual también simplifica la carga del programa para su ejecución
llamado reubicación, este procedimiento permite que el mismo programa se
ejecute en cualquier posición de la memoria física.
En un estado estable, prácticamente toda la memoria principal estará ocupada
con fragmentos de procesos, por lo que el procesador y el S.O tendrán acceso
Paginación en Memoria Virtual
Edgar A. Mendieta
7
directo a la mayor cantidad de procesos posibles, y cuando el S.O traiga a la
memoria un fragmento, deberá expulsar otro. Si expulsa un fragmento justo
antes de ser usado, tendrá que traer de nuevo el fragmento de manera casi
inmediata. Demasiados intercambios de fragmentos conducen a lo que se
conoce como hiperpaginación; donde el procesador consume más tiempo
intercambiando fragmentos que ejecutando instrucciones de usuario. Para
evitarlo el S.O intenta adivinar, en función de la historia reciente, qué fragmentos
se usarán con menor probabilidad en un futuro próximo.
Los argumentos anteriores se basan en el principio de cercanía o principio de
localidad que afirma que las referencias a los datos y el programa dentro de un
proceso tienden a agruparse. Por lo tanto, es válida la suposición de que,
durante cortos períodos de tiempo, se necesitarán sólo unos pocos fragmentos
de un proceso.
Una manera de confirmar el principio de cercanía es considerar el rendimiento
de un proceso en un entorno de memoria virtual.
El principio de cercanía sugiere que los esquemas de memoria virtual pueden
funcionar. Para que la memoria virtual sea práctica y efectiva, se necesitan dos
ingredientes. Primero, tiene que existir un soporte de hardware y, en segundo
lugar, el S.O debe incluir un software para gestionar el movimiento de páginas o
segmentos entre memoria secundaria y memoria principal.
Justo después de obtener la dirección física y antes de consultar el dato en
memoria principal se busca en memoria cache, si esta entre los datos
recientemente usados la búsqueda tendrá éxito, pero si falla, la memoria virtual
consulta memoria principal, ó, en el peor de los casos se consulta de disco
(swapping).
Lo dicho anteriormente lo podemos resumir en la siguiente expresión:
Memoria Virtual = Memoria Física + Área de Swapping en Disco
Paginación en Memoria Virtual
Edgar A. Mendieta
8
3. Paginación.
El término memoria virtual se asocia normalmente con sistemas que emplean
paginación, aunque también se puede usar memoria virtual basada en la
segmentación. El uso de la paginación en la memoria virtual fue presentado por
primera vez en el computador Atlas.
Cada proceso tiene su propia tabla de páginas y cuando carga todas sus
páginas en la memoria principal, se crea y carga en la memoria principal una
tabla de páginas. Cada entrada de la tabla de páginas contiene el número de
marco de la página correspondiente en la memoria principal. Puesto que sólo
algunas de las páginas de un proceso pueden estar en la memoria principal, se
necesita un bit en cada entrada de la tabla para indicar si la página
correspondiente está presente (P) en la memoria principal o no. Si el bit indica
que la página está en la memoria, la entrada incluye también el número de
marco para esa página.
Paginación en Memoria Virtual
Edgar A. Mendieta
9
Otro bit de control necesario en la entrada de la tabla de páginas es el bit de
modificación (M), para indicar si el contenido de la página correspondiente se ha
alterado desde que la página se cargó en la memoria principal. Si no ha habido
cambios, no es necesario escribir la página cuando sea sustituida en el marco
que ocupa actualmente.
3.1 Tabla de Páginas.
Cada página tiene un número que se utiliza como índice en la tabla de páginas,
lo que da por resultado el número del marco correspondiente a esa página
virtual. Si el bit presente / ausente es 0, se provoca un señalamiento (trap) hacia
el sistema operativo. Si el bit es 1, el número de marco que aparece en la tabla
de páginas se copia en los bits de mayor orden del registro de salida, junto con
el ajuste (offset) de 12 bits, el cual se copia sin modificaciones de la dirección
virtual de entrada. Juntos forman una dirección física de 15 bits. El registro de
salida se coloca entonces en el bus de la memoria como la dirección en la
memoria física.
Paginación en Memoria Virtual
Edgar A. Mendieta
10
En teoría, la asociación de las direcciones virtuales con las físicas se efectúa
según lo descrito. El número de página virtual se divide en un número de página
virtual (los bits superiores)y un ajuste (los bits inferiores). El número de página
virtual se utiliza como un índice en la tabla de páginas para encontrar la entrada
de esa página virtual. El número de marco (si existe) se determina a partir de la
tabla de páginas. El número de marco se asocia al extremo superior del ajuste y
reemplaza al número de página virtual para formar una dirección física que se
puede enviar a la memoria.
La finalidad de la tabla de páginas es asociar las páginas virtuales con los
marcos. En términos matemáticos, la tabla de páginas es una función, cuyo
argumento es el número de página virtual y como resultado el número del marco
físico. Mediante el resultado de esta función, se puede reemplazar el campo de
la página virtual de una dirección virtual por un campo de marco, lo que produce
una dirección en la memoria física. Sin embargo hay que enfrentar dos aspectos
fundamentales:
•
La tabla de páginas puede ser demasiado grande.
•
La asociación debe ser rápida.
El primer punto proviene del hecho de que las computadoras modernas utilizan
direcciones virtuales de al menos 32 bits. Por ejemplo, si el tamaño de página es
de 4K, un hueco de direcciones de 32 bits tiene un millón de páginas; en el caso
de un hueco de direcciones de 64 bits, se tendría más información de la que uno
quisiera contemplar.
El segundo punto es consecuencia del hecho de que la asociación virtual – física
debe hacerse en cada referencia a la memoria. Una instrucción común tiene una
palabra de instrucción y también un operando de memoria. Entonces es
necesario hacer una, dos o más referencias a la tabla de páginas por cada
instrucción.
Muchos sistemas como los AS/400 de IBM y las estaciones de trabajo RISC
Sistemas/600 de IBM son usados tablas de paginas invertidas. Con este metodo
la parte del número de página virtual se contrasta en una tabla de dispersión por
medio de una función de dispersión simple. La tabla de dispersión contiene un
Paginación en Memoria Virtual
Edgar A. Mendieta
11
puntero a la tabla de páginas invertidas, que contienen a su vez las entradas de
la tabla de páginas.
3.2 Buffer de traducción adelantada.
Cada referencia a la memoria virtual puede generar dos accesos a la memoria:
uno para obtener la entrada de la tabla de páginas correspondientes y otro para
obtener el dato deseado.
Un esquema sencillo de memoria virtual podría tener el efecto de doblar el
tiempo de acceso a la memoria. Para solucionar este problema, la mayoría de
los esquemas de memoria virtual hacen uso de una cache especial para las
entradas de la tabla de páginas, llamada generalmente buffer de traducción
adelantada (TLB,Translation Lookaside Buffer) que contiene aquellas entradas
de la tabla de páginas usadas hace menos tiempo.
La organización de hardware de paginación resultante se muestra en la figura
siguiente.
Paginación en Memoria Virtual
Edgar A. Mendieta
12
Dada una dirección virtual, el procesador examinará primero la TLB. Si
la
entrada de la tabla de páginas buscada está presente se obtiene el número de
marco y se forma la dirección real. Si no se encuentra, el procesador emplea el
número de página como índice para buscar en la tabla de páginas del proceso y
examinar la entrada correspondiente de la tabla de páginas. Si no se encuentra
activo el bit de presencia, es que la página está en la memoria principal y el
procesador puede obtener el número de marco de la entrada de la tabla de
páginas para formar la dirección real. El procesador, además, actualiza la TLB
para incluir esta nueva entrada de la tabla de páginas. Si el bit de presencia no
está activo, es que la página buscada no está en la memoria principal y se
produce un fallo en el acceso a la memoria, llamado fallo de página.
Existe una serie de detalles adicionales sobre la organización real de la TLB.
Puesto que la TLB contiene sólo algunas de las entradas de la tabla de páginas
Paginación en Memoria Virtual
Edgar A. Mendieta
13
completa, no se puede indexar simplemente la TLB por el número de páginas.
Cada entrada debe incluir el número de página, además de la entrada completa
a la tabla de páginas. El procesador estará equipado con un hardware que
permita consultar simultáneamente varias entradas de la TLB para determinar si
hay coincidencia en el número de página. Esta técnica se denomina
correspondencia asociativa y contrasta con la correspondencia directa, que se
emplea para buscar en la tabla de páginas de la figura de Búsqueda directa y
asociativa. El diseñador de la TLB también debe considerar la forma en que se
organiza las entradas en la TLB y que entrada reemplazar cuando se introduce
una nueva.
Por último, el mecanismo de la memoria virtual debe interactuar con el sistema
de cache de la memoria principal. La de traducción con buffer ilustra esta
interacción. Una dirección virtual estará formada por el número de página más el
desplazamiento. Una vez que se ha generado la dirección real, que está en
forma de etiqueta (formada por los bits más significativos de la dirección real) y
un resto, se consulta la cache para ver si está presente el bloque que contiene
Paginación en Memoria Virtual
Edgar A. Mendieta
14
dicha palabra. Si lo está, es devuelto a la CPU. Si no, se toma la palabra de la
memoria principal.
3.3 Tamaño de Página.
Hay varios factores que considerar. Uno es la fragmentación interna. Sin duda,
cuanto menor sea el tamaño de página, menor será la cantidad de
fragmentación interna. Para optimizar el uso de la memoria principal, es positivo
reducir la fragmentación interna. Por otro lado, cuanto menor sea la página,
mayor será el número de páginas que se necesitan por proceso. Un número
mayor de páginas por proceso significa que las tablas de páginas que se
necesitan por proceso serán mayores. Así pues, pueden suceder dos fallos de
página para una única referencia a la memoria: primero, para traer la parte
necesaria de la tabla de páginas y, segundo, para traer la página del proceso.
Se puede considerar el efecto que tiene el tamaño de página en el porcentaje
de fallos de página y se basa en el principio de cercanía. Si el tamaño de página
es muy pequeño, normalmente estarán disponibles en la memoria principal un
gran número de páginas para cada proceso. Después de un tiempo, todas las
páginas de la memoria contendrán parte de las referencias más recientes del
Paginación en Memoria Virtual
Edgar A. Mendieta
15
proceso y la tasa de fallos de página será menor. Cuando de incrementa el
tamaño de la página, cada página individual contendrá posiciones cada vez más
distantes de cualquier referencia reciente; se atenúa el efecto de principio de
cercanía y comienza a aumentar la tasa de fallos de página, que comenzará a
bajar cuando, finalmente, el tamaño de página se aproxime al tamaño de todo el
proceso. Cuando una sola página abarca todo el proceso, no hay fallos de
página.
Una dificultad más es que la tasa de fallos de página viene determinada también
por el número de marcos asignados a un proceso. Por último el diseño del
tamaño de página está relacionado con el tamaño de la memoria física principal.
Al mismo tiempo que la memoria principal se hace mayor, el espacio de
direcciones que emplean las aplicaciones también crece. Esta tendencia es más
evidente en las computadoras personales y estaciones de trabajo, donde las
aplicaciones se hacen cada vez más complejas.
3.4 Ventajas y Desventajas de la Paginación.
Ventajas:
•
mejor utilización de la memoria física (programas implantados por
fragmentos, en páginas no consecutivas).
•
Posibilidad de cargar páginas solamente cuando éstas son referenciadas
(cargado bajo demanda).
•
Independencia del espacio virtual y de la memoria física (memoria virtual
generalmente más grande).
•
Posibilidad de llevar al disco solamente páginas modificadas.
•
Posibilidad de cobertura dinámica (emparejamiento).
Desventajas:
•
Fragmentación interna (todas las páginas no son llenadas).
•
Imposibilidad de relacionar dos (o varios) procesos relacionados a las
mismas direcciones en el espacio virtual.
4. Algoritmos de Reemplazo de Paginas.
Con el uso del método de paginación se puede llegar a saturar la memoria si se
incrementa demasiado el nivel de multiprogramación. Por ejemplo, si se corren
Paginación en Memoria Virtual
Edgar A. Mendieta
16
seis procesos, cada uno con un tamaño de diez páginas de las cuales en
realidad sólo utiliza cinco, se tiene un mayor uso del CPU y con marcos de
sobra. Pero pudiera suceder que cada uno de esos procesos quiera usar las diez
páginas resultando en una necesidad de 60 marcos, cuando solo hay 40
disponibles.
Esto provoca sobre-asignación y mientras un proceso de usuario se está
ejecutando, ocurre un fallo de página. El hardware se bloquea con el sistema
operativo, el cual checa en sus tablas internas y se da cuenta que es un fallo de
página y no un acceso ilegal de memoria. El sistema operativo determina si la
página está residiendo en disco, pero también determina que no hay marcos de
memoria disponibles en la lista de marcos libres.
Al ocurrir el fallo de página, el sistema operativo debe elegir una página para
retirarla de la memoria y usar el espacio para la página que se necesita para
desbloquear el sistema y que el hardware pueda seguir trabajando. Si la página
por eliminar de la memoria fue modificada, se debe volver a escribir al disco para
mantener la información actualizada; de lo contrario, si la página no fue
modificada no es necesario rescribir la información a disco y la página que se
carga simplemente se escribe sobre la página a borrar en memoria.
Paginación en Memoria Virtual
Edgar A. Mendieta
17
4.1. Algoritmo aleatorio
Este algoritmo consiste simplemente en reemplazar aleatoriamente
cualquier página de la memoria principal, sin hacer ningún esfuerzo de
predicción.
Es el algoritmo más sencillo dado que no requiere tener ninguna
información, sin embargo, por no hacer uso de dicha información sobre el
comportamiento del proceso, no puede lograr un buen desempeño.
4.2. Algoritmo de reemplazo de páginas óptimo
Este algoritmo debe de tener el menor índice de fallos de página de todos los
algoritmos. En teoría, este algoritmo debe de reemplazar la página que no va a
ser usada por el periodo más largo de tiempo.
Desafortunadamente, el algoritmo de reemplazo óptimo es fácil en teoría, pero
prácticamente imposible de implementar, dado que requiere conocer a futuro las
necesidades del sistema.
Tal algoritmo existe y ha sido llamado OPT o MIN, pero se usa únicamente para
estudios de comparaciones. Por ejemplo, puede resultar muy útil saber que
aunque algún nuevo algoritmo no sea óptimo, está entre el 12.3% del óptimo y
entre el 4.7% en promedio.
4.3. Algoritmo de reemplazo de páginas según el uso no tan
reciente.
Este algoritmo hace uso de los dos bits de estado que están asociados a cada
página. Estos bits son: R, el cual se activa cuando se hace referencia (lectura /
escritura) a la página asociada; y M, que se activa cuando la página asociada es
modificada (escritura). Estos bits deben de ser actualizado cada vez que se haga
referencia a la memoria, por esto es de suma importancia que sean activados
por el hardware. Una vez activado el bit, permanece en ese estado hasta que el
sistema operativo, mediante software, modifica su estado.
Estos bits pueden ser utilizados para desarrollar un algoritmo de reemplazo que
cuando inicie el proceso, el sistema operativo asigne un valor de 0 a ambos bits
en todas las páginas. En cada interrupción de reloj, limpie el bit R para distinguir
cuáles páginas tuvieron referencia y cuáles no.
Paginación en Memoria Virtual
Edgar A. Mendieta
18
Cuando ocurre un fallo de página, el sistema operativo revisa ambos bits en
todas las páginas y las clasifica de la siguiente manera:
Clase 0: La página no ha sido referenciada, ni modificada.
Clase 1: La página no ha sido referenciada, pero ha sido modificada.
Clase 2: La página ha sido referenciada, pero no ha sido modificada.
Clase 3: La página ha sido referenciada y también modificada.
Una vez obtenida la clasificación, elimina una página de manera aleatoria de la
primera clase no vacía con el número más pequeño. Esto porque para el
algoritmo es mejor eliminar una página modificada sin referencias en al menos
un intervalo de reloj, que una página en blanco de uso frecuente.
A pesar de que este algoritmo no es el óptimo, es fácil de implementar y de
comprender y con mucha frecuencia es el más adecuado.
4.4. Algoritmo de reemplazo “Primero en entrar, primero en
salir” (FIFO)
El algoritmo más sencillo para remplazo de páginas es el FIFO (First In – First
Out). Este algoritmo asocia a cada página el momento en que ésta fue traída a
memoria. Cuando una página debe ser reemplazada se selecciona a la más
antigua.
No es estrictamente necesario registrar el momento de entrada de la página a
memoria, sino que se puede crear una cola en la que se van agregando las
páginas conforme van llegando a la memoria. Cuando se debe eliminar una
página, se selecciona la que está al frente de la lista (o sea, la más antigua de la
lista). Cuando llega una página nueva, se inserta en la parte trasera de la cola.
Al igual que el algoritmo aleatorio, este algoritmo es fácil de comprender y de
programar. Sin embargo, su desempeño no siempre es del todo bueno. La
página reemplazada puede ser un módulo de inicialización que fue usado hace
mucho tiempo y ya no se tiene necesidad de él. Por otro lado, puede contener
Paginación en Memoria Virtual
Edgar A. Mendieta
19
una variable de uso muy frecuente que fue inicializada de manera temprana y
está en uso constante.
4.5. Algoritmo de reemplazo de páginas de la segunda
oportunidad
Este algoritmo es una modificación del FIFO. El algoritmo hace uso del bit de
referencia de la página. Cuando una página ha sido seleccionada para
reemplazo, se revisa el bit de referencia. Si tiene valor de 0, se procede a
reemplazar la página. Si por el contrario, el bit de referencia es 1 se le da a la
página una segunda oportunidad.
Cuando esto sucede, se le cambia el bit de referencia a 0 y se actualiza su
tiempo de llegada al tiempo actual para que la página se colocada al final de la
cola. De esta manera, la página espera todo un ciclo completo de páginas para
ser entonces reemplazada.
Si la página tiene un uso muy frecuente, el bit de referencia se mantendría
constantemente en 1 y la página no sería reemplazada. En la figura 10 se puede
apreciar el funcionamiento del algoritmo.
4.6. Algoritmo de reemplazo de páginas del reloj
Modificando el algoritmo de la segunda oportunidad (que a su vez es una
modificación de FIFO) obtenemos el algoritmo aumentado de la segunda
oportunidad o algoritmo del reloj. Usamos la misma clasificación vista en el
algoritmo de uso no tan reciente.
Este algoritmo organiza las páginas en una lista circular; se usa un apuntador (o
manecilla) que señala a la página más antigua.
Paginación en Memoria Virtual
Edgar A. Mendieta
20
4.7 Algoritmo de reemplazo de páginas “la de menor uso
reciente” (LRU)
Este algoritmo es una buena aproximación al óptimo y se basa en al observación
de que las páginas de uso frecuente en las últimas instrucciones se utilizan con
cierta probabilidad en las siguientes. De la misma manera, es probable que las
páginas que no hayan sido utilizadas durante mucho tiempo permanezcan sin
uso por bastante tiempo. Implementando el algoritmo con esta base, al ocurrir un
fallo de página, se elimina la página que no haya sido utilizada durante el tiempo
más grande. De ahí su denominación: menor uso reciente (LRU - Least Recent
Use).
A diferencia de los algoritmos anteriores, el LRU tiene un mejor rendimiento en
cuanto al tiempo de aprovechamiento del CPU y del uso de la memoria. Sin
embargo, el problema con este algoritmo es que su implementación es muy
cara, ya que requiere de una asistencia considerable de hardware. Otro
problema es el de determinar un orden para los marcos definido por el tiempo de
menor uso. Para éste último hay dos posibles implementaciones:
Contadores: En el caso más sencillo, se asocia cada entrada tabla-página un
campo de tiempo-de-uso y se le agrega al CPU un reloj lógico o contador. Este
reloj es incrementado en cada referencia de memoria. Siempre que se hace
referencia a una página, el contenido del registro del reloj es copiado al campo
de tiempo-de-uso en la tabla de páginas para esa página. De esta forma,
siempre se dispone del “tiempo” de la última referencia a cada página. La página
que se reemplaza es la del menor valor de tiempo. Este esquema requiere de
una búsqueda en toda la tabla de páginas para encontrar la página LRU, y una
escritura en memoria al campo de tiempo-de-uso en la tabla de páginas por cada
acceso a memoria. Los tiempos también se deben de mantener cuando las
Paginación en Memoria Virtual
Edgar A. Mendieta
21
tablas de páginas son alteradas (debido a organización del CPU). Se debe
considerar la posibilidad de sobrecarga en el reloj.
Pilas: Otra aproximación para implementar el reemplazo LRU es la de tener una
pila con los números de páginas. Siempre que se hace referencia a una página,
se quita de la pila y se pone en la parte superior. De esta manera, la parte
superior de la pila es la página de uso más reciente y la de abajo es la LRU.
III. GESTION DE MEMORIA EN UNIX Y SOLARIS
Las primeras versiones de Unix sólo utilizaban particiones variables sin ningún
esquema de memoria virtual., pero en las implementaciones actuales, incluidas
SVR4 y Solaris 2.x, utilizan memoria virtual paginada.
En SVR4 y Solaris, tienen dos esquemas de memoria separados. El sistema de
paginación ofrece una memoria virtual que asigna marcos de pagina en la
memoria principal a los procesos y también asigna marcos de pagina a las
memorias intermedias de los bloques de disco.
Un esquema de memoria virtual paginado se adapta peor a la gestión de la
asignación de memoria para el núcleo, por lo que se utiliza un asignador de
memoria del núcleo.
1. SISTEMA DE PAGINACIÓN
Paginación en Memoria Virtual
Edgar A. Mendieta
22
1.1 Estructuras de datos
Para la memoria virtual paginada, UNIX, hace uso de una serie de estructuras
de datos que son independientes de la maquina:
Tabla de páginas: posee una tabla por proceso, con una entrada para cada
página de la memoria virtual en proceso.
Descriptor de bloques de disco: asociado a cada página del proceso hay una
entrada en la tabla que describe la copia en el disco de la página virtual.
Tabla de marcos de página: describe cada marco de la memoria real y está
indexada por el número de marco.
Tabla de uso de intercambios: existe una tabla por cada dispositivo de
intercambio.
1.2 Reemplazo de páginas
La tabla de marcos de página se utiliza en el reemplazo de páginas, utilizando
varios punteros para crear listas dentro de esta tabla.
El algoritmo de reemplazo de páginas utilizado en SVR4 es conocido como
algoritmo del reloj de dos agujas, ya que utiliza un bit de referencia para cada
pagina de la memoria que reúne los requisitos (no bloqueada) para ser
expulsada. Este bit se pone a 0 cuando la página entra por primera vez y a 1
cuando se hace referencia a la pagina para una lectura o escritura. La aguja
frontal recorre la lista y pone el bit de referencia a 0, así en algún tiempo la aguja
trasera recorre la misma lista y comprueba el bit de referencia. Si el bit está a 1,
entonces la página se ha referenciado y se ignora el marco, en cambio, si el bit
está todavía 0, entonces la página no se ha referenciado en el intervalo y se
pone a estas páginas en una lista para ser reemplazadas.
Dos parámetros determinan la operación del algoritmo:
Velocidad de recorrido: la velocidad con la que las agujas se mueven a través de
la lista de páginas, en páginas por segundo.
Alcance entre agujas: el espacio entre la aguja frontal y la trasera.
IV. GESTION DE MEMORIA EN LINUX
Paginación en Memoria Virtual
Edgar A. Mendieta
23
Linux comparte algunas características de UNIX, pero su esquema de gestión
de memoria es bastante complejo.
1. MEMORIA VIRTUAL DE LINUX
1.1 Direccionamiento de memoria virtual
Linux hace uso de una estructura de tabla de páginas con tres niveles:
•
Directorio de páginas: un proceso activo tiene sólo un directorio de
páginas, donde cada entrada en el mismo, señala a una página del
directorio intermedio de páginas. Para un proceso activo, el directorio
debe estar en la memoria principal.
•
Directorio intermedio de páginas: es el que puede ocupar varias páginas y
donde cada entrada al directorio señala a una página de la tabla de
páginas.
•
Tabla de páginas: ésta también puede ocupar varias páginas y en cada
entrada se hace referencia a una página virtual del proceso.
Para utilizar esta estructura de la tabla de páginas a tres niveles, una dirección
virtual en Linux se ve como un conjunto de cuatro campos. El campo más a la
izquierda (el más significativo) se utiliza como índice en el directorio de páginas;
el siguiente se utiliza como índice en el directorio intermedio de páginas; el
tercero como índice en la tabla de páginas y el cuarto campo indica el
desplazamiento dentro de la página seleccionada de la memoria.
1.2 Asignación de páginas.
Desde la memoria principal, Linux define un mecanismo para tratar bloques de
páginas contiguos correspondientes a bloques de marcos de páginas contiguos,
para ello, se utiliza el sistema de colegas donde el núcleo mantiene una lista de
grupos de marcos de página contiguos de tamaño fijo.
1.3 Algoritmo de reemplazo de páginas.
El algoritmo de reemplazo de páginas de Linux se basa en el algoritmo del reloj,
que, en caso de ser el sencillo, se asocia un bit de uso y un bit de modificación a
cada página de la memoria principal. En Linux utiliza una variable edad que,
cada vez que se accede a la página, se incrementa la variable y recorre
periódicamente la reserva de paginas globales y disminuye la variable de edad
Paginación en Memoria Virtual
Edgar A. Mendieta
24
de cada página cuando rota por todas las páginas de la memoria principal. Una
página con un envejecimiento 0 es una página “vieja” que no se ha referenciado
en bastante tiempo y es la mejor candidata para el reemplazo, y cuanto mayor
valor de edad, más frecuentemente se ha usado la página recientemente y
menos elegible es para el reemplazo.
V. GESTION DE MEMORIA EN WINDOWS 2000
El gestor de memoria virtual de Windows 2000 (W2K) controla como se asigna
la memoria y como se realiza la paginación.
1. Mapa de Direcciones Virtuales de W2K
Cada proceso de usuario de W2K dispone de un espacio de direcciones
separado de 32 bits, lo que permite 4 Gbytes de memoria por proceso. Por lo
que, una parte de esta memoria esta reservada para el sistema operativo y cada
usuario tiene 2 Gbytes de espacio de direcciones virtual disponible.
1.1 Paginación en W2K
Cuando se crea un proceso en principio puede hacer uso de todo el espacio de
usuario de 2 Gbytes. Este espacio se divide en paginas de tamaño fijo, y
cualquiera puede cargarse en la memoria principal. En la práctica una página
puede estar en uno de estos tres estados:
•
Disponible: las páginas no usadas actualmente por este proceso.
•
Reservada: un conjunto de paginas contiguas que el gestor de la memoria
virtual separa para un proceso pero no cuentan para la cuota de memoria
del proceso hasta que se usan.
•
Confirmada: paginas para las cuales el gestor de memoria virtual
mantiene un conjunto de espacio separado en su archivo de paginación.
La distinción entre memoria confirmada y reservada es que la primera permite a
procesos o hilos declarar una cantidad de memoria que puede asignarse
rápidamente cuando sea necesaria; y la otra, minimiza la cantidad de espacio en
el disco separada para un proceso particular dejando ese espacio en disco para
otros procesos.
Paginación en Memoria Virtual
Edgar A. Mendieta
25
Conclusión
Así como la memoria es una de las partes más importantes de un sistema
informático, su administración tendrá la misma importancia; aunque los sistemas
de computación modernos contengan gran cantidad de memoria real, será
necesario expandir la misma o ocupar más espacio el cual será asignado en
disco. Los Sistemas Operativos actuales están diseñados para manejar cada
día más procesos que necesitaran gran cantidad de memoria para su ejecución,
luego entonces, es necesario asignar o reservar este espacio virtual de memoria
en lugares como el disco duro.
Gracias a los estudios realizados se puede entender de forma detallada que el
uso de la memoria virtual a ayudado y seguirá ayudando a los programadores de
Sistemas Operativos y de cualquier tipo de aplicación para que los mismos
tengan un mejor desempeño a la hora de ejecutarse.
Desde que surgieron los primeros Sistemas Operativos se buscó la forma de
ayudar al desempeño de los procesos en ejecución, es de esta forma que para
nuestro tiempo podemos contar con la memoria virtual y su técnica de
paginación, que mas que todo ayudara a la multiprogramación, multiproceso y
sobre todo nos dará un mejor soporte a aplicaciones sobre sistemas que
trabajen en redes.
Paginación en Memoria Virtual
Edgar A. Mendieta
26
Bibliografía
1. Stallings, William (1998) Sistemas Operativos. España: Prentices Hall.
Segunda Edición. 707 páginas.
2. Magister David Luis la Red Martinez (2001). “Paginación de Memoria
Virtual con Sistemas Expertos”. Universidad Nacional del Nordeste de
Argentina.
http://exa.unne.edu.ar/depar/areas/informatica/SistemasOperativos/SO0.h
tm#IG. Consulta 10/2004.
3. Magister David Luis la Red Martinez (2001). “Memoria Virtual”.
Universidad
Nacional
del
Nordeste
de
Argentina.
http://exa.unne.edu.ar/depar/areas/informatica/SistemasOperativos/Mono
gSO/MEMVIR02.htm . 14/2004.
Paginación en Memoria Virtual
Edgar A. Mendieta
Descargar