Um espaço de endereço de 32 bits significa que você tem espaço para 4 GB de endereços. Idealmente, o kernel gosta de poder mapear toda a memória física, toda a memória da tarefa atual e toda a sua própria memória. Se a memória física ocupar todos os 4 GB disponíveis, isso não funcionará. Portanto, a memória física é dividida em pouca memória, que é mapeada o tempo todo, e memória alta, que deve ser mapeada quando em uso. A menos que você esteja executando um kernel corrigido, na arquitetura ix86, 128 MB de espaço de endereço são dedicados ao código do kernel e às estruturas de dados, e 896 MB são dedicados ao mapeamento da memória física (para um total de 1 GB).
Leitura em segundo plano das complexidades do gerenciamento de memória quando seu espaço de endereço não é confortavelmente maior que sua memória total:
Trechos dos logs do seu kernel:
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
Aqui você tem 887 MB de memória baixa: o máximo teórico de 896 MB menos alguns MB de buffers DMA (zonas de memória usadas para se comunicar com dispositivos de hardware).
Da sua memória física, 3328 MB são mapeados em endereços abaixo de 4 GB e 768 MB são mapeados em endereços acima de 4 GB (o intervalo 0x100000000–0x130000000). Você não está tendo acesso a esses 768 MB, o que explica por que você só tem 3242 MB disponíveis (4096 MB de RAM menos 768 MB inacessíveis, menos 9 MB de buffers DMA, menos 75 MB usados pelo próprio kernel para código e dados). Não sei por que o BIOS mapeia alguma RAM acima da marca de 4 GB, mas como ponto de dados, estou postando isso em um PC com 4 GB de RAM que, de maneira semelhante, tem RAM mapeada em 0x100000000–0x130000000.
O mapeamento da memória física acima de 4 GB requer o uso do PAE . O PAE incorre em uma pequena sobrecarga de desempenho (em particular, requer estruturas de dados maiores no gerenciador de memória), portanto, não é ativado sistematicamente. O kernel padrão do Ubuntu é compilado sem o suporte ao PAE. Faça com que o -generic-pae
kernel seja capaz de acessar até 64 GB de RAM.
TL, DR: o Linux está funcionando conforme o esperado. O firmware não é tão útil. Obtenha um kernel habilitado para PAE.