Descripción
• Motivacion:
– Los modelos de manejo de memoria anteriores precisan que un
proceso esté completamente en memoria para poder ser ejecutado. En
consecuencia, el tamaño de los programas se halla limitado por el tamaño de la memoria física
– Sin embargo, los programas no utilizan de forma simultánea todo su
espacio de direccionamiento; por ejemplo existen zonas de código para
el manejo de errores o datos de tablas que nunca se acceden. En
consecuencia, es posible ejecutar programas de tamaño mayor que la
memoria física
• Definición:
– La memoria virtual es una técnica que permite crear espacios lógicos
de direcciones de tamaño superior al de la memoria física (sólo limitado
por el tamaño de las direcciones lógicas en el procesador y por el
espacio disponible en el almacenamiento secundario)
– Se basa en utilizar una parte del almacenamiento secundario como una
extensión de la memoria principal
– Utilizan como mecanismo de traducción de direcciones la
segmentación o la paginación, pero permiten a los procesos guardar
los segmentos/páginas en el dispositivo de almacenamiento secundario

– Al espacio lógico de direcciones de un sistema que implemente
memoria virtual le denominaremos espacio virtual de direcciones. El
proceso utiliza direcciones que pueden residir en memoria principal o
en el sistema de almacenamiento secundario.
– A las direcciones lógicas se les llama direcciones virtuales
Justificación
• Beneficios de la utilización de memoria virtual
– El tamaño del programa no se halla limitado por el tamaño de la
memoria física, sino por el espacio virtual de direcciones
– Cada programa precisa de menos memoria física para ejecutarse, ya
que parte de él puede residir en el almacenamiento secundario. Es por
ello por los que aumenta el grado de multiprogramación, es decir el
número de procesos que se pueden ejecutar simultáneamente en
memoria
– Al mover páginas o segmentos a memoria y no todo el proceso (caso
del swapping) se reduce la cantidad de datos que se envían en la E/S
• Pero, ¿no será muy lento?
• No, gracias a la localidad.
– los accesos a memoria siguen patrones bien establecidos
– propiedad empírica debida a la forma de estructurar programas
• Localidad temporal
– probabilidad alta de repetir accesos a las mismas posiciones
– motivos: bucles, subrutinas, pilas y variables utilizadas para cuenta y
totalización
• Localidad espacial
– probabilidad alta de accesos a direcciones cercanas
– motivos: recorridos de vectores, ejecución secuencial de código, los
programadores suelen agrupar la declaración de variables relacionadas
Paginación versus Segmentación
• La paginación evita el problema de la fragmentación del espacio
de almacenamiento secundario
• Por este motivo es el mecanismo más utilizado para
implementar la memoria virtual
• En algunos casos se utiliza segmentación paginada (modelo
combinado)

Detección
y tratamiento de fallos de página
• Detección de los fallos de página
– un proceso intenta acceder a una dirección de una página que no está en
memoria
– el hw de traducción de direcciones genera una excepción
– se activa la rutina apropiada del S.O.

• Tratamiento (en rutina de tratamiento de la excepción)
– Comprobar en la TdP si el acceso es legal o ilegal
– Si es ilegal se termina el proceso
– Si no, se busca la página en disco
– Se busca un marco de página libre
• en la tabla de marcos libres que mantiene el S.O.
• si no hay libres, se reemplaza uno ocupado.
– Se programa la lectura de la página del disco
– Al terminar se actualiza la TdP del proceso
– Se reanuda la ejecución de la instrucción que causó el fallo
Implementación
• Cada entrada en la TdP o en la TdS contiene más información:
– un bit de presencia, que indica si el elemento referenciado está en
memoria o en disco
– Un bit de accedido, que indica si se ha accedido al segmento o página
– Un bit de sucio, que indica si el elemento ha sido modificado
• El sistema de memoria virtual debe resolver las siguientes
cuestiones:
– Obtención de páginas: Cuándo se deben traer las páginas o segmentos
del disco a memoria
– Colocación: Elegir dónde se debe ubicar en memoria la nueva página o
segmento.
– Reemplazo: En el caso de que no haya espacio para una colocación,
elegir la página o segmento a reemplazar
Estrategias de obtención de página
• Obtención por demanda:
– Las páginas se cargan únicamente cuando se hace una referencia a un
contenido de la página de forma explícita.
• permite transferir las páginas estrictamente necesarias
• no se dedica tiempo a decidir qué páginas transferir
• no resulta fácil adivinar qué páginas serán utilizadas
– El tiempo de ejecución de un proceso no es óptimo
• Obtención anticipada
– Se utiliza la localidad espacial para llevar a memoria las páginas que
tienen una probabilidad alta de ser referenciadas, pero antes de que se
produzca dicha referencia
• Reduce el tiempo de ejecución de un proceso
• Como las operaciones de E/S necesarias para cargar una página se
hacen en paralelo con la ejecución de otros procesos, no supone
demasiada sobrecarga
• Si el disco no está siendo utilizado al 100%, transferir alguna página
de más no es grave
Estrategias de reemplazo de página
• Objetivo: minimizar la tasa de fallos de página
• Comparación de algoritmos:
– nº de fallos de página generados al procesar una serie de accesos a
memoria con un determinado nº de marcos disponibles
– la serie puede ser real o generada matemáticamente
– incluir en la serie todos los accesos supone almacenar demasiada
información, basta con utilizar cadenas de referencia
• se usa sólo el número de página (el desplazamiento no influye)
• se usa sólo el primer acceso de una serie de accesos repetidos
(el 2º y posteriores no pueden generar fallos de página)
– ejemplo: sistema de 32 bits con páginas de 4 KB (12 bits de despl.)
• 01123800, 01123801, 01123802, 00332000, 01123800...
• cadena de referencia:
– sólo nº de página: 01123, 01123, 01123, 00332, 01123...
– eliminamos accesos consecutivos repetidos:
00123, 00332, 00123...
• Algoritmo óptimo
– Consiste en reemplazar la página que tardará más en referenciarse
– Garantiza el mínimo número de fallos de página posible para cualquier
número de marcos de página
– Es imposible de implementar ya que no se pueden adivinar las
referencias futuras (Se utiliza como patrón de comparación)
– Ejemplo de algoritmo óptimo

