Sie sind auf Seite 1von 23

TEMA 7: MEMORIA VIRTUAL

i. 7.1 Motivaciones y Ventajas ii. 7.2 Estrategias de la Administracin de Memoria Virtual iii. 7.3 Paginacin por Demanda a. 7.3.1 Rendimiento de la Paginacin por Demanda iv. 7.4 Reemplazo de Pginas a. 7.4.1 Algoritmos de Reemplazo v. 7.5 Asignacin de Marcos a. 7.5.1 Nmero Mnimo de Marcos b. 7.5.2 Algoritmos de Asignacin de Marcos vi. 7.6 Hiperpaginacin a. 7.6.1 Causas de la Hiperpaginacin b. 7.6.2 Localidad c. 7.6.3 Modelo del Conjunto de Trabajo d. 7.6.4 Frecuencia de Fallos de Pgina vii. 7.7 Tamao de Pgina

En el tema anterior slo se ha considerado la posibilidad de mantener la totalidad del proceso en memoria para poderlo ejecutar. Ahora veremos que las tcnicas de asignacin no-contigua de memoria abren una nueva posibilidad de gestin de memoria: la memoria virtual. Hablaremos de los motivos y ventajas que nos reporta la ejecucin de un programa parcialmente cargado en memoria. A partir de aqu, nos dedicaremos a examinar el tipo de actuaciones que debern incorporar los sistemas operativos para la gestin de la memoria virtual, con el fin de minimizar la proporcin de fallos de pginas que pueden ocurrir. La paginacin bajo demanda</ASER&AACUTE; rendimiento P acceso.< de efectivo tiempo el calcularemos ello, para y poltica, tipo este sistema un en inmediato efecto Estudiaremos memoria. a pgina llevar cundo pregunta la simple ms respuesta> A continuacin consideraremos la posibilidad de que no exista ningn marco de pgina libre donde ubicar una nueva pgina. Esta decisin traer consigo una ramificacin de cuestiones, tales como la repercusin otra vez en el tiempo de acceso, y el desarrollo de algoritmos de reemplazo de pginasy de asignacin de marcos. Para cada uno de estos algoritmos se realizar una reflexin sobre su funcionamiento, y valoracin de su rendimiento. Una revisin ms profunda sobre las situaciones que provocan reemplazo, y el nmero de marcos dedicados a cada proceso, nos conducirn al peligro que entraa la altsima tasa de fallos de pgina denominada hiperpaginacin. Estudiaremos sus causas y cmo se puede paliar esta molesta problemtica, por ejemplo a travs del conjunto de trabajo. Ser necesario acudir al concepto de localidad, por ser el principio en el que se basa esta estrategia. Concluiremos nuestro estudio sobre la hiperpaginacin proponiendo una aproximacin ms simple que tan slo considera la frecuencia de fallos de pgina. Vistos todos los aspectos, estrategias y polticas relativas a la gestin de la memoria estaremos en condiciones para realizar una valoracin sobre el parmetro tamao de pgina.

7.1 Motivaciones y Ventajas [SILB94] [BIC88]


En el tema anterior slo hemos considerado la posibilidad de que la totalidad del espacio de direcciones lgicas de un proceso se encuentre en memoria fsica antes de que el proceso se pueda ejecutar. Esta restriccin parece necesaria y razonable, pero es lamentable, ya que limita el tamao de un programa al tamao de la memoria fsica. De hecho, al examinar programas reales nos percatamos de que, en muchos casos, no se requiere el programa completo. Por ejemplo: A menudo los programas contienen cdigo para tratar condiciones de error poco frecuentes. Como en la prctica estos errores rara vez ocurren, o no se presentan, este cdigo casi nunca se ejecuta. A las matrices, listas y tablas frecuentemente se les asigna ms memoria de la que necesitan realmente. Pueden declararse matrices de 100 por 100 elementos, aunque pocas veces sea mayor de 10 por 10 elementos. Una tabla de smbolos de un ensamblador puede tener espacio para 3000 smbolos, aunque el programa tpico tenga menos de 200 smbolos. Ciertas opciones y caractersticas de un programa rara vez se usan, como la opcin de un editor que convierte minsculas en maysculas todos los caracteres del texto marcado. Incluso en aquellos casos donde se necesita todo el programa, es probable que no se requiera todo al mismo tiempo. La capacidad de ejecutar un programa que se encuentra parcialmente en memoria tendra varias ventajas:

Un programa ya no estara restringido por la cantidad de memoria fsica disponible. Los usuarios podran escribir programas para un espacio de direcciones virtuales muy grande, simplificando las labores de programacin. Como cada programa de usuario ocupara menos memoria fsica, podran ejecutarse ms programas al mismo tiempo, aumentando la utilizacin de la CPU y la productividad, pero sin incrementar el tiempo de respuesta. Se requerira menos E/S para cargar o intercambiarcada uno de los programas de usuario, por lo que se ejecutaran ms rpido. De esta manera, un programa en ejecucin que no se encuentre totalmente en memoria beneficiara tanto al usuario como al sistema. La memoria virtual es la separacin de la memoria lgica del usuario de la memoria fsica. Esta separacin permite proporcionar a los programadores una gran memoria virtual cuando slo se dispone de una memoria fsica ms pequea. La memoria virtual facilita las tareas de programacin, ya que el programador no se tiene que preocupar por la cantidad de memoria fsica disponible.

7.2 Estrategias de la Administracin de Memoria Virtual [DEIT93] [STAL95]


De las diversas organizaciones de memoria tratadas en el tema anterior nicamente las que realizan una asignacin no contigua (paginacin, segmentacin y segmentacin paginada) del almacenamiento permiten implantar una administracin virtual de la memoria. Para cualquiera de las tres formas de organizar esta memoria virtual habr que determinar: Estrategias de obtencin. Determinan cundo se debe transferir una pgina o un segmento del almacenamiento secundaria al primario. Las estrategias de obtencin por demanda esperan a que un proceso en ejecucin haga referencia a una pgina o a un segmento antes de traerla/lo. Los esquemas de obtencin anticipada intentan determinar por adelantado a qu pginas o segmentos har referencia un proceso. Si la probabilidad de una referencia es alta y hay espacio disponible, entonces se trae al almacenamiento primario la pgina o segmento antes de que se haga la referencia explcita Estrategias de colocacin. Determinan en qu lugar de la memoria principal se debe colocar una pgina o un segmento entrante. Los sistemas de paginacin vuelven trivial la decisin de colocacin, porque una pgina entrante se puede ubicar en cualquier marco de pgina disponible. Los sistemas con segmentacin requieren estrategias de colocacin como las tratadas en el contexto de los sistemas de multiprogramacin con particiones dinmicas. Estrategias de reemplazo. Sirven para decidir qu pgina o segmento se debe desplazar para dejar espacio a una pgina o segmento entrante cuando est completamente ocupada la memoria principal.

7.3 Paginacin por Demanda [SILB94]


Un sistema de paginacin por demanda es similar a un sistema de paginacin con intercambios. Los procesos residen en memoria secundaria (en el disco). Cuando queremos ejecutar un proceso, lo metemos en memoria. Sin embargo, en vez de intercambiar todo el proceso hacia la memoria, utilizamos un intercambiador perezoso. Un intercambiador perezoso nunca reincorpora una pgina a memoria a menos que se necesite. Como ahora consideramos un proceso como una secuencia de pginas, en vez de un gran espacio contiguo de direcciones, el trmino intercambio es tcnicamente incorrecto. Un intercambiador manipula procesos enteros, mientras que un paginador trata con las pginas individualmente de un proceso.

