Sistemas operativos modernos
nada y se vuelve a desactivar. Si la máquina tiene abundante memoria y pocos procesos acti vos, el demonio de páginas permanece inactivo casi todo el tiempo. El demonio de páginas utiliza una versión modificada del algoritmo de reloj. Se trata de un algoritmo global, lo que implica que al desalojar una página no se fija en cuál proceso es due ño de esa página. Por tanto, el número de páginas asignadas a cada proceso varía con el tiempo. El algoritmo de reloj básico funciona examinando en forma circular los marcos de página (como si estuvieran dispuestos en la circunferencia de un reloj). En la primera pasada, cuando la manecilla apunta a un marco de página, el bit de uso se establece en 0. En la segunda pasa da, cualquier marco de página al que no se haya tenido acceso desde la primera pasada seguirá con el bit de uso apagado, y se colocará en la lista libre (después de escribir su contenido en el disco, si estaba modificado). Un marco de página que está en la lista libre sigue conservando su contenido, el cual puede recuperarse si esa página se necesita antes que se sobrescriba. En una máquina como la VAX que no tenía bits de uso, cuando la manecilla del reloj apun taba a un marco de página en la primera pasada, se apagaba el bit de uso en software y la pá gina se marcaba como no válida en la tabla de páginas. La siguiente vez que había acceso a la página se generaba un fallo de página, lo cual permitía al sistema operativo encender el bit de uso en software. El efecto era el mismo que con un bit de uso en hardware, pero la implemen tación era mucho más complicada y lenta. Así, el software pagaba el precio de un diseño de ficiente del hardware. Originalmente, Berkeley UNIX usaba el algoritmo de reloj básico, pero se descubrió que si la memoria era grande, las pasadas tardaban demasiado. Entonces se modificó el esquema para usar el algoritmo de reloj de dos manecillas que se ilustra a la izquierda de la figura 10-16. Con este algoritmo, el demonio de páginas mantiene dos apuntadores al mapa central. Cuando se ejecuta el demonio, primero apaga el bit de uso del marco al que apunta la manecilla delan tera y luego examina el bit de uso del marco al que apunta la manecilla trasera. Después, se ade lantan ambas manecillas. Si las dos manecillas se mantienen cercanas, sólo en las páginas que se usen mucho habrá posibilidad de tener acceso entre el momento en que pasa la primera ma necilla y el momento en que pasa la segunda. Si las dos manecillas tienen una separación de 359 grados (o sea que la manecilla trasera está apenas adelante de la manecilla delantera) habremos vuelto al algoritmo de reloj original. Cada vez que se ejecuta el demonio de páginas, las mane cillas giran menos de una revolución completa; la cantidad de giro depende de la distancia que necesiten recorrer para lograr que el número de marcos de página en la lista libre aumente has ta lotsfree. Si el sistema nota que la tasa de paginación es demasiado alta y el número de marcos li bres siempre está muy por debajo de lotsfree, se pone en marcha el intercambiador para desa lojar uno o más procesos de la memoria y que dejen de competir por los marcos de página. El algoritmo de intercambio de 4BSD es el siguiente. Primero, el intercambiador determina si al gún proceso ha estado inactivo durante 20 s o más. Si hay alguno, se escoge el que ha estado inactivo más tiempo. Si no hay, se examinan los cuatro procesos más grandes y se intercambia a disco el que ha estado más tiempo en la memoria. Si es necesario, el algoritmo se repite has ta que se recupera suficiente memoria. Cada pocos segundos, el intercambiador averigua si algún proceso listo que está en el dis co debe traerse a la memoria. A cada proceso en disco se le asigna un valor que es función del
RkJQdWJsaXNoZXIy MjI4NDcx