Uno spazio di indirizzi a 32 bit significa che hai spazio per 4 GB di indirizzi. Idealmente, al kernel piace essere in grado di mappare tutta la memoria fisica, tutta la memoria dell'attività corrente e tutta la propria memoria. Se la memoria fisica da sola occupa tutti i 4 GB disponibili, non funzionerà. Quindi la memoria fisica è divisa in memoria insufficiente, che è sempre mappata, e memoria alta, che deve essere mappata quando è in uso. A meno che non si stia eseguendo un kernel con patch, sull'architettura ix86, 128 MB di spazio di indirizzi sono dedicati al codice del kernel e alle strutture di dati e 896 MB sono dedicati alla mappatura della memoria fisica (per un totale di 1 GB).
Lettura in background delle complessità della gestione della memoria quando lo spazio degli indirizzi non è comodamente più grande della memoria totale:
Estratti dai log del 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
Qui hai 887 MB di memoria insufficiente: il massimo teorico di 896 MB meno alcuni MB di buffer DMA (zone di memoria utilizzate per comunicare con i dispositivi hardware).
Della tua memoria fisica, 3328 MB è mappato a indirizzi inferiori a 4 GB e 768 MB è mappato a indirizzi superiori a 4 GB (l'intervallo 0x100000000–0x130000000). Non hai accesso a questi 768 MB, il che spiega perché hai solo 3242 MB disponibili (4096 MB di RAM meno 768 MB inaccessibili meno 9 MB di buffer DMA meno 75 MB utilizzati dal kernel stesso per codice e dati). Non so perché il BIOS associ un po 'di RAM al di sopra del segno da 4 GB, ma come punto dati, sto pubblicando questo da un PC con 4 GB di RAM che allo stesso modo ha RAM mappata a 0x100000000–0x130000000.
La mappatura della memoria fisica superiore a 4 GB richiede l'utilizzo di PAE . PAE comporta un piccolo sovraccarico di prestazioni (in particolare, richiede strutture dati più grandi nel gestore della memoria), quindi non è abilitato sistematicamente. Il kernel predefinito di Ubuntu è compilato senza supporto PAE. Ottieni il -generic-pae
kernel per poter accedere fino a 64 GB di RAM.
TL, DR: Linux funziona come previsto. Il firmware non è così utile. Ottieni un kernel abilitato per PAE.