Cuando un proceso se reincorpora, el paginador lleva a memoria las pginas necesarias. As evita colocar en la memoria pginas que no se utilizarn, reduciendo el tiempo de intercambio y la cantidad de memoria fsica necesaria. Este esquema requiere apoyo del hardware. Generalmente se aade un bit ms a cada entrada de la tabla de pginas: un bit vlido-invlido. Cuando este bit est asignado como vlido, indica que la pgina asociada se encuentra en memoria. Si el bit est como invlido, este valor indica que la pgina est en disco. Una pgina marcada como invlida no tendr ningn efecto si el proceso nunca intenta acceder a esa pgina. Pero qu sucede si el proceso trata de usar una pgina que no se incorpor a la memoria? Si adivinamos mal y el proceso trata de acceder a una pgina que no se trajo a memoria, ocurrir una trampa de fallo de pgina. El hardware de paginacin, al traducir la direccin mediante la tabla de pginas, observar que el valor del bit es invlido, generando una trampa para el sistema operativo (error de direccin no vlido). Normalmente, un error de direccin no vlida es consecuencia de intentar utilizar una direccin de memoria ilegal; en este caso, el proceso deber terminar. Sin embargo, en esta situacin la trampa es el resultado del fallo de pgina del sistema operativo al no transferir a memoria una parte vlida del proceso, tratando de minimizar el tiempo adicional de transferencia de disco y los requisitos de memoria. Por tanto, debemos corregir esta omisin. El procedimiento es sencillo (figura 7.2): Consultamos una tabla interna (que por lo general se conserva en el PCB del proceso) para determinar si la referencia fue un acceso a memoria vlido o invlido. Si fue invlido, abortamos el proceso. Si se trat de una referencia vlida, pero an no hemos trado la pgina, la incorporamos. Encontramos un marco libre (por ejemplo, seleccionando uno de la tabla de marcos libres). Planificamos una operacin para leer de disco la pgina deseada en el marco recin asignado. Cuando ha concluido la lectura de disco, modificamos la tabla interna que se conserva junto con el proceso y la tabla de pginas para indicar que ahora la pgina se encuentra en memoria. Reiniciamos la instruccin interrumpida por la trampa de direccin ilegal. El proceso ahora puede acceder a la pgina como si siempre se hubiera encontrado en memoria.

Es importante observar que, como almacenamos el contexto del proceso (registros, cdigo de condicin, contador de instrucciones), interrumpido al ocurrir un fallo de pgina, podemos reanudarlo exactamente en el mismo punto y estado, excepto que ahora la pgina deseada se encuentra en memoria y se puede acceder a ella. El caso ms extremo es comenzar la ejecucin de un proceso sin pginas en memoria. De inmediato, con la primera instruccin, el proceso presentara una fallo de pgina. Despus de traer de memoria esta pgina, el proceso contina su ejecucin, provocando fallos cuando sea necesario hasta que todas las pginas que necesita se encuentren en memoria. Esto es la paginacin por demanda pura: no traer una pgina a memoria hasta que se requiera. En teora, algunos programas pueden acceder a una nueva pgina de memoria con cada instruccin que ejecutan, provocando posiblemente un fallo de pgina por cada instruccin. Esta situacin provocara un rendimiento inaceptable. Por fortuna, los anlisis de procesos en ejecucin han mostrado que esta situacin es muy poco probable. Los programas suelen poseer una localidad de referencias (como veremos ms adelante), que brinda un rendimiento aceptable en la paginacin bajo demanda.

El hardware para apoyar la paginacin bajo demanda es el mismo que se usa para la paginacin y segmentacin, y los intercambios: Tabla de pginas. Esta tabla tiene la capacidad para marcar una entrada como invlida usando un bit vlido-invlido o un valor especial de los bits de proteccin. Memoria secundaria. Esta memoria contiene las pginas que no se conservan en la memoria principal. La memoria secundaria casi siempre es un disco de alta velocidad. Adems de esta ayuda hardware, se requiere un considerable apoyo software, como veremos luego. Hay que imponer algunas restricciones arquitectnicas. Un aspecto crtico es la capacidad para reiniciar cualquier instruccin despus de un fallo de pgina. En la mayora de los casos es fcil cumplir este requisito. Si falla la pgina al buscar la instruccin, podemos reiniciarla efectuando de nuevo la bsqueda. Si ocurre el fallo al buscar el operando, debemos buscar de nuevo la instruccin, decodificarla y luego buscar el operando.

Como el peor de los casos, considere una instruccin de tres direcciones como ADD (suma) de A y B, colocando el resultado en C. Los pasos para ejecutar esta instruccin seran Buscar y decodificar la instruccin ADD. Buscar A. Buscar B. Sumar A y B. Guardar el resultado en C. Si se presentara un fallo al almacenar en C, tendramos que obtener la pgina deseada, traerla a memoria, corregir la tabla de pginas y reiniciar la instruccin. Este inicio implica buscar de nuevo la instruccin, decodificarla, buscar una vez ms los dos operandos y volver a sumar. Esto significa repetir la instruccin. La principal dificultad surge cuando una instruccin puede modificar varias localidades distintas. Por ejemplo, considere una instruccin MVC (mover carcter), que puede mover hasta 256 bytes de una localidad a otra (que pueden coincidir parcialmente). Si alguno de los bloques (fuente o destino) sobrepasa un lmite de pgina, puede ocurrir un fallo de pgina despus de haber efectuado parte de la transferencia. Adems, si los bloques fuente y destino se superponen es probable que se modifique el bloque fuente, por lo que no podramos reiniciar la instruccin. Este problema se resuelve de dos maneras. En una de las soluciones, el microcdigo calcula y trata de acceder a ambos extremos de los bloques. Si va a ocurrir una fallo de pgina, suceder en esta etapa, antes de modificar algo. Entonces puede efectuarse la transferencia si sabemos que no ocurrir ningn fallo de pgina, ya que todas las pginas en cuestin se encuentran en memoria. La otra solucin utiliza registros temporales para contener los valores de las localidades sobreescritas. Si se presenta un fallo de pgina, todos los valores que haba antes de que ocurriera la trampa regresan a la memoria. Esta accin restablece la memoria a su estado anterior a la ejecucin de la instruccin, por lo que podemos repetir la instruccin. Estos no son los nicos problemas arquitectnicos que pueden surgir al aadir paginacin, pero s ilustran sus dificultades. En los sistemas de computacin, la paginacin debe ser completamente transparente para el proceso de usuario. 3.1 Rendimiento de la Paginacin por Demanda [SILB94] La paginacin por demanda puede tener un efecto considerable en el rendimiento de un sistema de computacin. Para ver la razn, calculemos el tiempo de acceso efectivo para la memoria paginada por demanda. El tiempo de acceso a memoria, am, para la mayora de los sistemas de computacin actuales va de 10 a 200 nanosegundos. Mientras no tengamos fallos de pgina, el tiempo de acceso efectivo es igual al tiempo de acceso a memoria en un sistema paginado (que sera dos accesos a memoria, uno a la tabla de pginas y otro a la direccin de memoria). Sin embargo, si ocurre un fallo de pgina, primero debemos leer de disco la pgina indicada y luego acceder a la palabra deseada. Sea p la probabilidad de un fallo de pgina (0 p => 1). Podemos esperar que p sea muy cercano a cero; es decir, que habr slo unas cuantos fallos de pgina. Entonces, el tiempo efectivo de acceso es: tiempo efectivo de acceso = (1-p) x am + p x tiempo de fallo de pgina

