Sistemas operativos modernos

los archivos con correspondencia son ejemplos de áreas (vea la figura 10-14). Puede haber hue­ cos en el espacio de direcciones virtual entre las áreas. Cualquier referencia a la memoria que caiga dentro de un hueco producirá un fallo de página fatal. El tamaño de página es fijo, por ejemplo, 4 KB en Pentium y 8 KB en Alpha. Cada área se describe en el kemel con una entrada vm_area_struct. Todas las entradas vm_area_struct de un proceso se enlazan en una lista ordenada por dirección virtual, que per­ mite hallar todas las páginas. Cuando la lista crece demasiado (más de 32 entradas), se crea un árbol para acelerar las búsquedas. La entrada vm_area_struct indica las propiedades del área, que incluyen el modo de protección (por ejemplo, sólo lectura o lectura/escritura), si está fija en la memoria (no paginable) o no, y la dirección en la que crece (hacia arriba en el caso de segmentos de datos, hacia abajo en el caso de pilas). La entrada vm_area_stnict también registra si el área es privada respecto ai proceso o se comparte con uno o más procesos. Después de un fork, Linux crea una copia de la lista del área para el proceso hijo, pero hace que tanto el padre como el hijo apunten a las mismas tablas de pá­ ginas. Las áreas se marcan como de lectura/escritura, pero las páginas se marcan como de sólo lectura. Si cualquiera de los dos procesos trata de escribir en una página, se produce un fallo de protección y el kemel ve que el área es escribible desde el punto de vista lógico pero la página no, así que proporciona al proceso una copia de la página y la marca como de lectura/escritura. Con este mecanismo se implementa el copiado al escribir. Vm_area_stmct también registra si el área tiene o no asignado almacenamiento de respal­ do en el disco y, en caso de tenerlo, dónde. Los segmentos de texto emplean el binario ejecu­ table como almacén de respaldo, mientras que los archivos con correspondencia en memoria utilizan el archivo en disco como almacén de respaldo. Otras áreas, como la pila, no tienen asignado un almacén de respaldo sino hasta que se hace necesario paginarlas a disco. Linux utiliza un esquema de paginación de tres niveles. Aunque este esquema se incluyó en el sistema para el Alpha, también se usa (en una versión degenerada) en todas las demás arquitec­ turas. Cada dirección virtual se descompone en cuatro campos, como se muestra en la figura 10-17. El campo de dirección se usa como índice para consultar el directorio global, del cual cada proceso tiene uno en privado. El valor hallado es un apuntador a una de las tablas intermedias de páginas, que también se indizan con uno de los campos de la dirección virtual. La entrada se­ leccionada apunta a la tabla de páginas final, que se indiza con el campo de página de la direc­ ción virtual. La entrada que se encuentra allí apunta a la página requerida. En Pentium, que usa paginación de dos niveles, cada directorio intermedio de páginas tiene una sola entrada, así que la entrada del directorio global es en realidad la que escoge la tabla de páginas que se usará. La memoria física fiene varios usos. El kemel en sí es permanente; ninguna de sus partes se pagina jamás a disco. El resto de la memoria está disponible para páginas de usuario, el caché de búfer empleado por el sistema de archivos, el caché de paginación y otros usos. El caché de búfer contiene bloques de disco que se han leído recientemente o que se han leído por adelan­ tado porque se cree que se usarán en un futuro cercano. Su tamaño es dinámico y compite por la misma reserva de páginas que las páginas de usuario. El caché de paginación no es en reali­ dad un caché aparte, sino tan sólo el conjunto de páginas de usuario que ya no se necesitan y es­ tán esperando que se les pagine a disco. Si una página del caché de paginación se reutiliza antes de que se desaloje de la memoria, podrá recuperarse con rapidez.

RkJQdWJsaXNoZXIy MjI4NDcx