• FIFO: primero el primero en llegar
– Se reemplaza la página que más tiempo lleva en memoria
– Se añade en la TdP un campo con el tiempo en que se cargó la pagina
– Se puede implementar con una cola
– Tiene una tasa de fallos elevada, al reemplazar las páginas que se
cargan muy pronto y que además son muy usadas
• UMR: usado menos recientemente
– Se reemplaza la página que lleva más tiempo sin ser usada
– Se apoya en el principio de localidad temporal
– Se puede implementar con una lista y cada vez que se referencia una
página, se la pasa al final de la lista
– Produce una tasa de fallos muy baja (si no hay ciclos grandes), pero
tiene un coste de implementación muy alto, al tener que registrar todas
las referencias

• NUR: no usado recientemente
– No requiere hw especializado ya que emplea el bit de accedido
– Existen varias variantes que se aproximan al UMR
– Se elige el primer marco de la lista que tiene su bit de accedido a 0
– Es necesario poner los bits de accedido a 0 de forma periódica:
• Se ponen todos a cero en cada fallo de página
• Se ponen todos a cero a intervalos fijos de tiempo
• (mejora 1) Algoritmo del reloj:
– Se realiza un búsqueda circular en la lista de marcos, comenzando
siempre por el que ocupa la posición siguiente al último que fue
reemplazado. Si el marco tiene su bit de accedido a 1, se pone a 0 y se
comprueba el siguiente marco, así hasta encontrar un 0.
• (mejora 2) Algoritmo del reloj con bit de modificado:
– También se realiza un búsqueda circular en la lista de marcos, con la
idea de reemplazar una página que no haya sido accedida recientemente
y además que tampoco haya sido modificada

