Un espacio de direcciones de 32 bits significa que tiene espacio para 4 GB de direcciones. Idealmente, al núcleo le gusta poder mapear toda la memoria física, toda la memoria de la tarea actual y toda su propia memoria. Si la memoria física solo ocupa todos los 4 GB disponibles, eso no funcionará. Por lo tanto, la memoria física se divide en poca memoria, que está asignada todo el tiempo, y alta memoria, que debe asignarse cuando está en uso. A menos que esté ejecutando un kernel parcheado, en la arquitectura ix86, se dedican 128 MB de espacio de direcciones al código del kernel y las estructuras de datos, y 896 MB se dedican al mapeo de la memoria física (para un total de 1 GB).
Lectura de antecedentes sobre las complejidades de la administración de memoria cuando su espacio de direcciones no es cómodamente más grande que su memoria total:
Extractos de los registros de su núcleo:
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cdce0000 (usable)
BIOS-e820: 00000000cdce0000 - 00000000cdce3000 (ACPI NVS)
BIOS-e820: 00000000cdce3000 - 00000000cdcf0000 (ACPI data)
BIOS-e820: 00000000cdcf0000 - 00000000cdd00000 (reserved)
BIOS-e820: 00000000d0000000 - 00000000e0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
2404MB HIGHMEM available.
887MB LOWMEM available.
Zone PFN ranges:
DMA 0x00000000 -> 0x00001000
Normal 0x00001000 -> 0x000377fe
HighMem 0x000377fe -> 0x000cdce0
Aquí tiene 887 MB de memoria baja: el máximo teórico de 896 MB menos unos MB de búferes DMA (zonas de memoria utilizadas para comunicarse con dispositivos de hardware).
De su memoria física, 3328 MB se asignan a direcciones de menos de 4 GB y 768 MB se asignan a direcciones de más de 4 GB (el rango 0x100000000–0x130000000). No está obteniendo acceso a estos 768 MB, lo que explica por qué solo tiene 3242 MB disponibles (4096 MB de RAM menos 768 MB inaccesibles menos 9 MB de memorias intermedias DMA menos 75 MB utilizados por el propio núcleo para el código y los datos). No sé por qué el BIOS asigna algo de RAM por encima de la marca de 4 GB, pero como punto de datos, estoy publicando esto desde una PC con 4 GB de RAM que de manera similar tiene RAM asignada a 0x100000000–0x130000000.
La asignación de memoria física por encima de 4 GB requiere el uso de PAE . PAE incurre en una pequeña sobrecarga de rendimiento (en particular, requiere estructuras de datos más grandes en el administrador de memoria), por lo que no está habilitado sistemáticamente. El kernel predeterminado de Ubuntu se compila sin compatibilidad con PAE. Obtenga el -generic-pae
kernel para poder acceder a hasta 64 GB de RAM.
TL, DR: Linux está funcionando como se esperaba. El firmware no es tan útil. Obtenga un kernel habilitado para PAE.