Sistemas operativos modernos
Luego, este algoritmo se repetía hasta que se satisfacía una de dos condiciones: l) no ha bía en el disco procesos listos para ejecutarse, o 2 ) la memoria estaba tan llena de procesos re cién traídos del disco que no había espacio para más. A fm de evitar la hiperpaginación, ningún proceso se intercambiaba a disco si había estado en la memoria menos de dos segundos. Se llevaba el control del almacenamiento libre en la memoria y en el dispositivo de inter cambio con una lista enlazada de huecos. Cada vez que se necesitaba espacio en la memoria o en el dispositivo, se leía la lista de huecos apropiada empleando el algoritmo de primer ajuste, que devolvía el primer agujero lo bastante grande que se encontrara. Luego se reducía el tama ño del hueco, dejando en la lista sólo la parte residual que no se necesitaba. Paginación en UNIX Todas las versiones de UNIX para las máquinas PDP-11 e Interdata, así como la implementación inicial en VAX, se basaban en intercambio, como acabamos de describir. Sin embargo, a partir de 3BSD, Berkeley añadió paginación para poder manejar los programas cada vez más grandes que se estaban escribiendo. Casi todos los sistemas UNIX actuales tienen un esquema de paginación por demanda, cuyos orígenes se remontan a 3BSD. A continuación describiremos el diseño de 4BSD, pero el de System V se basa fielmente en el de 4BSD y es casi idéntico. La idea fundamental en que se basa la paginación en 4BSD es sencilla: un proceso no fie ne que estar entero en la memoria para poderse ejecutar. Lo único indispensable es la estructu ra de usuario y las tablas de páginas. Si esto está en la memoria, se considera que el proceso está “en memoria” y su ejecución puede calendarizarse. Las páginas de los segmentos de tex to, datos y pila se traen a la memoria en forma dinámica, una por una, cuando se hace referen cia a ellas. Si la estructura de usuario y la tabla de páginas no están en la memoria, el proceso se ejecutará hasta que el intercambiador las traiga del disco. Berkeley UNIX no ufiliza el modelo de conjunto de trabajo ni ninguna otra forma de pre paginación, porque para ello es preciso saber cuáles páginas están en uso y cuáles no. Puesto que la VAX no contaba con bits de referencia a página, no era fácil obtener esa información (aunque puede obtenerse en software con un procesamiento adicional considerable). La paginación se implementa en parte en el kemel y en parte con un nuevo proceso llama do demonio de páginas. Éste es el proceso 2 (el proceso Oes el intercambiador y el proceso 1 es init, como se muestra en la figura 10-12). Al igual que todos los demonios, el de páginas se activa en forma periódica para ver si tiene trabajo que hacer. Si descubre que el número de pá ginas en la lista de páginas de memoria libres es demasiado bajo, toma medidas para liberar más páginas. La memoria principal en 4BSD está organizada como se muestra en la figura 10-16, y consta de tres partes. Las primeras dos, el kemel y el mapa central, están fijas en la memoria (es decir, nunca se paginan a disco). El resto de la memoria se divide en marcos de página, ca da uno de los cuales puede contener una página de texto, de datos o de pila, contener una pá gina de la tabla de páginas o estar en la lista libre. El mapa central incluye información acerca del contenido de los marcos de página. La en trada Odel mapa central describe el marco de página O, la entrada l describe el marco de pági na l, y así de manera sucesiva. Si los marcos de página son de l KB y las entradas del mapa
RkJQdWJsaXNoZXIy MjI4NDcx