¿Por qué necesito un directorio de páginas?

2

He encontrado esa imagen:

y no puede encontrar una razón por la que hay directorio de páginas ? Creo que podría ahorrar tiempo si el proceso (o procesos), especialmente el registro CR3 , apunta directamente a la tabla de páginas.

    
pregunta Jorgos

2 respuestas

10

La MMU realiza una asignación arbitraria de direcciones virtuales de 32 bits a direcciones físicas de 32 bits, con una granularidad de 4 KB.

El rango de direcciones de 4GB se divide en 1 millón de páginas de 4kB.

Puede usar una única matriz con 1 millón de entradas de tabla de páginas, que ocupan 4 MB (con 32 bits por PTE). También puede usar tablas de páginas "anidadas", que permiten reducir el espacio de memoria de las tablas de mapeo, marcando algunas entradas de primer nivel como no asignadas.

Imagínese cuando las primeras 386 computadoras se vendieron con 4MB de RAM. ¿Dónde pondrías una mesa de página plana? Ahora, las computadoras de 64 bits necesitarían tablas de páginas increíblemente grandes si estas tablas no fueran tablas de varios niveles (4 niveles en x64_64, IIRC)

Un refinamiento adicional es que las tablas de páginas son por aplicación. Cada aplicación puede utilizar libremente todo el rango de direcciones virtuales y el sistema operativo puede decidir qué páginas son exclusivas y cuáles se comparten (por ejemplo, se puede acceder a un código de biblioteca dinámica desde varios programas). Por lo tanto, partes de las tablas de páginas de nivel 2 se pueden compartir entre aplicaciones, mientras que el primer nivel es separado para cada tarea.

El desplazamiento de varias tablas lleva tiempo, la CPU mantiene las traducciones de la última página a la que accedió en "TLBs" (Translation Lookaside Buffers) y, a veces, algunas entradas de la tabla de la página intermedia también se almacenan en la memoria caché, por lo que si un software utiliza memoria contigua, habrá menos accesos para RAM son usualmente necesarios.

    
respondido por el TEMLIB
7

Como comentario de Wouter van Ooijen , el uso de una tabla de página plana usaría significativamente más memoria en el caso común de la asignación densa de memoria física a una pequeña porción del espacio de direcciones virtuales. Con una tabla de páginas planas, cada proceso (espacio de direcciones) usaría 4 MiB solo para la tabla de páginas. Al usar un directorio de páginas, un proceso con tres regiones de dirección (texto, datos / pila, pila) que encajan dentro de una porción de 4 MiB solo requeriría cuatro páginas (16 KiB) de espacio de tablas de páginas (una para el directorio y una para cada región de dirección).

Este arreglo también puede facilitar compartir tablas de páginas. Si la entrada del directorio de la página enmascara los permisos, incluso sería posible tener permisos diferentes para los diferentes procesos mientras se comparte la tabla de páginas del nivel más bajo (por ejemplo, una entrada del directorio podría marcar la tabla de la página como que permite lecturas y escrituras, mientras que otro directorio que apunta a la misma) la tabla de la página puede no permitir escrituras).

(También sería posible proporcionar diferentes tipos de metadatos (región) en la entrada del directorio que los tipos de metadatos (página) en la entrada de la tabla de páginas).

Además, varias entradas de directorio podrían apuntar a la misma tabla de páginas. Esto podría usarse para asignar grandes regiones de página cero.

El uso de un directorio tiene el efecto secundario de proporcionar una forma natural de admitir páginas grandes al indicar que la entrada del directorio de la página es en realidad una entrada de la tabla de páginas. (Estas grandes entradas de tabla de páginas de página tendrían diez bits adicionales que podrían usarse para ampliar el tamaño de la dirección física o para proporcionar metadatos).

También tenga en cuenta que al igual que las entradas de la tabla de páginas se pueden almacenar en caché (en la TLB), las entradas del directorio de páginas se pueden almacenar en caché. Tener el nivel de direccionamiento indirecto no es gratis, pero bajo los patrones de uso común, el almacenamiento en caché es razonablemente efectivo.

    
respondido por el Paul A. Clayton

Lea otras preguntas en las etiquetas