Está en la página 1de 9

Memoria virtual paginada:

Principio de funcionamiento

• Tanto la memoria principal como la memoria del disco se dividen en páginas de igual tamaño
(Página en Mv y marco de página en Mp).

• El número de páginas de la memoria virtual es mayor que el número de marcos de página de la


memoria física.

• En cada momento sólo las copias de un conjunto de páginas virtuales del programa residen en la
memoria física: conjunto de trabajo o conjunto activo

• El conjunto activo resulta relativamente estable a lo largo del tiempo, debido a la localidad
referencial que manifiestan los programas

Direcciones virtuales y físicas

• 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 nd del campo DP lo determina el tamaño de página (nd = log2 tamaño de
página).

• El número de bits nv del campo NPV lo determina el número de páginas virtuales (nv = log2 nº
de páginas

virtuales).

• Los bits nf 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 que los marcos de página.

• El número de bits del campo NPF lo determina el número de páginas físicas de Mp (nº de bits de
NPF = log2

nº de páginas físicas)

Tabla de páginas

• 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 los siguientes campos:

H: bit de acierto (Hit)

H = 1 Acierto de página

H = 0 Fallo de página

C: Bit de limpieza de página (Clear)

C = 1 Marco no modificado no necesita actualizarse la página en el disco

C = 0 Marco modificado necesita actualizarse

RWX: Tipo de acceso permitido a la página: Lectura, escritura, ejecución

Elección del tamaño de la página

• Es necesario tener en cuenta diversos factores:

Tamaño de las unidades de transferencia con memoria secundaria.

Es conveniente que el tamaño de la página coincida con un nº entero de sectores.

De esta forma se optimiza tanto el uso como el tiempo de acceso a MS (disco)

Tamaño de la tabla de páginas.

o Si el tamaño de la página aumenta el tamaño de la TP disminuye

Tamaño medio de las entidades lógicas del programa.

Si el tamaño de la página es similar al tamaño medio de las entidades lógicas del programa

se aprovecha al máximo la localidad espacial

Fragmentación interna

Cuando aumenta el tamaño de página la cantidad de memoria no usada en la última página

crece

Memoria virtual segmentada:


Concepto de memoria virtual segmentada

• Proporciona una forma lógica de organizar los programas y datos.

• Permite gestionar la memoria como múltiples espacios de direcciones o segmentos.

• Los segmentos tienen un tamaño variable, dinámico.

• Se puede asignar a cada segmento derechos de acceso y uso (privilegios y protección).


• Las DVs se componen de Número de Segmento (NS) y Desplazamiento en el Segmento

(DS).

• La traducción de DV a DF se realiza con la ayuda de la Tabla de Segmentos (TS) que

contiene una entrada por segmento.

Estructura funcional de la memoria virtual segmentada

• Mecanismo de traducción de Dirección virtual a Dirección física

Políticas de ubicación (placement) para memorias segmentadas (1)

• Cuando se produce un fallo de segmento hay que buscar en Mp una ubicación adecuada.

• El problema no es trivial porque tanto los segmentos como los huecos en Mp son de tamaño

variable.

• Para gestionar las zonas libres de Mp:

1. Se crea una lista enlazada con identificación del tamaño de cada hueco.

2. Se aplica la política de ubicación sobre la lista.

3. Determinado el hueco donde ubicar el segmento, se actualiza la lista.

4. Si no se encuentra un hueco apropiado interviene la política de sustitución.


Políticas de ubicación (placement) para memorias segmentadas (2)

• Las tres políticas de ubicación de segmentos más utilizadas son las siguientes:

Mejor ajuste (best fit)

La lista de huecos se mantiene ordenada en orden creciente de tamaño

Se ubica el segmento en el primer hueco con capacidad suficiente para albergarlo.

Peor ajuste (worst fit)

La lista de huecos se mantiene ordenada en orden decreciente de tamaño

Se ubica el segmento en el primer hueco con capacidad suficiente para albergarlo.