Para calcular este tiempo necesitamos saber cunto tiempo se requiere para servir un fallo de pgina. Un fallo de pgina desencadena la siguiente secuencia: 1. Trampa para el sistema operativo. 2. Guardar el contexto del proceso. 3. Determinar si la interrupcin fue un fallo de pgina. 4. Verificar que la referencia a la pgina haya sido legal y determinar la ubicacin de la pgina en el disco. 5. Leer de disco a un marco libre: 5a. Esperar en la cola del dispositivo hasta que se atienda la solicitud de lectura. 5b. Esperar durante el tiempo de bsqueda y de latencia del dispositivo. 5c.Comenzar la transferencia de la pgina al marco libre. 6. Durante la espera, asignar la CPU a otro proceso (planificacin). 7. Interrupcin del disco de fin de la E/S. 8. Guardar el contexto del otro proceso. 9. Determinar si la interrupcin provino de disco. 10. Corregir la tabla de pginas y las dems tablas para indicar que la pgina deseada se encuentra en memoria. 11. Esperar que la CPU se asigne nuevamente a este proceso. 12. Restablecer el contexto y la nueva tabla de pginas, y reanudar la instruccin interrumpida. Es posible que no sean necesarios todos los pasos para todos los casos. Por ejemplo, en el paso 5 suponemos que la CPU se asigna a otro proceso mientras se efecta la E/S. Esta disposicin permite que la multiprogramacin mantenga la utilizacin de la CPU pero requiere tiempo adicional para reanudar la rutina de servicio del fallo de pgina cuando concluye la transferencia de E/S. En cualquier caso, nos enfrentamos a tres componentes principales del tiempo de servicio del fallo de pgina: Servir la interrupcin de fallo de pgina. Leer la pgina. Reanudar el proceso. La primera y tercera tareas pueden reducirse a varios cientos de instrucciones. Estas tareas pueden costar de 1 a 100 microsegundos cada una. El tiempo de cambio de pgina, por otra parte, ser cercano a los 24 milisegundos. Un disco de cabeza mvil tiene una latencia de 8 milisegundos, un tiempo de bsqueda de 15 milisegundos y un tiempo de transferencia de un milisegundo. Por tanto, el tiempo total de paginacin ser

cercano a los 25 milisegundos, incluyendo tiempo de hardware y software. Recuerde que slo consideramos el tiempo de servicio del dispositivo. Si una cola de procesos espera al dispositivo, tenemos que aadir el tiempo de cola mientras esperamos a que el dispositivo de paginacin est libre para atender nuestra solicitud, lo que incrementa an ms nuestro tiempo de intercambio. Si tomamos como tiempo promedio de servicio de fallo de pgina 25 milisegundos y un tiempo de acceso a memoria total de 100 nanosegundos, entonces el tiempo efectivo de acceso, expresado en nanosegundos, es Tiempo efectivo de acceso = (1-p) x 100 + p x 25 miliseg = = (1-p) x 100 + p x 25000000 = 100 + 24999900 x p. Vemos entonces que el tiempo efectivo de acceso es directamente proporcional a la tasa de fallos de pgina. Si un acceso de cada mil provoca un fallo de pgina, el tiempo de acceso efectivo es de 25 milisegundos. El computador sera 250 veces ms lento debido a la paginacin por demanda. Si queremos una degradacin menor al 10%, necesitamos 110 > 100 + 25000000 x p, 10 > 25000000 x p, p < 0.0000004 O sea, para mantener un nivel razonable de lentitud adicional provocada por la paginacin por demanda, slo podemos permitir que se tenga menos de un fallo de pgina por cada 2500000 accesos. Es muy importante mantener baja la tasa de fallos de pgina en un sistema de paginacin por demanda; de lo contrario aumenta el tiempo efectivo de acceso, frenando considerablemente la ejecucin de los procesos. Otro aspecto de la paginacin por demanda es el manejo y uso del espacio de intercambios. La E/S de disco para el espacio de intercambios generalmente es ms rpida que con el sistema de ficheros. Esto es as porque se asigna espacio en bloques de mayor tamao y no se usan las bsquedas de ficheros ni los mtodos de asignacin indirecta. Por tanto, es posible que el sistema obtenga una mejor productividad de la paginacin copiando todo el contenido de un fichero al espacio de intercambios al iniciar el proceso, y luego efectuar la paginacin por demanda desde el espacio de intercambios.

7.4 Reemplazo de Pginas [SILB94]


En nuestra presentacin, la tasa de fallos no ha sido un problema serio, ya que, como mximo, hay un fallo de pgina por cada pgina cuando se hace referencia a ella por primera vez. Esto no es muy exacto. Considere que, si un proceso de 10 pginas slo emplea la mitad de ellas, entonces la paginacin por demanda ahorra la E/S necesaria para cinco pginas que nunca se usarn. Podemos aumentar el nivel de multiprogramacin ejecutando el doble de procesos. As, si tuviramos 40 marcos, podramos ejecutar ocho procesos, en lugar de cuatro. Si aumentamos nuestro nivel de multiprogramacin, estamos sobreasignando la memoria. Si ejecutamos seis procesos, cada uno con un tamao de 10 pginas, pero que slo utilizan cinco, tenemos mayor utilizacin de la CPU y productividad, con diez marcos de sobra. Sin embargo, es posible que cada uno de estos procesos, para un conjunto de datos en particular, requiera sus 10 pginas, lo que supondra una necesidad de 60 marcos cuando tan slo se dispone de 40. Aunque esta situacin puede ser poco probable, la posibilidad aumenta con el nivel de multiprogramacin. Puede, entonces, darse el caso de que produzcan demanda de pginas para las que no hay marcos. El sistema operativo podra abortar el proceso de usuario, pero la paginacin dejara de ser transparente, ya que, por razones desconocidas para el usuario se ha acabado con la ejecucin de su proceso.

La solucin est en reemplazar pginas. Si no hay ningn 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 pginas (y todas las dems tablas) para indicar que la pgina ya no se encuentra en memoria (figura 7.3). El marco liberado puede usarse ahora para contener la pgina por la que fall el proceso. Ahora se modifica la rutina de servicio de fallo de pgina para incluir el reemplazo de pgina: Encontrar la ubicacin en disco de la pgina deseada. Buscar un marco libre: Si hay un marco libre, utilizarlo. De lo contrario, utilizar un algoritmo de reemplazo de pgina con el fin de seleccionar un marco vctima. Escribir la pgina vctima en disco; ajustar las tablas de marcos y pginas. Leer la pgina deseada en el nuevo marco libre; modificar las tablas de pginas y marcos. Reanudar el proceso de usuario. Si no quedan marcos libres, se requieren dos transferencias de pginas (una de entrada y otra de salida). Esta situacin duplica el tiempo de servicio de fallo de pgina y en consecuencia aumentar el tiempo efectivo de acceso. Este tiempo de procesamiento adicional se puede reducir utilizando un bit de modificacin (dirty bit). Cada pgina o marco puede tener asociado un bit de modificacin en el hardware. El hardware pone a uno el bit de modificacin para una pgina cuando en ella se escribe una palabra o un byte, indicando que ha sido modificada. Cuando seleccionamos una pgina para reemplazo, examinamos su bit de modificacin. Si est activo, sabemos que la pgina se debe escribir en disco. Esta tcnica tambin se aplica a pginas de slo lectura. Con esto se reduce a la mitad el tiempo de E/S, si la pgina no ha sido modificada.

