2012-09-23 21 views
5

Estoy leyendo el libro "Understanding Linux Kernel" de Bovet and Cesati. En el segundo capítulo, en "Paging in Linux", el autor menciona cómo se eliminan los directorios de Middle Web y Upper con 32 arquitecturas que no tienen PAE habilitado. Tengo problemas para seguir lo que el autor quiere decir.Linux Kernel Memory Management Paging Levels

Han sido flojos en su tratamiento y no tienen mucho sentido intuitivo.

Para las arquitecturas de 32 bits sin Extensión de dirección física, bastan dos niveles de búsqueda. Linux esencialmente elimina los campos Page Upper Directory y Page Middle Directory diciendo que contienen cero bits. Sin embargo, las posiciones del directorio superior de la página y el directorio medio de la página en la secuencia de punteros se mantienen para que el mismo código pueda funcionar en arquitecturas de 32 bits y de 64 bits. El núcleo mantiene una posición para el directorio superior de la página y el directorio medio de la página al establecer el número de entradas en ellos en 1 y mapear estas dos entradas en la entrada correcta del directorio global de la página.

¿Alguien puede explicar esto de una manera más sabrosa?

+0

Está bien, así que pensé un poco más y por favor ver si esto tiene sentido. Entonces, básicamente, tienes este hardware MMU que recorre la jerarquía de páginas en TLB miss, para lo cual esencialmente, la entrada única PMD y PUD son ajenas. Sin embargo, para el resto del código kernel, necesitamos presentar una interfaz uniforme de paginación de 4 niveles.Entonces, tenemos un PUD de entrada única y un PMD de entrada única, cada uno de los cuales se emula para contener el mismo valor exacto de la entrada de PGD correspondiente para esa dirección. – subramanian

+0

Sí. En los procesadores sin PAE, la MMU espera solo las dos tablas inferiores, pero el kernel espera las cuatro, por lo que las dos superiores deben crearse con una sola entrada. Asegúrese de agregar su comentario como respuesta cuando pueda. – ughoavgfhw

+0

Creo que mi explicación tenía agujeros Linuxios me lo explica claramente. así que marcaré su respuesta como correcta. – subramanian

Respuesta

2

Bueno, creo que lo que se quiere decir es que el kernel siempre usa 4 niveles de tablas de páginas, que pueden acomodar tanto el modo normal de 32 bits, PAE y el modo largo. Creo que lo que quieren decir en la cita es que el PM4L y el PDT solo tienen una longitud de una entrada que solo apunta a la siguiente. Eso significa que en condiciones normales de 32 bits, se obtiene lo siguiente:

       /-> Page table 
PM4L -> PDT -> Page Directory --> Page table 
           \-> Page table 

Pero en PAE, se obtiene lo siguiente:

PM4L -> PDT -> 512 Page Directories -> 1024 Page tables 

Y en el modo largo, se obtiene lo siguiente:

PM4L -> 512 PDTs -> 512 Page Directories -> 1024 Page tables 

Pero debido a los 4 niveles siempre, el resto del núcleo tiene una interfaz unificada en 32 bits, PAE y modo largo.

+0

¡ah! ahora veo dónde estaba confundido. El libro parecía explicar que las 2 mesas del medio estaban inactivas. No parece tener sentido en absoluto. Tu respuesta aclara gracias! – subramanian

0

Por el momento estoy leyendo el mismo libro y no quiero hacer una nueva pregunta porque esta aborda exactamente mi problema.
La secuencia habitual de las mesas es la siguiente:

PML4 (Linux: PGD) -> PDPT (Linux: PUD) -> PD (Linux: PMD) -> PT 

En el texto se dice que dos niveles son suficientes y es por eso que el PUD y el PMD son "eliminado", pero ninguna de estas dos tablas tiene una longitud de uno y se mantiene en el orden correcto de la secuencia.
Según tengo entendido, esto significa que el PML4 (PGD) corresponde al PD (PMD) y consiste en punteros directos al PT. Entonces, el PUD y el PMD son "omitidos". Pero mi comprensión no corresponde a la respuesta correcta de la pregunta original.
¿Y cómo se resuelve una dirección como esta si una aplicación de 32 bits realiza un syscall y cambia al modo kernel de 64 bits? En este caso, la MMU espera cuatro capas y no dos.
Es obvio que algo está mal en mi comprensión porque las cosas no pueden funcionar así. Con suerte, alguien podría aclarar las cosas.