ISI – Sistemas Operativos – Resumen Capitulo 8 8. Memoria Virtual Permite la ejecución de procesos que pueden no estar completamente en memoria. Presenta la ventaja de que los programas pueden ser mayores que la memoria física. Separa la memoria lógica de la memoria física. No es fácil de implantar, y puede reducir considerablemente el rendimiento si no se emplea con cuidado. La capacidad de ejecutar un programa que se encuentra parcialmente en memoria tendría varias ventajas: 1. Un programa ya no estaría restringido por la cantidad de memoria física disponible. 2. Como cada programa de usuario ocuparía menos memoria física, podrían ejecutarse más programas al mismo tiempo, aumentando la utilización de la CPU y la productividad, pero sin incrementar el tiempo de respuesta o el tiempo de retorno. 3. Se requeriría menos E/S para cargar o intercambiar cada uno de los programas de usuario, por lo que se ejecutarían más rápido. Se implanta, generalmente, mediante la paginación por demanda, aunque la segmentación por demanda también puede usarse para proporcionar memoria virtual. Paginación por demanda: Los procesos residen en memoria secundaria (disco). Cuando los queremos ejecutar, los metemos en la memoria. Cuando un proceso se reincorpora por intercambio, el paginador adivina qué páginas usará el proceso, en vez de intercambiar un proceso, el paginador sólo trae a memoria las páginas que se necesiten, evitando colocar en memoria páginas que no se utilizaran, reduciendo el tiempo de intercambio y la cantidad de memoria física necesaria. Las páginas en la tabla de páginas tienen un bit válido-inválido que indica si éstas están en memoria o en disco (respectivamente). Si no se trae una página a memoria hasta que se necesite se denomina paginación por demanda pura. Pasos para manejar una falla de página: 3 la página está en el almacenamiento auxiliar sistema operativo 2 trampa 1 referencia cargar M 6 reiniciar instrucción i tabla de páginas 5 restablecer tabla de páginas 4 marco libre traer página que falta memoria física Hay que tener en cuenta que algunas instrucciones pueden modificar un valor de memoria y luego al querer modificar otro provocar una falla de pagina por lo reiniciar la instrucción no seria lo apropiado. Esto se puede resolver de dos maneras: verificar si las páginas se encuentran en memoria antes de ejecutar la instrucción o guardar los valores anteriores en registros temporales. También pueden producirse otro Rendimiento de la Paginación por demanda: Tiempo de acceso efectivo para una memoria paginada: TAE=(1-p) * am + p * tiempo de falla de pagina ISI – Sistemas Operativos – Resumen Capitulo 8 Una falla de página (cuando un proceso hace referencia una página que no se incorporó a la memoria) desencadena la siguiente secuencia: 1. El hardware de paginación traduce la dirección mediante la tabla de páginas, y observa que el valor del bit es “inválido”. 2. Genera una trampa para el SO (error de dirección no válida, pero en realidad es el resultado de la falla del SO al no transferir a memoria una parte válida para el proceso). 3. Guardar los registros de usuario y el estado del proceso. 4. Determinar si la interrupción fue una falla de página. 5. Verificar que la referencia a la página haya sido legal y determinar la ubicación de la página en el disco. 6. Buscar un marco libre: a) Si hay un marco libre, utilizarlo. 1) Esperar en la cola del dispositivo hasta que se atienda la solicitud de lectura. 2) Esperar durante el tiempo de posicionamiento o de latencia (o ambos) del dispositivo 3) Comenzar la transferencia de la página al marco libre b) De lo contrario, utilizar un algoritmo de reemplazo de página a fin de seleccionar un marco víctima. c) Escribir la página víctima en disco (si fue modificada) 1) Esperar en la cola del dispositivo hasta que se atienda la solicitud de escritura. 2) Esperar durante el tiempo de posicionamiento o de latencia (o ambos) del dispositivo 3) Comenzar la transferencia de la pagina victima a marco libre 4) Durante la espera asignar la UCP a otro usuario 5) Interrupción del disco 6) Guardar los registros y el estado del proceso del otro usuario 7) Determinar si la interrupción provino de disco 8) Esperar que la UCP se asigne nuevamente a este proceso 9) Reestablecer los registros de usuario, estado de proceso y corregir bit I-V de la tabla de paginas 10) Hacer a) 7. Durante la espera asignar la UCP a otro usuario 8. Interrupción del disco 9. Guardar los registros y el estado del proceso del otro usuario 10. Determinar si la interrupción provino de disco 11. Corregir la tabla de paginas y las demás tablas para indicar que la pagina deseada se encuentra en memoria 12. Esperar que la UCP se asigne nuevamente a este proceso 13. Reestablecer los registros de usuario, estado de proceso y la nueva tabla de paginas, y reanudar la instrucción interrumpida. Resumiendo: 1. Servir interrupción de fallo de pagina 2. Leer pagina 3. Reanudar proceso ISI – Sistemas Operativos – Resumen Capitulo 8 Reemplazo de páginas: m a rc o vá lid o -in vá lid o b it 1 ƒ f 0 v i 2 f v 4 ta b la d e p á g in a s s a c a r la p á g in a víc tim a víc tim a 3 c a m b ia r a in vá lid o in tro d u c ir la p á g in a deseada a ju s ta r la ta b la d e p á g in a s p a ra in c lu ir la n u e va m e m o ria fís ic a Algoritmos de reemplazo de páginas: se utilizan cuando se requiere un reemplazo de páginas para decidir que marcos intercambiar. Queremos el que presente la menor tasa de fallas de página. Algoritmo FIFO: Asocia a cada página el instante en el cual se trajo a memoria, cuando hay que reemplazar una página, se elige la más antigua. Se construye una cola FIFO para su implementación. Es fácil de comprender y programar, pero su rendimiento no siempre es bueno. Presenta la Anomalía de Belady. Algoritmo óptimo - OPT - MIN: Consiste en reemplazar la página que no se usar durante el mayor período de tiempo. Tiene la menor tasa de fallas de página de todos los algoritmos y nunca presentar la anomalía de Belady. Es difícil implantarlo, ya que requiere un conocimiento futuro de la serie de referencias. Por lo tanto, se utiliza para estudios comparativos. Algoritmo LRU: es una aproximación al algoritmo óptimo. Reemplaza la página que no se ha utilizado durante el mayor período de tiempo. Asocia a cada página el instante en que se usó por última vez. No presenta la anomalía de Belady. Son factibles dos implantaciones: • Con un contador. A cada entrada de la tabla de páginas se le asocia un registro de instante de uso y agregamos a la UCP un contador que se incrementa con cada referencia a memoria. • Con una pila. Consiste en mantener una pila de números de página. Cuando se hace referencia a una página, se saca de la pila y se coloca en la parte superior. De esta manera, en la parte inferior, se encuentran las páginas menos recientemente usada. Se implanta con una lista doblemente ligada. Hay un apuntador al fondo de la pila. Algoritmos aproximados al LRU: se basan en bits que se añaden a la tabla de págs que indican que págs están siendo usadas (1) y cuáles no (0). • Algoritmo de bits adicionales de referencia: se anotan los bits de referencia a intervalos regulares por lo que puedo identificar los accesos por periodos el menor numero será la candidata. Si hay coincidencia, desempato por FIFO o saco todas. • Algoritmo de segunda oportunidad: si el bit de referencia es 1, lo ponemos en 0 y buscamos otra página para reemplazar. Se puede implementar con una cola circular. Un apuntador indica cual es la siguiente página con bit de referencia a 0; conforme avanza, borra los bits de referencia. En el peor de los casos, cuando todos los bits estén en 1, el apuntador pondrá a todos los bits en 0 y luego se transformara en FIFO. • Algoritmo LFU (menos frecuentemente usada): mantiene un contador con el número de referencias a una página. Se cambia la página con menos recuento. Se puede desplazar los recuentos un bit a la derecha a intervalos regulares para evitar que una pagina que se referencia mucho pero ahora ya no se usa quede en memoria. • Algoritmo MFU (más frecuentemente usada): se basa en que la página con el menor recuento probablemente acaba de llegar y aún tiene que usarse. • Algoritmos adicionales: se toma un par ordenado con (bit de referencia, bit de modificación): ◊ (0,0) ni usada ni modificada. ◊ (0,1) no usada (recientemente), pero modificada. ISI – Sistemas Operativos – Resumen Capitulo 8 ◊ (1,0) usada pero limpia (no modificada). ◊ (l,1) usada y modificada. Reemplazamos la página en la clase inferior no vacía. Desempata el FIFO o el azar. Algoritmos ad hoc: antes de sacar la página a reemplazar, su reemplazante se pasa a un marco libre del depósito (mantiene un depósito de marcos libres). Esto permite que el proceso se reanude lo más rápido posible. Cuando se saca la victima su marco se agrega al depósito. También podemos aprovechar los momentos en que el dispositivo de paginación este libre para ir actualizando las paginas modificadas a disco. Se puede recordar que pagina se encuentra en el deposito para luego buscar primero ahí. Anomalía de Belady: refleja que, para algunos algoritmos de reemplazo de páginas, la tasa de fallas de páginas puede aumentar al incrementarse el número de marcos asignados. Deberíamos esperar que al proporcionar más memoria para un proceso su rendimiento mejorase. Asignación de marcos: el SO siempre asigna cualquier marco libre a un proceso, pero existe un numero mínimo de marcos a asignarse inicialmente. Este número esta definido por la arquitectura del computador y esta directamente relacionado con el nivel de indireccion de la misma (debemos tener marcos para la instrucción y para todas las direcciones que esta referencie). Algoritmos de asignación: Una estrategia de la asignación consiste en otorgar igual cantidad de marcos a cada proceso (asignación equitativa). O la asignación proporcional, que toma en cuenta la cantidad de páginas de cada proceso. marcas a asignar = (marcos del proceso / marcos de todos los procesos) * marcos disponibles Hiperpaginación (Thrashing): ocurre cuando un proceso emplea más tiempo paginando que ejecutando. Causas: Utilización de un algoritmo global de reemplazo (si utilizo uno local la limito a ese proceso) y asignación estática del CPT. Supongamos que empleamos un algoritmo global de reemplazo de páginas. Suponga que un proceso necesita más marcos. Comienza a tomar páginas de otro proceso. Lo que genera que estos procesos a su vez fallen y así... Todos estos procesos se colocan en la cola de espera del dispositivo y la cola de procesos listos se vacía. El ONI advierte esto y agrega un nuevo proceso a la mezcla el cual sigue el mismo comportamiento que los otros. Entonces el ONI trata de incrementar aun más el nivel de multiprogramación. Ha comenzado la hiperpaginacion y se desploma la productividad del sistema. La tasa de falla de páginas aumenta tremendamente y, como resultado, se incrementa el tiempo de acceso efectivo a memoria. No se efectúa ningún trabajo porque todos los procesos se dedican a paginar. Localidad o vecindad: conjunto de páginas que se utilizan conjuntamente. Un proceso, durante su ejecución, pasa de una localidad a otra. Están definidas por la estructura del programa y sus estructuras de datos. si asignamos menos marcos que el tamaño de la localidad, el proceso entrará en hiperpaginación. Area Activa: Conjunto de página de mayor demanda. Se utiliza un parámetro ∆ (delta). Se analiza las ∆ referencias mas recientes y con esto se obtiene una aproximación de la localida. Lo acertado de la aproximación depende del ∆ elegido. El sistema utiliza el tamaño del área activa para asignar el CPT a cada trabajo. Si la demanda de marcos es mayor que la suma de todos los CPT se producirá hiperpaginacion. Si pasa esto el sistema selecciona un proceso y lo suspende. La estrategia de área activa evita la hiperpaginacion manteniendo a la vez el nivel de multiprogramación lo mas alto posible. De esta manera optimiza la utilización de la ISI – Sistemas Operativos – Resumen Capitulo 8 CPU. El seguimiento del área activa se implementa mediante un bit de referencia y interrupciones a intervalos fijos (∆) de un cronometro Frecuencia de Fallas de Páginas y ratio de repaginación: Estos dos valores se analizan para evitar la hiperpaginacion. Si se da un elevado número de fallas de página. Se analiza el ratio de repaginación si es alto se asigna un nuevo marco al proceso ya que indica que la localidad esta creciendo de lo contrario la localidad esta cambiando por lo que no es necesario asignarle un nuevo marco Asignación global: un proceso selecciona un marco a reemplazar de todo el conjunto de marcos, incluso de otro proceso (incluso pudiendo comprometer a fallas en este). Un proceso no puede controlar su FFP. Asignación local: la selección está limitada a los marcos de un proceso; de esta manera un proceso sólo se ve afectado por él mismo en cuanto a la paginación. Ayuda a evitar hiperpaginacion Prepaginación: consiste en traer a memoria al mismo tiempo todas las páginas que se necesitarán. Tamaño de Páginas: • Grande: (son las que se usan en la actualidad) Disminuir tamaño de la tabla de págs. Minimizar el tiempo de E/S. Minimizar el número de fallas de páginas. • Pequeña: Minimizar fragmentación interna. Representa menos E/S y menos memoria total asignada. Mejora la localidad. Fijación de Páginas: se utiliza para fijar en memoria aquellas páginas que no pueden ser víctimas de reemplazos. Se asocia un bit de fijación a cada marco. Pueden contener: procesos del SO, páginas de usuario en espera de finalización de E/S, página de usuario recién incorporada y todavía no utilizada, etc. Tabla de páginas invertida: para cada página de la memoria tiene una entrada y se asocia en ella la dirección virtual de la página almacenada en esa localidad en memoria real (proceso, pagina, marco), de manera que sólo hay una tabla en todo el sistema y sólo tiene una entrada para cada página de memoria física (y esta ordenada por dirección de memoria física). Ocasiona problemas en el compartimiento de código. La tabla que indica la ubicación en disco se encuentra en el disco. Aumenta tiempo para buscar una página. También hay registros asociativos. Segmentación por demanda: El SO asigna la memoria por segmentos y los controla por medio de descriptores de segmento, que incluyen información sobre el tamaño, protecciones y ubicación del segmento. Un proceso no requiere que todos sus segmentos se encuentren en memoria para poder ejecutarse. En vez de esto, el descriptor de segmento contiene un bit de validez para cada segmento, el cual indica si se encuentra actualmente en memoria. Cuando un proceso direcciona un segmento que contiene datos o código, el hard examina este bit de validez. Si el segmento está en memoria principal, el acceso continúa sin problemas; en caso contrario se genera una trampa al SO (falla de segmento), igual que sucede en las implantaciones de la paginación por demanda. Las rutinas de administración de memoria primero determinan se hay espacio suficiente para el segmento, sino se efectúa una compactación, si luego de la compactación el espacio disponible es escaso se escoge un segmento para escribir en almacenamiento secundario (hay un bit de acceso por cada segmento y se usa el algoritmo de segunda oportunidad, también hay bit de fijación) e incorpora todo el segmento requerido (si el segmento sigue sin entrar en memoria se repite el procedimiento). ISI – Sistemas Operativos – Resumen Capitulo 8 Luego continúa la instrucción interrumpida (la que causó la falla de segmento). Se debe resaltar que la segmentación por demanda requiere un considerable tiempo de procesamiento adicional, por lo que ésta no es un medio óptimo para aprovechar al máximo los recursos de un sistema de computación. Sin embargo, en un hardware menos complejo la única alternativa es que no haya memoria virtual. Debido a los problemas que se presentan en los sistemas que carecen de memoria virtual, la segmentación por demanda es un compromiso razonable de funcionalidad dadas las restricciones del hardware que imposibilitan la paginación por demanda.