Para implantar la paginacin por demanda debemos resolver dos grandes problemas: desarrollar un algoritmo de asignacin de marcos y un algoritmo de reemplazo de pginas. Si tenemos varios procesos en memoria, debemos decidir cuntos marcos asignar a cada uno. Adems, cuando se requiere un reemplazo de pgina es necesario seleccionar los marcos que se reemplazarn. El diseo de algoritmos adecuados para resolver estos problemas es una tarea importante, ya que la E/S de disco es muy costosa. Un pequea mejora en los mtodos de paginacin por demanda produce amplias ganancias en el rendimiento del sistema. 7.4.1 Algoritmos de reemplazo [SILB94] [DEIT93] [STAL95] Estamos buscando algoritmos que presenten la menor tasa de fallos de pgina. Para ello, necesitamos evaluarlos para una serie determinada de referencias a memoria y calcular el nmero de fallos de pgina. Podemos generar las cadenas de referencias aleatoriamente o bien coger una muestra del sistema. Esto producir un gran nmero de datos (alrededor de un milln de referencias por segundo). Se puede reducir este nmero, ya que tan slo hemos de considerar el nmero de pginas y no toda la direccin. Y adems, si tenemos una referencia a una pgina p, entonces ninguna referencia a la pgina p que se presente inmediatamente despus provocar fallo de pgina. La pgina p, ya se encuentra en memoria y las siguiente referencias a ella no provocan fallo de pgina. Por ejemplo, si rastreamos un proceso, podemos anotar la siguiente secuencia de direcciones: 0100, 0432, 0101, 0612, 0102, 0103, 0104, 0101, 0611, 0102, 0103, 0104, 0101, 0610, 0102, 0103, 0104, 0609, 0102, 0105, lo cual, a 100 bytes por pgina, se reduce a la siguiente serie de referencias: 1, 4, 1, 6, 1, 6, 1, 6, 1, 6, 1. Para determinar el nmero de fallos de pgina para una serie de referencias y un algoritmo de reemplazo de pgina, necesitamos tambin el nmero de marcos de pgina por proceso. Si aumenta el numero de marcos, se reducir el nmero de fallos de pgina. Para ilustrar los algoritmos de reemplazo de pginas, usaremos la siguiente secuencia de referencias 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1.

7.4.1.1 Reemplazo FIFO El algoritmo de reemplazo ms sencillo es el primero en entrar, primero en salir. Este algoritmo asocia a cada pgina el instante en el que se trajo a memoria. Cuando hay que reemplazar una pgina, se elige la ms antigua. Para la cadena de referencias de ejemplo, y suponiendo un total de tres marcos, aplicamos este algoritmo con el resultado de 15 fallos de pgina.

ENLACE A LA ANIMACIN FIFO El algoritmo FIFO es fcil de comprender y programar, pero su rendimiento no siempre es bueno. La pgina reemplazada puede ser un mdulo de asignacin de valores iniciales que se utiliz hace mucho tiempo y que ya no se necesita. Pero tambin puede contener una variable cuyo valor inicial se asign hace tiempo pero que se utiliza constantemente. Adems, este algoritmo presenta una irregularidad denominada anomala de Belady. Para ilustrarlo suponga que ahora tenemos la siguiente serie de referencias 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5. La figura 7.5 muestra la curva de fallos de pginas frente al nmero de marcos disponibles. Sorprendentemente el nmero de fallos para cuatro marcos (diez) es mayor que para tres marcos (nueve). Esto significa que con el algoritmo FIFO la tasa de fallos pueden aumentar al incrementar el nmero de marcos asignados.

7.4.1.2 Reemplazo Optimo

ENLACE A LA ANIMACIN OPTIMO Una consecuencia del descubrimiento de la anomala de Belady fue la bsqueda de un algoritmo de reemplazo de pginas ptimo. El algoritmo de reemplazo de pginas ptimo sera aquel que eligiera la pgina de la memoria que vaya a ser referenciada ms tarde (con el ejemplo anterior vemos que se producen tan slo 9 fallos de pgina). Si se elige otra, se producir una falta de pgina antes, con lo que baja el rendimiento del sistema. Por desgracia, este algoritmo es irrealizable, pues no hay forma de predecir qu pginas referenciar un proceso

en el futuro. Como resultado de esto, el algoritmo ptimo se utiliza sobre todo para estudios comparativos. Puede ser til para saber que un nuevo algoritmo est dentro de 12.3% de lo ptimo en el peor de los casos y dentro del 4.7% en promedio. 7.4.1.3 Reemplazo Menos Recientemente Usado o LRU (Least Recently Used) La principal diferencia entre los algoritmos FIFO y OPT es que el primero utiliza el instante en que entr una pgina en memoria, y el segundo, utiliza el tiempo en el que se usar la pgina. Una buena aproximacin al algoritmo ptimo se basa en el principio de localidad de referencia de los programas. Las pginas de uso frecuente en las ltimas instrucciones se utilizan con cierta probabilidad en las siguientes instrucciones. De manera recproca, es probable que las pginas que no hayan sido utilizadas durante mucho tiempo permanezcan sin ser utilizadas durante cierto tiempo. Es decir, estamos utilizando el pasado reciente como aproximacin de lo que suceder en el futuro. El algoritmo LRU explota esta idea: al ocurrir un fallo de pgina se utiliza la pgina que no haya sido utilizada hace ms tiempo. El resultado de aplicar este algoritmo a nuestro ejemplo produce 12 fallos.

ENLACE A LA ANIMACIN LRU Aunque LRU es realizable tericamente, su implantacin presenta problemas. Sera necesario mantener una lista enlazada de todas las pginas en la memoria, en donde la pgina de uso ms reciente est al principio de la lista y la de uso menos reciente al final. La dificultad estriba en que la lista debe actualizarse en cada referencia a la memoria. La bsqueda de una pgina en la lista, su eliminacin y posterior traslado al frente de la misma puede ser una operacin que consuma mucho tiempo. Es preciso un hardware especial (caro), o bien determinar una solucin aproximada mediante software. La bsqueda y manipulacin de una lista enlazada en cada instruccin es prohibitiva por su lentitud, an en hardware. Sin embargo, existen otras formas de implantar LRU con un hardware especial. Consideremos primero el caso ms sencillo. Este mtodo requiere un contador especial de 64 bits, C, en hardware, que se incrementa de forma automtica despus de cada instruccin. Adems, cada entrada de la tabla de pginas debe tener un campo de tamao adecuado como para contener al contador. Despus de cada referencia a la memoria, el valor actual de C se almacena en la entrada de la tabla de pginas correspondiente a la pgina a la que se hizo referencia. Al ocurrir un fallo de pgina, el sistema operativo examina todos los contadores de la tabla de pginas y elige el mnimo. Esa pgina es la de utilizada menos recientemente. Analicemos ahora un segundo algoritmo LRU en hardware. En una mquina con n marcos, el hardware LRU puede utilizar una matriz de nxn bits, cuyos datos iniciales son todos cero. En una referencia al marco k, el hardware primero activa todos los bits del rengln k y desactiva despus todos los bits de la columna k. En cualquier instante, la fila cuyo valor en binario es mnimo es el marco utilizado menos recientemente, la fila con el siguiente valor ms pequeo es el segundo marco utilizado menos recientemente, etc. El funcionamiento de este algoritmo aparece en la figura 6 para cuatro marcos con referencias a los marcos en el orden: 0123210323 Despus de hacer referencia al marco 0 tenemos la situacin de la figura 7.6 (a), etc.

