¿Cómo coexisten la paginación extendida (4 MB) y la regular (4 KB)?

¿Cómo coexisten la paginación extendida (4 MB) y la regular (4 KB)?

En la arquitectura x86, la "paginación extendida" permite que los marcos de página (memoria física) sean de 4 MB en lugar de 4 KB.

El libro "Comprensión del kernel de Linux, tercero", en el capítulo 2 "Direccionamiento de la memoria", subcapítulo "Paginación en Linux", sección "Tablas de páginas del kernel", explica que para la tabla de páginas del kernel final cuando el tamaño de la RAM es inferior a 896 MB :

[...] el kernel puede direccionar la RAM haciendo uso de páginas grandes (consulte la sección "Paginación extendida" anteriormente en este capítulo).

Sin embargo, en la sección "Paginación extendida" (subcapítulo "Paginación en hardware"), está escrito:

La paginación extendida coexiste con la paginación regular.

En realidad, no entiendo cómo coexisten la paginación extendida y regular. ¿Puede alguien explicar esas preguntas?

  • ¿En qué casos el kernel utiliza páginas de 4 MB? o páginas de 4 KB?
  • ¿Qué tamaño de marco de página se utilizará para las operaciones kmalloc? para vmalloc?
  • Si asumimos que el código y los datos iniciales (segmentos del kernel, tablas de páginas provisionales y 128 KB para datos dinámicos) caben en los primeros 8 MB de RAM (como en el ejemplo dado en el libro), ¿qué pasa si la cantidad real de código y datos los datos son solo 5 MB: ¿el kernel desperdiciará 8 - 5 = 3 MB?

Respuesta1

1. ¿En qué casos el kernel utiliza páginas de 4 MB? o páginas de 4 KB?

La aplicación puede solicitar una página enorme, el kernel no determinará el tamaño de la página a menos que compile PAGE_SIZE en el código fuente del kernel. El uso de indicadores mmap puede determinar el tamaño de la página en el código fuente de la aplicación.

2. ¿Qué tamaño de marco de página se utilizará para las operaciones kmalloc? para vmalloc?

kmalloc usa el tamaño de página predeterminado en el kernel de Linux, es decir, PAGE_SIZE en el kernel, que se compila o se determina en tiempo de ejecución. Lo mismo para vmalloc.

3. Si asumimos que el código y los datos iniciales (segmentos del kernel, tablas de páginas provisionales y 128 KB para datos dinámicos) caben en los primeros 8 MB de RAM (como en el ejemplo dado en el libro), ¿qué pasa si la cantidad real de El código y los datos son solo 5 MB: ¿el kernel desperdiciará 8 - 5 = 3 MB?

El tamaño de la memoria desperdiciada está determinado por PAGE_SIZE y los datos. Si el tamaño de la página es de 4 MB, los datos son de 5 MB, el tamaño de la memoria desperdiciada será (PAGE_SIZE*N) - 5 MB = 3 MB.

información relacionada