¿Cómo se determina el tamaño de la página en el espacio de direcciones virtuales?

¿Cómo se determina el tamaño de la página en el espacio de direcciones virtuales?

Linux utiliza un sistema de memoria virtual donde todas las direcciones son direcciones virtuales y no direcciones físicas. Estas direcciones virtuales son convertidas en direcciones físicas por el procesador.

Para facilitar esta traducción, la memoria virtual y la física se dividen en páginas. Cada una de estas páginas recibe un número único; el número de marco de página.

Algunos tamaños de página pueden ser de 2 KB, 4 KB, etc. Pero, ¿cómo se determina este número de tamaño de página? ¿Está influenciado por el tamaño de la arquitectura? Por ejemplo, un bus de 32 bits tendrá 4 GB de espacio de direcciones.

Respuesta1

Puede averiguar el tamaño de página predeterminado de un sistema consultando su configuración mediante el getconfcomando:

$ getconf PAGE_SIZE
4096

o

$ getconf PAGESIZE
4096

NOTA:Las unidades anteriores suelen estar en bytes, por lo que 4096 equivale a 4096 bytes o 4 kB.

Esto está cableado en el código fuente del kernel de Linux aquí:

Ejemplo

$ more /usr/src/kernels/3.13.9-100.fc19.x86_64/include/asm-generic/page.h
...
...
/* PAGE_SHIFT determines the page size */

#define PAGE_SHIFT  12
#ifdef __ASSEMBLY__
#define PAGE_SIZE   (1 << PAGE_SHIFT)
#else
#define PAGE_SIZE   (1UL << PAGE_SHIFT)
#endif
#define PAGE_MASK   (~(PAGE_SIZE-1))

¿Cómo el cambio te da 4096?

Cuando desplazas bits, estás realizando una multiplicación binaria por 2. Entonces, en efecto, un desplazamiento de bits hacia la izquierda ( 1 << PAGE_SHIFT) está multiplicando 2^12 = 4096.

$ echo "2^12" | bc
4096

Respuesta2

El hardware (específicamente, elMMU, que forma parte de la CPU) determina qué tamaños de página son posibles. No existe ninguna relación con el tamaño del registro del procesador y sólo una relación indirecta con el tamaño del espacio de direcciones (en el sentido de que la MMU determina ambos).

Casi todas las arquitecturas admiten un tamaño de página de 4kB. Algunas arquitecturas admiten páginas más grandes (y algunas también admiten páginas más pequeñas), pero 4kB es un valor predeterminado muy extendido.

Linux admite dos tamaños de página:

  • Páginas de tamaño normal, que creo que son de 4 kB de forma predeterminada en todas las arquitecturas, aunque algunas arquitecturas permiten otros valores, por ejemplo, 16 kB enARM64o 8kB, 16kB o 64kB enIA64. Estos corresponden al nivel más profundo de descriptores en la MMU (lo que Linux llamaPTE).
  • Paginas enormes, si está compilado en ( CONFIG_HUGETLB_PAGEes necesario y CONFIG_HUGETLBFStambién para la mayoría de los usos). Esto corresponde al segundo nivel más profundo de descriptores MMU (lo que Linux llama PMD) (o al menos así suele ser, no sé si esto se aplica a todas las arquitecturas).

El tamaño de la página es un compromiso entre el uso de la memoria, el uso de la memoria y la velocidad.

  • Un tamaño de página más grande significa más desperdicio cuando una página se usa parcialmente, por lo que el sistema se queda sin memoria antes.
  • Un nivel de descriptor de MMU más profundo significa más memoria del kernel para las tablas de páginas.
  • Un nivel de descriptor de MMU más profundo significa que se dedica más tiempo a recorrer la tabla de páginas.

Las ganancias de tamaños de página más grandes son pequeñas para la mayoría de las aplicaciones, mientras que el costo es sustancial. Es por eso que la mayoría de los sistemas utilizan sólo páginas de tamaño normal.

Puede consultar el tamaño de página (normal) en su sistema con elgetconfutilidad o la función Csysconf.

$ getconf PAGE_SIZE
4096

Usando páginas enormesrequiere montar el hugetlbfssistema de archivos y mmaphacer ping a los archivos allí.

Respuesta3

El procesador determina los tamaños de página disponibles. Para la mayoría de los propósitos, el tamaño de página implementado por hardware en los procesadores x86 y x86_64 es de 4 kb. Sin embargo, el sistema operativo puede asignar más de una página a la vez si así lo desea y, por lo tanto, implementar de manera efectiva páginas de 8 kb, 16 kb o 32 kb en el software.

Los procesadores x86 y x86_64 también pueden mezclar respectivamente páginas de 4 MB y 2 MB junto con las páginas estándar de 4 KB. Si esa capacidad se utiliza, se utilizaría principalmente para asignar espacio en el kernel.

Respuesta4

El tamaño de la página depende principalmente de la arquitectura del procesador. En x86, desde los tiempos del procesador 386 que introdujo el modo protegido, el tamaño de página ha sido de 4 kB.

En el modo x64, también puede haber páginas grandes, de 2 MB de tamaño. Sin embargo, usarlos es un poco complicado.

Puede encontrar más información sobre el tamaño de página enArtículo de Wikipedia

información relacionada