Ni el reemplazo ptimo ni el reemplazo LRU padecen la anomala de Belady. Los algoritmos de reemplazo denominados algoritmos de pila nunca presentan esta anomala. Un algoritmo de pila es aquel que para el cual se puede demostrar que el conjunto de pginas en memoria para n marcos es siempre un subconjunto del conjunto de las pginas que estaran en memoria con n + 1 marcos. Para el reemplazo LRU, el conjunto de pginas en memoria sera las n pginas ms recientemente usadas. Si el numero de marcos aumentara, estas n pginas seguiran siendo las de ms reciente referencia y, por tanto, seguiran en memoria. 7.4.1.4 Aproximaciones a LRU. Pocos sistemas proporcionan suficiente ayuda del hardware para un verdadero reemplazo de pginas LRU. Sin embargo, muchos sistemas ofrecen cierta ayuda, en la forma de un bit de referencia. El hardware coloca a uno el bit de referencia para una pgina cada vez que se hace una referencia a ella. Los bits de referencia estn asociados a cada entrada de la tabla de pginas. En principio, el sistema operativo borra todos los bits. Al ejecutarse un proceso de usuario, el hardware activa (asignando 1) el bit asociado a cada pgina referenciada. Despus de cierto tiempo, examinando los bits de referencia podemos determinar qu pginas se han utilizado y cules no, aunque no sabemos el orden de uso. Esta informacin parcial de la ordenacin nos lleva a varios algoritmos de reemplazo de pginas que se aproximan al LRU. Algoritmos de bits Adicionales de Referencia Podemos obtener informacin adicional de la ordenacin anotando los bits de referencia a intervalos regulares. En una tabla en memoria podemos conservar ocho bits para cada pgina. A intervalos regulares (cada 100 milisegundos), una interrupcin del cronmetro transfiere el control al SO. El sistema operativo desplaza el bit de referencia de cada pgina al bit de orden superior de sus ocho bits, desplazando los otros bits una posicin a la derecha y descartando el bit de orden inferior. Estos registros contienen la historia de la utilizacin de la pgina durante los ltimos ocho periodos. Si el registro de desplazamiento contiene 00000000, entonces la pgina no ha sido utilizado en ocho periodos; una pgina que se utiliza por lo menos una vez cada periodo tendra un valor 11111111 en su registro de desplazamiento. Una pgina con valor 11000100 ha sido utilizada ms recientemente que una con valor 01110111. Interpretando estos bits como enteros sin signo, la pgina con el menor nmero es la que se debe reemplazar. El nmero de

bits histricos puede variar. En el caso extremo, el nmero puede reducirse a cero, dejando nicamente el bit de referencia. A esta versin se le llama algoritmo de reemplazo de la segunda oportunidad. El algoritmo de la Segunda Oportunidad Una modificacin simple de FIFO, que evita deshacerse de una pgina de uso frecuente, inspecciona el bit R de la pgina ms antigua. Si es 0, la pgina es antigua y no utilizada, por lo que se reemplaza de manera inmediata. Si el bit es 1, R se pone a cero, la pgina se coloca al final de la lista de pginas, como si hubiera llegado en ese momento a la memoria. Despus contina la bsqueda siguiendo la lista. La operacin de este algoritmo, llamado de la segunda oportunidad, se muestra en la figura 7.7. En la figura 7.7 (a), vemos las pginas de la A a la H, en una lista enlazada ordenada segn el tiempo de llegada a la memoria.

Supongamos que ocurre un fallo de pgina. La pgina ms antigua es A, si A tiene el bit R a cero, se saca de la memoria. Por contra, si R vale 1, A se coloca al final de la lista, ponindose a cero el bit R. La bsqueda de una pgina adecuada prosigue con B. Lo que hace el algoritmo de la segunda oportunidad es buscar una pgina antigua sin referencias, si todas las pginas tienen alguna referencia deviene en un simple FIFO. En efecto, supongamos que todas las pginas de la figura 7.7 (a) tienen R a 1. Una a una, el sistema operativo traslada las pginas al final de la lista y pone su bit R a cero. Al final, se vuelve a la pgina A, la cual tiene R a cero. En este momento, A se retira de la memoria. Por lo tanto, el algoritmo siempre termina. El Algoritmo del Reloj Aunque la segunda oportunidad es un algoritmo razonable, es ineficiente e innecesario, puesto que desplaza las pginas en una lista. Un mejor diseo consiste en mantener las pginas en una lista circular, con la forma de un reloj, como se muestra en la figura 7.8. Una manecilla apunta hacia la pgina ms antigua.

Al ocurrir un fallo de pgina, se inspecciona la pgina a la que apunta la manecilla. Si su bit R vale 0, la pgina se retira de la memoria, se inserta la nueva pgina en su lugar en el reloj, y la manecilla avanza una posicin. Si R vale 1, este bit se pone a 0 y la manecilla avanza a la pgina siguiente. Este proceso contina hasta encontrar una pgina con R a cero. Este algoritmo slo difiere del anterior en su implementacin. Algoritmo LFU (Last Frequently Used) Un algoritmo de reemplazo de pgina menos frecuentemente usada (Least Frequently Used) mantiene un contador del nmero de referencias que se han hecho para cada pgina. Se reemplaza la pgina con el menor recuento. La razn para esta seleccin es que una pgina que se usa activamente debe tener un alto nmero de referencias. Este algoritmo tiene problemas cuando una pgina se usa mucho en la fase inicial de un proceso, pero despus ya no se utiliza. Como se us bastantes veces, tiene un recuento alto y permanece en memoria aunque ya no se necesite. Una solucin consiste en desplazar los recuentos un bit a la derecha a intervalos regulares, formando un recuento promedio de utilizacin que disminuye exponencialmente. El algoritmo MFU (Most Frequently Used) Otro algoritmo de reemplazo de pginas es el reemplazo ms frecuentemente usado, que se basa en el argumento de que la pgina con el menor recuento probablemente acaba de llegar y an tiene que usarse. Como se podra esperar, no es comn ni el reemplazo MFU ni el LFU porque son costosos y se alejan mucho del reemplazo OPT. Algoritmo de pginas de uso no reciente o NRU (Not Recently Used) La mayora de los ordenadores presentan los bits R (de referencia) y M (de modificacin) en las entradas de la tabla de pginas, siendo estos bits actualizados va hardware. Si el hardware no proporciona dichos bits, stos pueden ser simulados mediante el software. Para ello, cuando se inicia un proceso se sealan todas sus entradas en la tabla de pginas como si no estuvieran dentro de la memoria. Si se hace referencia a cualquier pgina, ocurre un fallo de pgina. El sistema operativo activa entonces el bit R (en sus propias tablas) y cambia la entrada de la tabla de pginas para que apunte hacia la pgina correcta, poniendo dicha entrada en modo slo lectura (recordar los bits de permisos). El proceso retoma su ejecucin; si se escribe en la pgina, ocurre otra interrupcin por violacin de permisos, lo que permite al sistema operativo activar el bit M en sus tablas, cambiando los permisos de la pgina a lectura y escritura. Disponiendo de los citados bits R y M se puede construir el siguiente algoritmo: al iniciar un proceso, el sistema operativo asigna un valor 0 a los bits R y M de todas sus pginas. De manera peridica (cada interrupcin del reloj) se pone a cero el bit R, para distinguir las pginas que no tienen referencias recientes de las que s.

Ante un fallo de pgina, el sistema operativo inspecciona todas las pginas y las divide en cuatro categoras, segn los valores actuales de los bits R y M: Clase 0:no referenciada, ni modificada (0,0). Clase 1:no referenciada, pero modificada (0,1). Clase 2:referenciada, pero no modificada (1,0). Clase 3:referenciada y modificada (1,1). Aunque parece imposible la existencia de las pginas de la clase 1, este caso aparece cuando en una pgina de clase 3, una interrupcin del reloj pone a cero su bit R. Las interrupciones del reloj no provocan el poner a cero el bit M, puesto que esta informacin es necesaria para saber si hay que volver a escribir la pgina en el disco o no. El algoritmo NRU elimina una pgina de manera aleatoria de la primera clase no vaca con el nmero ms pequeo. Una hiptesis implcita de este algoritmo es que es mejor eliminar una pgina modificada sin referencias en al menos un intervalo del reloj (por lo general, de 20 mseg) que una pgina sin modificar de uso frecuente. Este algoritmo es fcil de comprender, tiene una implementacin eficiente y un rendimiento aceptable. 7.4.1.5 Asignacin Global frente a Asignacin Local [SILB94] Cuando varios procesos compiten por marcos podemos clasificar los algoritmos de reemplazo de pginas en dos categoras: reemplazo global y reemplazo local. El reemplazo global permite que un proceso seleccione un marco para reemplazar de entre todo el conjunto de marcos, incluso si ese marco est asignado a otro proceso; un proceso puede quitar un marco a otro. El reemplazo local requiere que cada proceso selecciones slo de su propio conjunto de marcos asignados. Con una estrategia de reemplazo local, el nmero de marcos asignados a un proceso no cambia. Con el reemplazo global es posible que un proceso slo seleccione marcos que pertenezcan a otros procesos, incrementando su nmero de marcos asignados (suponiendo que otros procesos no elijan sus marcos para reemplazo). Un problema del algoritmo de reemplazo global es que un proceso no puede controlar su propia tasa de fallos de pgina. El conjunto de pginas en memoria para un proceso no slo depende del comportamiento de paginacin de ese proceso, sino tambin del de los otros. Por tanto, puede variar la forma en que se ejecuta un proceso debido a circunstancias totalmente ajenas. Esto no ocurre con un algoritmo de reemplazo local. Con este esquema, el conjunto de pginas en memoria para ese proceso slo depende de su comportamiento en cuanto a paginacin. Ahora bien, el reemplazo local impide a un proceso tener acceso a otras pginas de memoria menos usadas. Por esta razn, el reemplazo global generalmente brinda una mayor productividad.