Primer ajuste (first fit)

La lista de huecos se ordena según las direcciones iniciales de los huecos

Se ubica el segmento en el primer hueco con capacidad suficiente para albergarlo.

Cuando transcurre un cierto tiempo, se acumulan un número elevado de huecos pequeños

próximos a la cabeza de la lista, penalizando las búsquedas.

Se evita adelantando cíclicamente, después de cada búsqueda, la posición inicial de la lista.

Memoria virtual combinada:


Tanto la paginación como la segmentación tienen sus ventajas. La paginación, que es transparente
al programador, elimina la fragmentación externa y, de este modo, aprovecha la memoria
principal de forma eficiente. Además, puesto que los fragmentos que se cargan y descargan de
memoria principal son de tamaño constante e igual para todos, es posible construir algoritmos de
gestión de memoria sofisticados que aprovechen mejor el comportamiento de los programas, tal y
como se verá. La segmentación, que es visible para el programador, tiene las ventajas antes
citadas, incluida la capacidad de manejar estructuras de datos que puedan crecer, el modularidad
y el soporte de la compartición y la protección. Para combinar las ventajas de ambas, algunos
sistemas están equipados con hardware del procesador y software del sistema operativo que las
permiten.

En un sistema con paginación y segmentación combinadas, el espacio de direcciones de un usuario


se divide en varios segmentos, según el criterio del programador. Cada segmento se vuelve a
dividir en varias páginas de tamaño fijo, que tienen la misma longitud que un marco de memoria
principal. Si el segmento tiene menor longitud que la página, el segmento ocupará sólo una
página.
Desde el punto de vista del programador, una dirección lógica también está formada por un
número de segmento y un desplazamiento en el segmento.

Desde el punto de vista del sistema, el desplazamiento del segmento se ve como un número de
página dentro del segmento y un desplazamiento dentro de la página.

La figura propone una estructura para soportar la combinación de paginación y segmentación.


Asociada con cada proceso existe una tabla de segmentos y varias tablas de páginas, una por cada
segmento del proceso. Cuando un proceso determinado está ejecutándose, un registro contendrá
la dirección de comienzo de la tabla de segmentos para ese proceso. Dada una dirección virtual, el
procesador emplea la parte de número de segmento como índice en la tabla de segmentos del
proceso para encontrar la tabla de páginas de dicho segmento. Entonces, la parte de número de
página de la dirección virtual se usará como índice en la tabla de páginas para localizar el número
de marco correspondiente. Éste se combina con la parte de desplazamiento de la dirección virtual
para generar la dirección real deseada.

Traducción de direcciones en un sistema con segmentación y paginación.

La figura a propone los formatos de la entrada de la tabla de segmentos y de la entrada de la tabla


de páginas. Como antes, la entrada de la tabla de segmentos contiene la longitud del segmento.
También contiene un campo base, que ahora se refiere a una tabla de páginas. Los bits de
presencia y modificación no son necesarios, puesto que estos elementos se manejan a nivel de
página. Pueden usarse otros bits de control para compartición y protección. La entrada de la tabla
de páginas es, básicamente, la misma que se usa en un sistema de paginación pura. Cada número
de página se convierte en el número de marco correspondiente si la página está presente en
memoria. El bit de modificación indica si se necesita escribir la página a disco cuando se asigna el
marco a otra página. Además, puede haber otros bits de control para ocuparse de la protección y
de otros aspectos de la gestión de memoria.
Reemplazo de Páginas:
La solución está en reemplazar páginas. Si no hay ningún marco libre, encontramos uno que no se
esté utilizando en ese momento y lo liberamos. Podemos liberar un marco escribiendo en disco
todo su contenido y modificando la tabla de páginas (y todas las demás tablas) para indicar que la
página ya no se encuentra en memoria (figura 7.3). El marco liberado puede usarse ahora para
contener la página por la que falló el proceso. Ahora se modifica la rutina de servicio de fallo de
página para incluir el reemplazo de página:

