Sistemas Operativos Curso 2016 Memoria Virtual Agenda Introducción. Implementación. Estudio de performance. Algoritmos de reemplazo. Estrategia de asignación de marcos (frames). Hiperpaginación (Trashing). Sistemas Operativos | Curso 2016 | Memoria Virtual 2/33 Introducción La necesidad de ejecutar programas que requerían más memoria de que se disponía en el sistema genero la técnica de memoria virtual propuesta por Fotheringham en 1961. La idea es mantener en memoria física solamente la memoria que el proceso está utilizando y el resto en disco. La técnica de memoria virtual abstrae la memoria principal en un gran arreglo uniforme de bytes. Si bien es una técnica muy potente, el uso descuidado puede generar una degradación importante del sistema. Sistemas Operativos | Curso 2016 | Memoria Virtual 3/33 Introducción Ej.: Estructura del espacio de direccionamiento en SunOS SPARC (32 y 64 bits). Sistemas Operativos | Curso 2016 | Memoria Virtual 4/33 Introducción Sistemas Operativos | Curso 2016 | Memoria Virtual 5/33 Introducción Esquema de la implementación de memoria virtual. Sistemas Operativos | Curso 2016 | Memoria Virtual 6/33 Implementación La implementación de memoria virtual es realizada a través de la técnica de paginación bajo demanda. Los sistemas en general brindan un esquema de segmentación, en donde los segmentos están divididos en páginas. En la paginación bajo demanda los procesos residen en un dispositivo de disco y son puestos en memoria principal cuando es necesario cargarlos para ejecutar. La carga del proceso en memoria no es total, sino que implementa un cargador “perezoso” (lazy swapper), que cargará las páginas según se vayan necesitando. A su vez, los sistemas utilizan una memoria denominada swap, que permite mantener en el sistema más memoria utilizada de la física disponible. Sistemas Operativos | Curso 2016 | Memoria Virtual 7/33 Implementación Sistemas Operativos | Curso 2016 | Memoria Virtual 8/33 Implementación Utilizar un esquema de este tipo requiere conocimiento de las páginas que están activas en memoria. Para esto se puede utilizar el valid-invalid bit. En la tabla de página se tienen las páginas que están cargadas en memoria principal, conteniendo el número de frame y el validinvalid bit. Al principio todas las entradas tienen el bit de validez marcado como i. Sistemas Operativos | Curso 2016 | Memoria Virtual 9/33 Implementación A la porción de memoria que está cargada en memoria principal de un proceso se le denomina memoria residente (resident memory). El acceso a memoria residente por parte de un proceso es tomado como un acceso normal, pero el acceso a memoria no residente genera un fallo de página (page fault). El fallo de página genera un trap a nivel de sistema operativo que activa una rutina de atención para cargar la página en memoria principal. Sistemas Operativos | Curso 2016 | Memoria Virtual 10/33 Implementación El acceso a la memoria genera la siguiente secuencia de pasos: – Verificar que el proceso referencia una página correcta dentro del espacio de direccionamiento. El proceso puede generar cualquier dirección de memoria dentro de su espacio de direccionamiento, pero no todas son válidas ya que existen “huecos” en el espacio virtual que pueden no haber sido asignados. Por ejemplo, un acceso fuera de un arreglo puede generar un acceso a una página virtual que no fue asignada al proceso. Esto genera un page fault o segmentation fault y el proceso es finalizado. – Si el acceso fue correcto dentro del espacio virtual, se busca en la tabla de página el frame correspondiente, verificando que el estado del bit de validez. Sistemas Operativos | Curso 2016 | Memoria Virtual 11/33 Implementación Si el bit de validez está encendido, se accede al frame correspondiente realizando la traducción dando por finalizado el acceso. Si el bit de validez está apagado se genera el trap de fallo de página. Rutina de atención del fallo de página: – Se busca un frame libre en memoria principal, sino hay ejecuta un algoritmo de reemplazo (se verá más adelante). – Se realiza un operación de lectura sobre el disco que guarda la página. La página se carga en el frame obtenido en el paso anterior. – Se actualiza la tabla de página e información en las estructuras del PCB del proceso para marcar que la página está disponible en memoria principal. – Finalmente, se retoma el control a la instrucción que fue interrumpida debido al fallo de página. Si este método es aplicado en forma rigurosa se tendrá un sistema puro de paginación por demanda (pure demand paging). El hardware necesario para la implementación es: – Tabla de página. – Espacio denominado swap del disco. Sistemas Operativos | Curso 2016 | Memoria Virtual 12/33 Estudio de la performance La técnica de paginación por demanda puede generar un alto impacto en el rendimiento del sistema. Una medida utilizada para ver el efecto que produce es el tiempo de acceso efectivo (effective access time). Se definida mediante la fórmula: EAT = (1-p) * ma + p * TRPF TRPF es el tiempo de resolución de el page fault, p la probabilidad de que ocurra un fallo de página y ma el tiempo del acceso a memoria. El tiempo de resolución involucra, entre otras cosas, salvar el estado del proceso, solicitud de lectura de la página a disco, ejecución del planificador, atención de rutina de completitud de la operación de E/S de parte del disco, corrección de tablas necesarias, espera de asignación del procesador y restaurar el estado al proceso. Sistemas Operativos | Curso 2016 | Memoria Virtual 13/33 Estudio de la performance Ej.: Tomando como TRPF = 25 milisegundos y ma = 100 nanosegundos, tenemos que: EAT = (1-p) * (100) + p * (25.000.000) EAT = 100 + 24.999.900 * p El tiempo de acceso efectivo es directamente proporcional a la probabilidad de fallo de página. Si queremos un 10% de degradación del sistema: 110 > 100 + 25000000 * p 10 > 25000000 * p p < 0,0000004 Esto da 1 acceso fallido cada 2.500.000 de accesos. Sistemas Operativos | Curso 2016 | Memoria Virtual 14/33 Algoritmos de reemplazo En un sistema cargado, el uso de la memoria principal por parte de los procesos puede agotar el recurso. La necesidad de traer a memoria principal una página en una memoria principal llena, genera la búsqueda de un frame a reemplazar. Un algoritmo de reemplazo equivocado genera un impacto significativo de degradación del sistema. El frame reemplazado (víctima) será puesto en memoria swap, y ante un eventual uso en el futuro volverá a memoria principal (a través de un page fault). La rutina de page fault debe incorporar el reemplazo: – Elegir la victima mediante el algoritmo de reemplazo. – Escribir la victima en memoria swap y ajustar la tabla de página correspondiente (swap out). – Cargar la página en el frame correspondiente. – Ajustar la tabla de página del proceso. Sistemas Operativos | Curso 2016 | Memoria Virtual 15/33 Algoritmos de reemplazo Sistemas Operativos | Curso 2016 | Memoria Virtual 16/33 FIFO (First In – First Out) El algoritmo reemplaza la página que hace más tiempo que está en memoria principal. Es un algoritmo fácil de implementar ya que requiere únicamente de una estructura tipo cola. Sin embargo este algoritmo sufre de la anomalía de Belady: – “Los fallos de páginas se incrementan al asignar más frames”. Sistemas Operativos | Curso 2016 | Memoria Virtual 17/33 Anomalía de Belady para FIFO Para la siguientes secuencia de acceso a página: – 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 – En 3 frames se tienen 9 fallos de página. – En 4 frames se tienen 10 fallos de página. Sistemas Operativos | Curso 2016 | Memoria Virtual 18/33 Segunda oportunidad (Second chance) En el algoritmo FIFO una página es reemplazada sin tener en cuenta las referencias que tuvo. Una alternativa es que cada página tenga una marca si fue referenciada (bit de referencia) luego de ser cargada en memoria. En el momento de reemplazo, se verifica el bit de referencias. Si está prendido, a la página se le da una segunda chance y es puesta al final de la cola. Luego se continua con la siguiente página que está al principio de la cola. Si está apagado, es seleccionada para ser reemplazada. Es un algoritmo un poco ineficiente, pero mejora la reducción de cantidad de fallos de página con respecto a FIFO. Sistemas Operativos | Curso 2016 | Memoria Virtual 19/33 Óptimo (Optimal) Un algoritmo que no sufre de la anomalía de Belady es el algoritmo óptimo. En este se reemplaza la página que no va a ser usada por el mayor período de tiempo. Este algoritmo es el que genera menos fallos de página de todos los posibles, pero es imposible de implementar ya es necesario saber a que páginas accederá un proceso. Sistemas Operativos | Curso 2016 | Memoria Virtual 20/33 No recientemente usada (Not Recently Used – NRU) Algoritmo de segunda oportunidad mejorado A los frames se les asocian dos bits: uno de referencia y otro de modificación. El bit de referencia se actualiza cada vez que se realiza una operación sobre el mismo (lectura o escritura), mientras que el bit de modificación se prende cada vez que se escribe. Cada tanto se genera una interrupción de reloj que limpia el bit de referencia. Al ocurrir un fallo de página los frames son divididos en 4 clases: – – – – Clase 0: no referenciada, no modificada. Clase 1: no referenciada, modificada. Clase 2: referenciada, no modificada. Clase 3: referenciada, modificada. Sistemas Operativos | Curso 2016 | Memoria Virtual 21/33 No recientemente usada (Not Recently Used – NRU) Algoritmo de segunda oportunidad mejorado Se reemplaza un frame al azar de la clase más baja que no este vacía. Es un algoritmo sencillo de implementar y para ser eficiente deberá tener soporte de hardware ya que cada referencia a memoria se deben actualizar los bits (de referencia y de modificación). Sistemas Operativos | Curso 2016 | Memoria Virtual 22/33 Menos recientemente usada (Least Recently Used – LRU) Uno de los algoritmo que más se aproxima al óptimo es el LRU. A cada página se le asocia el tiempo en que fue referenciada. La página elegida por el algoritmo de reemplazo será la que fue accedida hace más tiempo. Es un algoritmo que es óptimo en cuanto al uso hacia atrás de las páginas y es bastante utilizado por los sistemas operativos actuales. Para la implementación de este algoritmo es necesario soporte a nivel de hardware. No sufre la anomalía de Belady Sistemas Operativos | Curso 2016 | Memoria Virtual 23/33 Estrategia de asignación de frames La multiprogramación permite la ejecución concurrente de varios procesos. Los procesos realizarán sus pedidos de memoria y el sistema operativo tratará de resolver las solicitudes de forma de lograr un uso adecuado del recurso. Si el sistema operativo no implementa una estrategia de asignación de memoria, un proceso que requiera mucha memoria puede dejar al sistema colapsado. Es por eso necesario definir una estrategia de asignación adecuada para todos los procesos que comparten los recursos. Sistemas Operativos | Curso 2016 | Memoria Virtual 24/33 Estrategia de asignación de frames Una estrategia podría dividir la cantidad de frames según la cantidad de procesos que existan en el sistema. Esta estrategia no es muy eficiente ya que los procesos no tienen la misma necesidad de este recurso. Una alternativa es ponderar la cantidad de frames asignados según el uso de memoria que tengan. Sea si la cantidad de memoria virtual del proceso pi. La memoria virtual de todos el sistema es: S = ∑s i Si la cantidad de frames del sistema es m, definimos una estrategia de asignación ponderada donde al proceso pi se le asignan fi frames: fi = (si / S) * m Sistemas Operativos | Curso 2016 | Memoria Virtual 25/33 Estrategia de asignación de frames En la ejecución de un algoritmo de reemplazo existen dos opciones de páginas a reemplazar: – Reemplazo Global (Global replacement): Un proceso puede reemplazar un frame utilizado por otro. – Reemplazo Local (Local Remplacement): Un proceso reemplaza únicamente los frames que tiene asignado. A diferencia del global, en el reemplazo local la cantidad de frames asignado a un proceso no varía. Un problema de la estrategia global es que los fallos de página de un proceso afecta la eficiencia de ejecución de otro. La estrategia local independiza los fallos de página por proceso, pero ocupa frames de memoria que quizás sea poco usados y no son reemplazados. Es por eso que el reemplazo global es más utilizado. Sistemas Operativos | Curso 2016 | Memoria Virtual 26/33 Hiperpaginación La estrategia de asignación de frames limita a los procesos en la cantidad de frames que pueden tener en memoria. Si un proceso tiene un uso activo de un mayor número de frames que los asignados por el sistema, el proceso tendrá un alto porcentaje de page fault. El proceso estará continuamente realizando page fault debido a que sus frames están activos. Si un proceso pasa más tiempo paginando que ejecutando, se dice que el proceso sufre de hiperpaginación (Thrashing). La hiperpaginación degrada significativamente el rendimiento. Sistemas Operativos | Curso 2016 | Memoria Virtual 27/33 Hiperpaginación La multiprogramación genera un mayor uso del procesador, pero puede llevar al sistema a un estado de degradación por la hiperpaginación. Sistemas Operativos | Curso 2016 | Memoria Virtual 28/33 El modelo Working-Set Es necesario atacar el potencial problema de la hiperpaginación. Denning (1970) propuso el modelo del Working-Set (conjunto de trabajo), que es basado en el principio de localidad: “A medida que un proceso ejecuta va utilizando un conjunto de páginas llamadas activas”. El conjunto de páginas activas va cambiando a medida que ejecuta el proceso. Se define un conjunto de páginas (A), que son las más recientemente referenciadas. Este conjunto de páginas se denomina el working-set. Sistemas Operativos | Curso 2016 | Memoria Virtual 29/33 El modelo Working-Set Si el conjunto A es muy pequeño, no se logrará representar bien la localidad, y, si es muy grande, se tendrá una localidad muy grande. Sea WSSi la cantidad de frames que están en el working-set del proceso i. Se define: D = ∑WSSi D es la cantidad total de frames demandada por los procesos del sistema. Si D es mayor que la cantidad de frames disponibles en el sistema, se tendrá hiperpaginación. Sistemas Operativos | Curso 2016 | Memoria Virtual 30/33 El modelo Working-Set Mantener el working-set mediante las últimas referencias que realiza un proceso es bastante costoso, ya que tendremos inserciones y bajas continuamente, cada vez que hay una referencia tenemos que ver si ya está en el working-set. Es común adoptar la estrategia de elegir el working-set según las páginas accedidas en un tiempo t fijo (p.ej.: 100 milisegundos). El tiempo es de ejecución real del proceso. Se utiliza un timer que interrumpe con un t fijo. Un bit que marca si fue usado el frame desde la interrupción del timer anterior. Además, un campo que marca el tiempo de la última vez que fue referenciada. Sistemas Operativos | Curso 2016 | Memoria Virtual 31/33 El modelo Working-Set Cuando ocurre la interrupción del timer, se verifican todas las páginas del sistema para armar los working-set de los procesos. En la interrupción se verifica el bit de uso – Si está prendido, entonces el frame pertenece al working-set del proceso, se actualiza el campo del tiempo de uso con la hora actual del sistema y se apaga el bit para la verificación en la próxima interrupción. – Si está apagado, se verifica el campo de tiempo de uso con la hora actual del sistema. Si este tiempo es mayor que el t del proceso, entonces el frame no pertenece al working-set del proceso. Sistemas Operativos | Curso 2016 | Memoria Virtual 32/33 Estrategia de frecuencia de fallos de página (pagefault frequency) Alternativa al modelo de working-set Monitorea la frecuencia con que se producen los fallos de pagina – Si la frecuencia es mayor a un umbral Uh, el proceso necesita más marcos – Si la frecuencia es menor a un umbral Ul, el proceso puede liberar un marco Sistemas Operativos | Curso 2016 | Memoria Virtual 33/33