7.5 Asignacin de Marcos [SILB94]


Cmo asignamos la cantidad fija de memoria libre a los distintos procesos? Si disponemos de 93 marcos libres y de dos procesos, cuntos marcos obtiene cada proceso? 7.5.1 Nmero Mnimo de Marcos

No podemos asignar ms del total de marcos libres. Tambin hay un nmero mnimo de marcos que pueden asignarse. Este nmero mnimo est definido por la arquitectura del conjunto de instrucciones(mquina). Recuerde que cuando ocurre un fallo de pgina antes de terminar la ejecucin de una instruccin, sta debe reiniciarse. Por tanto, debemos contar con marcos suficientes para todas las pginas a las que pueda hacer referencia una instruccin. Por ejemplo, considere una mquina donde todas las instrucciones de referencia a memoria que permiten direccionamiento indirecto de un nivel (por ejemplo, en la pgina 16 hay una instruccin de carga que puede referirse a una direccin de la pgina 0, la cual es una referencia indirecta a la pgina 23), entonces la paginacin necesita al menos tres marcos por proceso. El nmero mnimo de marcos est definido por la arquitectura del computador, mientras que el nmero mximo est definido por la cantidad de memoria fsica disponible. Entre estos dos extremos podemos adoptar distintas opciones de asignacin de marcos. 7.5.2 Algoritmos de Asignacin de Marcos La manera ms fcil 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 depsito de marcos libres. A este esquema se le llama asignacin equitativa. Una alternativa es reconocer que los diversos procesos necesitarn cantidades distintas de memoria. Si un pequeo 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 pequeo no necesita ms de 10 marcos, por lo que los 21 restantes se desperdician. Se puede usar una asignacin proporcional. Asignamos la memoria disponible a cada proceso de acuerdo con el tamao de ste. Sea vi el tamao 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 nmero mnimo de marcos requerido por el conjunto de instrucciones, y que sumados no excedan de m. Para la asignacin proporcional dividiramos los 62 marcos entre dos procesos, uno de 10 pginas 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 asignacin equitativa como proporcional, la asignacin para cada proceso puede variar de acuerdo con el nivel de multiprogramacin . Si aumenta el nivel de multiprogramacin, 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 asignacin proporcional se ha hecho dependiente del tamao, pero nos podramos basar en sus prioridades o en una combinacin entre tamao y prioridad. De igual modo, se podra permitir que un proceso de alta prioridad pueda reemplazar pginas de otro proceso de menor prioridad. Esto hara aumentar el nmero de marcos del proceso de alta prioridad en perjuicio de los de prioridad menor.

7.6 Hiperpaginacin [SILB94]


Si el nmero de marcos asignados a un proceso de baja prioridad desciende por debajo del nmero mnimo requerido por la arquitectura del computador, debemos suspender la ejecucin de ese proceso. Luego debemos descargar sus pginas restantes, liberando los marcos asignados. En general, cualquier proceso que no cuente con marcos suficientes provocar fallos de pgina muy frecuentemente. Si se reemplazan pginas que a su vez estn activas, estaremos sustituyendo una pgina que casi de inmediato se volver a necesitar. Por tanto, pronto vuelve a generarse otro fallo de pgina, ocurriendo esto una y otra vez. A esta altsima actividad de paginacin

se le llama hiperpaginacin (thrashing). Un sistema est en hiperpaginacin si emplea ms tiempo paginando que ejecutando. 7.6.1 Causas de la Hiperpaginacin La hiperpaginacin ocasiona severos problemas de rendimiento. Considere la siguiente situacin, basada en el comportamiento real de los primeros sistemas de paginacin. El sistema operativo supervisa la utilizacin de la CPU. Si sta es demasiado baja, aumentamos el nivel de multiprogramacin introduciendo un nuevo proceso en el sistema. Se emplea una algoritmo de reemplazo de pginas global, que reemplaza pginas sin importar a qu procesos pertenezcan. Suponga ahora que un proceso entra en una nueva fase de su ejecucin y necesita ms marcos. Comienza a generar fallos de pgina y a tomar pginas de otros procesos. Sin embargo, estos procesos necesitan esas pginas, por lo que tambin fallan, tomando pginas de otros procesos. Todos estos procesos generando fallos de pgina deben usar el dispositivo de paginacin para intercambiar las pginas. A medida que se colocan en la cola del dispositivo de paginacin, la cola procesos listos se vaca. Mientras los procesos estn bloqueados en espera del dispositivo de paginacin, la utilizacin de la CPU decrece. El planificador de la CPU ve disminuir la utilizacin de sta y, por tanto, incrementa el nivel de multiprogramacin. El nuevo proceso trata de comenzar tomando pginas de los procesos en ejecucin, lo que ocasiona ms fallos de pgina y una cola ms larga para el dispositivo de paginacin. Y se vuelven a repetir los pasos descritos. Ha comenzado la hiperpaginacin y se desploma la productividad del sistema. La tasa de fallos de pgina aumenta tremendamente y, como resultado, se incrementa el tiempo efectivo de acceso a memoria. No se efecta ningn trabajo porque el sistema operativo est continuamente paginando.

Los efectos de la hiperpaginacin se pueden limitar utilizando un algoritmo de reemplazo local (o por prioridades). Con el reemplazo local, si un proceso comienza a hiperpaginar, no puede robar marcos de otro proceso y provocar que este tambin entre en hiperpaginacin. Sin embargo, si los procesos estn en hiperpaginacin, la mayor parte del tiempo pueden encontrarse en la cola del dispositivo de paginacin. El tiempo promedio de servicio de un fallo de pgina aumenta y, por tanto, el tiempo efectivo de acceso aumenta incluso para un proceso que no est en hiperpaginacin. Para evitar la hiperpaginacin debemos ofrecer a un proceso todos los marcos que necesita; pero, cmo sabemos cuntos necesitan? Para saberlo se utilizan tcnicas como el modelo del conjunto de trabajo, que se basa el concepto de localidad de la ejecucin de procesos. 7.6.2 Localidad [DEIT93] [MILE94]