Encontrar la ubicación en disco de la página deseada.

Buscar un marco libre:

Si hay un marco libre, utilizarlo.

De lo contrario, utilizar un algoritmo de reemplazo de página con el fin de seleccionar un marco


víctima.

Escribir la página víctima en disco; ajustar las tablas de marcos y páginas.

Leer la página deseada en el nuevo marco libre; modificar las tablas de páginas y marcos.

Reanudar el proceso de usuario.

Si no quedan marcos libres, se requieren dos transferencias de páginas (una de entrada y otra de
salida). Esta situación duplica el tiempo de servicio de fallo de página y en consecuencia
aumentará el tiempo efectivo de acceso.

Este tiempo de procesamiento adicional se puede reducir utilizando un bit de modificación (dirty
bit). Cada página o marco puede tener asociado un bit de modificación en el hardware. El
hardware pone a uno el bit de modificación para una página cuando en ella se escribe una palabra
o un byte, indicando que ha sido modificada. Cuando seleccionamos una página para reemplazo,
examinamos su bit de modificación. Si está activo, sabemos que la página se debe escribir en
disco. Esta técnica también se aplica a páginas de sólo lectura. Con esto se reduce a la mitad el
tiempo de E/S, si la página no ha sido modificada.

Para implantar la paginación por demanda debemos resolver dos grandes problemas: desarrollar
un algoritmo de asignación de marcos y un algoritmo de reemplazo de páginas. Si tenemos varios
procesos en memoria, debemos decidir cuántos marcos asignar a cada uno. Además, cuando se
requiere un reemplazo de página es necesario seleccionar los marcos que se reemplazarán. El
diseño de algoritmos adecuados para resolver estos problemas es una tarea importante, ya que la
E/S de disco es muy costosa. Una pequeña mejora en los métodos de paginación por demanda
produce amplias ganancias en el rendimiento del sistema.
Asignación de Marcos:
¿Cómo asignamos la cantidad fija de memoria libre a los distintos procesos? Si disponemos de 93
marcos libres y de dos procesos, ¿cuántos marcos obtiene cada proceso?

No podemos asignar más del total de marcos libres. También hay un número mínimo de marcos
que pueden asignarse. Este número mínimo está definido por la arquitectura del conjunto de
instrucciones(máquina). Recuerde que cuando ocurre un fallo de página antes de terminar la
ejecución de una instrucción, ésta debe reiniciarse. Por tanto, debemos contar con marcos
suficientes para todas las páginas a las que pueda hacer referencia una instrucción.

Por ejemplo, considere una máquina donde todas las instrucciones de referencia a memoria que
permiten direccionamiento indirecto de un nivel (por ejemplo, en la página 16 hay una instrucción
de carga que puede referirse a una dirección de la página 0, la cual es una referencia indirecta a la
página 23), entonces la paginación necesita al menos tres marcos por proceso. El número mínimo
de marcos está definido por la arquitectura del computador, mientras que el número máximo está
definido por la cantidad de memoria física disponible. Entre estos dos extremos podemos adoptar
distintas opciones de asignación de marcos.

La manera más fácil de dividir m marcos entre n procesos consiste en otorgar a cada uno una
parte igual, m/n marcos. Por ejemplo, si hay 93 marcos y 5 procesos, cada proceso recibirá 18
marcos. Los tres marcos sobrantes pueden usarse como depósito de marcos libres. A este
esquema se le llama asignación equitativa.

Una alternativa es reconocer que los diversos procesos necesitarán cantidades distintas de
memoria. Si un pequeño proceso de 10K y una base de datos interactiva de 127K son los únicos
procesos que se ejecutan en un sistema con 62 marcos libres, no tiene mucho sentido asignar 31
marcos a cada proceso. El proceso pequeño no necesita más de 10 marcos, por lo que los 21
restantes se desperdician.

