Sistemas operativos modernos

dad, bien podría ser que una de las páginas se hubiera solicitado por última vez hace 9 tics y que la otra se hubiera solicitado hace 1000. No hay forma de saber esto. Sin embargo, en la práctica suelen bastar 8 bits si el tic de reloj dura alrededor de 20 milisegundos. Si no se ha so­ licitado una página en 160 milisegundos, de seguro no es muy importante. 4.4.8 El algoritmo de reemplazo de páginas de conjunto de trabajo En la forma más pura de paginación, los procesos inician sin tener páginas en la memoria. Tan pronto como la CPU trate de obtener la primera instrucción, habrá un fallo de página y el siste­ ma operativo traerá del disco la página que contiene la primera instrucción. Por lo general, pron­ to se generan fallos de página por variables globales y por la pila. Después de un tiempo, el proceso tiene casi todas las páginas que necesita y su ejecución se estabiliza con relativamente pocos fallos de página. Tal estrategia se denomina paginación por demanda porque las pági­ nas se cargan sólo cuando se necesitan, no por adelantado. Desde luego, es fácil escribir un programa de prueba que lea de manera sistemática todas las páginas de un espacio de direcciones grande, generando tantos fallos de página que no ha­ ya suficiente memoria para contenerlas todas. Por fortuna, casi ningún proceso funciona así. Los procesos exhiben una localidad de referencia, lo que significa que, durante cualquier fa­ se de su ejecución, el proceso sólo hace referencia a una fracción relativamente pequeña de sus páginas. Por ejemplo, cada pasada de un compilador multipasadas sólo hace referencia a una fracción de todas las páginas, y a una fracción distinta en cada ocasión. El conjunto de páginas que un proceso está usando en un momento dado se denomina conjun­ to de trab^o (Denning, 1968a; Denning, 1980). Si todo el conjunto de trabajo está en la memoria, el proceso se ejecutará sin causar muchos fallos de página hasta que pase a otra fase de su ejecución (por ejemplo, la siguiente pasada del compilador). Si la memoria disponible es demasiado reducida para contener todo el conjunto de trabajo, el proceso causará muchos fallos de página y se ejecutará con lentitud porque la ejecución de una instrucción tarda sólo unos cuantos nanosegundos, pero la lectura de una página del disco suele tardar 10 milisegundos. A razón de una o dos instrucciones cada 10 milisegundos, el programa tardará eternidades en terminar. Se dice que un programa que cau­ sa fallos de página cada pocas instmcciones está hiperpaginando (thrashing) (Denning, 1968b). En un sistema multiprogramado, con írecuencia los procesos se transfieren al disco (es de­ cir, todas sus páginas se desalojan de la memoria) para que otros procesos puedan usar la CPU. Surge la pregunta de qué hacer cuando un proceso se vuelve a traer a la memoria. Desde el pun­ to de vista técnico, no hay que hacer nada. El proceso simplemente causará fallos de página hasta que se haya cargado su conjunto de trabajo. El problema es que tener 20, 100 o hasta 1000 fallos de página cada vez que se carga un proceso hace lenta la ejecución y también desperdicia mucho tiempo de CPU, pues el sistema operativo gasta unos cuantos milisegundos de tiempo de CPU en procesar un fallo de página. Por ello, muchos sistemas paginados tratan de mantenerse al tanto de cuál es el conjunto de trabajo de cada proceso y se aseguran de tenerlo en la memoria antes de permitir ejecutar al proceso. Este enfoque se denomina modelo de conjunto de trabajo (Denning, 1970), y está diseñado para reducir en forma considerable la tasa de fallos de página. La carga de páginas antes de permidr que los procesos se ejecuten también se llama prepaginación. Cabe señalar que el conjunto de trabajo cambia con el tiempo.

RkJQdWJsaXNoZXIy MjI4NDcx