El concepto de localidad establece que un proceso, durante su ejecucin, pasa de una localidad a otra. Una localidad es un conjunto de pginas que se utilizan conjuntamente. Un programa generalmente est compuesto por varias localidades distintas, las cuales pueden superponerse. Por ejemplo, al llamar a una subrutina se define una nueva localidad. En sta se efectan referencias a memoria de las instrucciones de la subrutina, sus variables locales y un subconjunto de las variables globales. Al salir de la subrutina, el proceso abandona esta localidad. As, vemos que las localidades estn definidas por la estructura del programa y sus estructuras de datos. Suponga que a un proceso le asignamos suficientes marcos para albergar su localidad actual. Generar fallos de pgina hasta completar su localidad pero, luego, no habr ms fallos hasta que cambie de localidad. Si asignamos menos marcos que el tamao de la localidad, el proceso entrar en hiperpaginacin, ya que no puede mantener en memoria todas las pginas que est usando en ese momento. 7.6.3 Modelo del Conjunto de Trabajo [DEIT93] El modelo del conjunto de trabajo (Working Set Model) se basa en el concepto de localidad. El modelo utiliza un parmetro, , para definir la ventana del conjunto de trabajo activo. La idea es examinar las referencias ms recientes a pginas. El conjunto de pginas en las referencias constituye el conjunto de trabajo. Si una pgina est en uso pertenecer al conjunto de trabajo, y si ya no se usa se descartar tras unidades de tiempo despus de su ltima referencia. De esta manera, el conjunto de trabajo es una aproximacin a la localidad del programa. Por ejemplo, dada la serie de referencias a memoria de la figura 10, si = 10 referencias de memoria, entonces el conjunto de trabajo en el instante t1 es {1, 2, 5, 6, 7}. En el instante t2,, habr cambiado a {3, 4}.

La exactitud del conjunto de trabajo depende de la seleccin de . Si es demasiado pequeo, no abarcar todo el conjunto de trabajo; si es demasiado grande, puede solapar varias localidades. En el caso extremo, si es infinito, el conjunto de trabajo es todo el programa. La propiedad ms importante de los conjuntos del trabajo es su tamao. Si calculamos el tamao del conjunto de trabajo WSSi, para cada proceso del sistema, podemos considerar D= WSSi, donde D es la demanda total de marcos. Cada proceso utiliza las pginas de su conjunto de trabajo, por lo que i necesita WSSi marcos. Si la demanda total es mayor que el nmero total de marcos disponibles (D > m) se producir la hiperpaginacin, ya que algunos procesos no tendrn marcos suficientes. El uso del modelo del conjunto de trabajo resulta sencillo. El sistema operativo supervisa el conjunto de trabajo de cada proceso y le asigna marcos suficientes para proporcionarle el tamao del conjunto activo. Si hay suficientes marcos iniciales, se puede iniciar otro proceso. Si aumenta la suma de los tamaos de los conjuntos

activos, excediendo el nmero total de marcos disponibles, el sistema operativo selecciona un proceso y lo suspende. Sin embargo, tenemos el problema del seguimiento del conjunto de trabajo. La ventana del conjunto de trabajo es cambiante; cada vez que se hace referencia a la memoria, la nueva referencia aparece en un extremo y del otro extremo desaparece la referencia ms antigua. Una pgina se encuentra en un conjunto activo si existe una referencia a ella en cualquier lugar de la ventana. Podemos aproximarnos al modelo del conjunto de trabajo mediante interrupciones a intervalos fijos de un cronmetro y un bit de referencia. Por ejemplo, suponga que es 10000 referencias y podemos producir una interrupcin del cronmetro cada 5000 referencias. Cuando recibimos una interrupcin del cronmetro, copiamos y borramos los valores de los bits de referencia para cada pgina, de manera que si ocurre un fallo de pgina podemos examinar el bit de referencia actual y los dos bits en memoria para determinar si la pgina ha sido utilizada en los ltimos 10000 a 15000 referencias. Si se us, por lo menos uno de stos bits estar a uno; de no ser as, todos estarn a cero. Se considerar que todas las pginas que poseen por lo menos un bit a uno estn en el conjunto de trabajo. Esta manera de actuar no es totalmente precisa, ya que no podemos decir cundo ocurri una referencia dentro de un intervalo de 5000. Es posible reducir la incertidumbre aumentando el nmero de bits histricos y el nmero de interrupciones; sin embargo, el servicio de esas interrupciones ser proporcionalmente ms costoso. 7.6.4 Frecuencia de Fallos de Pgina [DEIT93] [SILB94] El modelo del conjunto de trabajo tiene bastante xito, y el conocimiento del conjunto puede resultar til para la prepaginacin, pero parece ser una manera bastante torpe de controlar la hiperpaginacin. La estrategia de frecuencia de fallos de pgina sigue un camino ms directo.

Queremos evitar la hiperpaginacin, o lo que es lo mismo, la elevada tasa de fallos de pgina. Cuando es demasiado alta sabemos que un proceso necesita ms marcos, y si es demasiado baja, puede ser que el proceso tenga demasiados marcos. Podemos establecer lmites superior e inferior para la tasa deseada de fallos de pgina. Si la tasa de fallos de pgina excede el lmite superior, asignamos otro marco a ese proceso; si la tasa cae por debajo del lmite inferior, quitamos un marco al proceso. As podemos medir y controlar directamente la tasa de fallos de pgina para evitar la hiperpaginacin. Al igual que ocurre con la estrategia del conjunto de trabajo, posiblemente tenga que suspender un proceso. Si aumenta mucho la tasa de fallos y no hay marcos disponibles, debemos seleccionar un proceso y suspenderlo. Los marcos liberados se distribuyen entre los procesos con tasa elevada de fallos de pgina. Otras Consideraciones

La seleccin de un algoritmo de reemplazo y una poltica de asignacin son las principales decisiones que hay que tomar para un sistema de paginacin. Existen otros factores que deben considerarse. Prepaginacin Una propiedad evidente de un sistema de paginacin por demanda pura es el gran nmero de fallos de pgina que ocurren al iniciar un proceso. Esta situacin surge al tratar de introducir en memoria la localidad inicial. Tambin, ocurrir cuando se reanuda un proceso intercambiado. La prepaginacin es un intento de evitar este alto nivel de paginacin inicial. La estrategia consiste en traer a memoria al mismo tiempo todas las pginas que se necesitarn. En un sistema que utiliza el modelo del conjunto de trabajo, por ejemplo, con cada proceso debemos conservar una lista de las pginas que forman en un instante el conjunto de trabajo. Por tanto, cuando se un proceso se reanuda (fin de E/S o suficientes marcos libres), automticamente se incorpora todo el conjunto de trabajo antes de reanudar al proceso. La prepaginacin puede ser una ventaja en algunos casos. La cuestin es sencillamente si el costo de la prepaginacin es menor al costo del servicio de los fallos de pgina correspondientes. Puede ser que ya no se usen muchas de las pginas devueltas a memoria por la prepaginacin. Suponga que las pginas estn prepaginadas y una fraccin de estas s pginas realmente se usan (0 1). La pregunta es si el costo de las s fallos de pgina que se evitan es mayor o menor al costo de la prepaginacin de (1- )s pginas innecesarias. Si es cercano a 0, pierde la prepaginacin; si es cercano a 1, la prepaginacin gana. Fijacin de Pginas para E/S Cuando se utiliza la paginacin por demanda, en ocasiones tenemos que permitir que algunas pginas se fijen en memoria. Debemos evitar que se produzca la siguiente secuencia de sucesos. Un proceso emite una solicitud de E/S y se coloca en la cola para ese dispositivo de E/S. Mientras tanto, se asigna la CPU a otros procesos. Estos generan fallos de pgina y, usando un algoritmo de reemplazo global, uno de ellos reemplaza la pgina que contiene el buffer de memoria del proceso en espera. Ms tarde, cuando la solicitud de E/S avanza hasta el inicio de la cola de dispositivo, se efecta la E/S para la direccin especificada. Sin embargo, este marco se est utilizando ahora para una pgina que pertenece a otro proceso. Hay dos soluciones a este problema. Una consiste en no ejecutar nunca la E/S a memoria de usuario, sino copiar los datos entre la memoria del sistema y la de usuario. La E/S slo se realiza entre la memoria del sistema y el dispositivo de E/S. Esta copia adicional puede generar un tiempo de procesamiento aadido inaceptable. Otra solucin consiste en permitir que las pginas se fijen en memoria. A cada marco se asocia un bit de fijacin; si se ha fijado el marco, no se puede seleccionar para reemplazo. Cuando termina la E/S, se desactiva la fijacin de las pginas. Otra aplicacin del bit de fijacin se refiere al reemplazo normal de pginas. Considere la siguiente secuencia de sucesos. Un proceso de baja prioridad genera un fallo. Al seleccionar un marco para reemplazarlo, el sistema de paginacin lee en memoria la pgina requerida. El proceso se encuentra listo para continuar su ejecucin cuando reciba la CPU. Pero mientras un proceso de alta prioridad genera un fallo y el sistema de paginacin encuentra una pgina que est en memoria pero que no ha sido ni modificada ni referenciada: la pgina que acaba de incorporar el proceso de baja prioridad. Esta pgina parece perfecta para el reemplazo; est limpia y no hay que reescribirla. Podramos impedir que un pgina recin incorporada sea reemplazada para no desperdiciar el costo que ha supuesto el llevar un pgina a memoria para luego no hacer uso de ella. Sin embargo, el uso del bit de fijacin puede ser peligroso si se activa y nunca se desactiva. Se ira poco a poco inutilizando el espacio de memoria.