Se puede usar una asignación proporcional. Asignamos la memoria disponible a cada proceso de
acuerdo con el tamaño de éste. Sea vi el tamaño de la memoria virtual para el proceso pi y
definamos V=vi. Entonces, si el total de marcos disponibles es m, asignamos ai marcos al proceso
pi, donde ai es aproximadamente ai = vi / V x m. Por supuesto, debemos ajustar ai para que sean
enteros, mayores al número mínimo de marcos requerido por el conjunto de instrucciones, y que
sumados no excedan de m.

Para la asignación proporcional dividiríamos los 62 marcos entre dos procesos, uno de 10 páginas
y el otro de 127, asignando 4 y 57 marcos respectivamente, ya que 10/137 x 62 =(aprox.) 4,
127/137 x 62 =(aprox.) 57.
Por supuesto, tanto en la asignación equitativa como proporcional, la asignación para cada
proceso puede variar de acuerdo con el nivel de multiprogramación. Si aumenta el nivel de
multiprogramación, cada proceso perderá algunos marcos para proporcionar al nuevo proceso la
memoria necesaria. Por el contrario, si disminuye, los marcos liberados se distribuyen entre los
restantes.

El esquema de asignación proporcional se ha hecho dependiente del tamaño, pero nos podríamos
basar en sus prioridades o en una combinación entre tamaño y prioridad. De igual modo, se podría
permitir que un proceso de alta prioridad pueda reemplazar páginas de otro proceso de menor
prioridad. Esto haría aumentar el número de marcos del proceso de alta prioridad en perjuicio de
los de prioridad menor.

Hiperpaginación:
Si el número de marcos asignados a un proceso de baja prioridad desciende por debajo del
número mínimo requerido por la arquitectura del computador, debemos suspender la ejecución
de ese proceso. Luego debemos descargar sus páginas restantes, liberando los marcos asignados.
En general, cualquier proceso que no cuente con marcos suficientes provocará fallos de página
muy frecuentemente. Si se reemplazan páginas que a su vez están activas, estaremos sustituyendo
una página que casi de inmediato se volverá a necesitar. Por tanto, pronto vuelve a generarse otro
fallo de página, ocurriendo esto una y otra vez. A esta altísima actividad de paginación se le llama
hiperpaginación (thrashing). Un sistema está en hiperpaginación si emplea más tiempo paginando
que ejecutando.

La hiperpaginación ocasiona severos problemas de rendimiento. Considere la siguiente situación,


basada en el comportamiento real de los primeros sistemas de paginación.

El sistema operativo supervisa la utilización de la CPU. Si ésta es demasiado baja, aumentamos el


nivel de multiprogramación introduciendo un nuevo proceso en el sistema. Se emplea un
algoritmo de reemplazo de páginas global, que reemplaza páginas sin importar a qué procesos
pertenezcan. Suponga ahora que un proceso entra en una nueva fase de su ejecución y necesita
más marcos. Comienza a generar fallos de página y a tomar páginas de otros procesos. Sin
embargo, estos procesos necesitan esas páginas, por lo que también fallan, tomando páginas de
otros procesos. Todos estos procesos generando fallos de página deben usar el dispositivo de
paginación para intercambiar las páginas. A medida que se colocan en la cola del dispositivo de
paginación, la cola procesos listos se vacía. Mientras los procesos están bloqueados en espera del
dispositivo de paginación, la utilización de la CPU decrece.
El planificador de la CPU ve disminuir la utilización de ésta y, por tanto, incrementa el nivel de
multiprogramación. El nuevo proceso trata de comenzar tomando páginas de los procesos en
ejecución, lo que ocasiona más fallos de página y una cola más larga para el dispositivo de
paginación. Y se vuelven a repetir los pasos descritos. Ha comenzado la hiperpaginación y se
desploma la productividad del sistema. La tasa de fallos de página aumenta tremendamente y,
como resultado, se incrementa el tiempo efectivo de acceso a memoria. No se efectúa ningún
trabajo porque el sistema operativo está continuamente paginando.

También podría gustarte