• Se realizan varios pasos:
– 1) Se buscan páginas con A=0 y M=0 sin modificar el bit A
– 2) Si falla, se buscan páginas con A=0 y M=1, pero poniendo el bit A a 0 de las páginas que se van recorriendo
– 3) Si falla, se vuelve al paso 1
– Tiene tasas de fallos parecidas al UMR, pero no necesita hw
especializado
– Tiene el problema de que cuando se producen ciclos grandes puede
producir muchos fallos de página
Eficiencia
• Para calcular el tiempo efectivo de acceso, se define:
– tam como tiempo de acceso a memoria sin fallo de página (100 ns)
– tamf como tiempo de acceso a memoria con fallo de página (tiempo que
transcurre entre que se trata la excepción, se lee la página del disco y se
continúa con la ejecución del proceso) (25 ms)
– TF como la tasa de fallos, es decir el tanto por uno de referencias que se
realizan a páginas no cargadas (1 fallo cada 1000 accesos)
• El tiempo efectivo de acceso se calcula como:
tea = (1-TF) tam + TFtamf
tea = (1-1/1000)*100 + 1/1000*25000 = 99'9 + 25 = 124'9 ns
• Ejemplo: Si se desean retrasos inferiores al 10 % del tam
tea < 1'1* tam , (1-TF)*100 + TF*25000 < 110 , TF < 10/24900
Debe haber menos de 1 fallo por cada 2490 accesos
Detalles de Implementación
• Se mantiene siempre un número mínimo de marcos libres
– se liberan marcos antes de que sea necesario utilizarlos
– evita tener que liberar marcos mientras los procesos están esperando a
que se traten los fallos de página →
disminuye el tiempo de tratamiento de los fallos de página
• Se aprovechan los tiempos de inactividad del dispositivo de
intercambio para ir guardando las páginas modificadas
• El S.O. anota la página que ocupa cada marco de página
– permite localizar páginas en marcos libres que no hayan sido reutilizados
(evitando accesos a disco)
– corrige decisiones incorrectas en el algoritmo de reemplazo
• Se permite que los procesos puedan anclar páginas en memoria
principal
– ventaja: evita fallos de página en casos importantes
– problema: reduce el nº de marcos gestionado por el S.O.
Asignación de marcos de página
• Cuando se ejecuta un proceso, será necesario que como mínimo
tenga asignados suficientes marcos como para poder traer todas las páginas a las que hace referencia cualquier instrucción
máquina.
• Las estrategias más directas de asignación del número de
marcos inicial que puede disponer cada proceso son:
– Dividir los marcos entre los procesos a partes iguales
– Dividir el número de marcos de forma proporcional al tamaño de los
procesos
– Asignar mayor número de marcos a los procesos más prioritarios
– Asignación mixta tamaño-prioridad
• Después, si la política del algoritmo de reemplazo de páginas es
global (frente a la local), este número podrá variar
– En este caso, como el número de marcos de un proceso depende de los
demás, éste presentará comportamientos diferentes en ejecuciones
sucesivas. Sin embargo esta estrategia es más eficiente de forma
general
Hiperpaginación
• Si el número de marcos que dispone un proceso cae por debajo
del mínimo necesario para ejecutar una instrucción, el proceso se
deberá detener en espera de que hayan suficientes marcos libres
• Si un proceso tiene pocos marcos asignados, es posible que
cada fallo de página reemplace a una página que va a ser
solicitada de nuevo. En consecuencia se dice que el proceso está
hiperpaginando, puesto que está más tiempo trayendo páginas
del disco que ejecutando instrucciones (trashing)
• Si el sistema emplea estrategias de reemplazo globales, puede
bloquearse debido a que hiperpaginan todos los procesos
– Si un S.O. aumenta el grado de multiprogramación en función del
porcentaje de utilización de la CPU
– Cuando un proceso necesita más marcos se apropia de los de otros
procesos, que empezaran a su vez a paginar.
– El descenso de uso de la CPU hace que se carguen más procesos
• Para evitar la hiperpaginación:
– Si la estrategia de reemplazo de páginas es local, se aconseja asignar un
número mínimo de marcos a los procesos
– Si la estrategia es global, habrá que monitorizar el número de marcos
disponible para cada proceso
• La siguiente figura muestra la relación entre el grado de
multiprogramación y la hiperpaginación

Conjunto de trabajo
• Se define el conjunto de trabajo de un proceso como el
conjunto de páginas que está utilizando activamente en un
determinado instante. De esta forma CT(t,v) define el conjunto de
páginas que han sido referenciadas en el intervalo [t-v,t]

• En función de v se obtendrá un conjunto de trabajo válido
– Si v es demasiado pequeño, CT(t,v) no contendrá el conjunto de trabajo
– Si v es demasiado grande, CT(t,v) contendrá muchas páginas que no
pertenecen al conjunto de trabajo del proceso
Asignación por conjunto de trabajo
• Se considera el conjunto de trabajo del proceso al conjunto de
páginas que deben estar en memoria principal para que el
proceso se ejecute con eficiencia
• En un sistema de paginación con obtención de páginas
anticipada, el S.O. deberá elegir un valor de v adecuado (llamado
ventana del conjunto de trabajo) de forma que CT(t,v) se
aproxime a la definición anterior
• El S.O asigna un número diferente de marcos a los procesos en
función del tamaño de su conjunto de trabajo
– Si hay suficientes marcos libres se inician nuevos procesos
– Si a un proceso no se le pueden asignar marcos suficientes se le
suspende
• Cuando un proceso cambia de conjunto se produce siempre un
incremento en su número de marcos asignado
• La implementación de esta estrategia es muy costosa
Asignación por frecuencia
de fallos de página
• El S.O. lleva cuenta de la tasa de fallos de página de los
procesos para asignarles un número de marcos determinado
• Implementación:
– Se eligen dos límites temporales, uno superior y otro inferior en función
del tiempo que ha trascurrido desde el último fallo de página
– Cuando ha trascurrido un tiempo mayor que el límite superior, se liberan
los marcos de las páginas a las cuales no se ha accedido durante ese
intervalo
– Cuando se produce un fallo de página en un tiempo menor al del límite
inferior, se le asigna al proceso un nuevo marco
• Con este algoritmo se ajusta dinámicamente el número de
marcos de los procesos, previniendo la hiperpaginación
• Esta estrategia, para asignar los marcos, monitoriza los fallos de
página, en vez de las referencias, por lo que tiene mejores
prestaciones que la estrategia de los CT.