Estructura de los Programas La paginacin por demanda, est diseada para ser transparente para el programa de usuario. En muchos casos, el usuario no se percata de que la memoria est paginada. Sin embargo, en muchos casos el rendimiento del sistema puede mejorar si se es consciente de la paginacin subyacente. Un ejemplo en el que se pone esto de manifiesto sera el siguiente. Considere un programa en Pascal cuya funcin es poner a 0 cada elemento de una matriz de 128 por 128 (suponga que las pginas son de 128 palabras). El cdigo sera: var A: array [1..128 of array [1..128 of integer; for j:= 1 to 128 do for i:=1 to 128 do A[i,j := 0; Observe que la matriz est almacenada por filas. Es decir, la matriz se almacena como A[1,1 , A[1,2 , ..., A[2,1 , A[2,2 , ...., A[128,128 . Para pginas de 128 palabras, cada fila ocupa una pgina. De esta manera, el cdigo anterior asigna ceros a una palabra de cada pgina, luego otra palabra en cada pgina, etc. Si el sistema operativo asigna 128 marcos al programa, entonces ocasiona 128 x 128 = 16384 fallos de pgina. Si cambiamos el cdigo a se asignan ceros a todas las palabras de una pgina antes de comenzar con la siguiente, reduciendo a 128 el nmero de fallos de pgina. var A: array [1..128 of array [1..128 of integer; for i:= 1 to 128 do for j:=1 to 128 do A[i,j := 0; Una cuidadosa seleccin de las estructuras de datos y de programacin puede mejorar la localidad y, por tanto, disminuir la tasa de fallos de pgina y el nmero de pginas para un programa. El compilador y el cargador pueden tener un efecto considerable sobre la paginacin. Al separar el cdigo y datos y generar cdigo reentrante (no modificable) , las pginas de cdigo pueden ser slo de lectura y, por tanto, nunca se modificarn. El cargador puede evitar la colocacin de rutinas entre pginas, o agrupar las rutinas que se llaman entre s en una pgina.

7.7 Tamao de Pgina [DEIT93] [SILB94] [TANE93]


Al disear una mquina hay que tomar una decisin sobre el mejor tamao de pgina. Como podr suponer, no hay un tamao nico que sea el mejor, pero existen varios factores que apoyan tamaos distintos. Los tamaos son invariablemente potencias de dos, que suelen ir de 512 (29) a 16384 (214) bytes. Cmo seleccionamos el tamao de pgina? Un factor es el tamao de la tabla de pginas. Para un espacio de memoria virtual establecido, al reducir el tamao aumenta el nmero de pginas y, por tanto, el tamao de la tabla de pginas. Para una memoria virtual de 4 MB habra 4096 paginas de 1K bytes, pero slo 512 pginas de

8192 bytes. Como cada proceso activo debe tener su propia tabla de pginas, sera deseable un tamao de pgina grande. Por otra parte, la memoria se utiliza mejor con pginas pequeas. Una parte de la ltima pgina estar asignada pero no totalmente ocupada (fragmentacin interna). Suponiendo que los tamaos de los procesos y de la pgina son independientes, podemos esperar que, en promedio, se desperdiciar la mitad de la ltima pgina de cada proceso. Esta prdida representara slo 256 bytes en una pgina de 512 bytes, pero seran 4096 bytes en una pgina de 8192. Para minimizar la fragmentacin interna necesitamos un tamao de pgina pequeo. Otro problema es el tiempo necesario para leer o escribir una pgina. El tiempo de E/S est compuesto por tiempo de bsqueda, latencia y transferencia. El tiempo de transferencia es proporcional a la cantidad transferida (o sea, al tamao de pgina), hecho que aparentemente apunta en favor de un tamao de pgina pequeo. Sin embargo, los tiempos de bsqueda y de latencia son mucho mayores al tiempo de transferencia. A una velocidad de transferencia de 2MB por segundo, la transferencia de 512 bytes cuesta slo 0.2 milisegundos. La latencia puede que sea de 8 milisegundos y el tiempo de bsqueda de 20 milisegundos. Del tiempo total de E/S (28.2 milisegundos), por tanto, el 1% puede atribuirse a la transferencia. Si duplicamos el tamao de la pgina, el tiempo aumenta a slo 28.4 milisegundos. Esto significa que se invertira 28.4 milisegundos para leer una sola pgina de 1024 bytes, pero 56.4 milisegundos para leer la misma cantidad como dos pginas de 512 bytes cada una. Por lo anterior, el deseo de minimizar el tiempo de E/S implica elegir un tamao de pgina grande. Sin embargo, con un menor tamao de pgina se puede reducir el nmero total de E/S, ya que la localidad mejorara. Un tamao de pgina menor permite que cada pgina se ajuste con mayor precisin a la localidad del programa. Por ejemplo, considere un proceso de 200K, de los que slo la mitad (100K) se usan realmente durante su ejecucin. Si tenemos una solo pgina de gran tamao, debemos transferirla y ubicarla por completo en memoria. Con un tamao de pgina menor obtenemos una mejor resolucin, lo que nos permite realizar menos E/S y tener menos memoria asignada. Por otra parte, con un tamao de pgina de un byte se generara un fallo de pgina por cada byte. Cada fallo de pgina genera una gran cantidad de procesamiento adicional para guardar registros, reemplazar la pgina, esperar en la cola del dispositivo de paginacin y actualizar tablas. Para minimizar el nmero de fallos de pgina necesitamos un tamao de pgina mayor. La tendencia histrica va hacia mayores tamaos de pgina. El procesador Intel 80386 tiene un tamao de pgina de 4K; el Motorola 68030 permite un tamao que vara 256 bytes y 32K. Esta evolucin hacia mayores tamaos es consecuencia de que el aumento de la velocidad de la CPU y de la capacidad de la memoria principal se ha producido con mayor rapidez que la velocidad de los discos. Existen otros factores que deben considerarse (como la relacin entre el tamao de pgina y el tamao del sector del dispositivo de paginacin). No hay solucin que pueda considerarse la mejor. Algunos factores (fragmentacin interna, localidad) apuntan a favor de un tamao de pgina pequeo, mientras que otros (tamao de pgina, tiempo de E/S) favorecen un tamao de pgina grande.

Das könnte Ihnen auch gefallen