Con un kernel a 32 bit, hai solo 4 GB di spazio indirizzo disponibile . Parte di questo spazio di indirizzi deve essere utilizzato dall'hardware (virtuale o fisico) nel sistema, come schede video, NIC, ecc., per i propri scopi. Questo utilizzo è solitamente compreso tra 256 MB e 1 GB, a seconda di quanto spazio di indirizzamento richiede il particolare hardware.
Poiché quello spazio di indirizzi è utilizzato dall'hardware, la RAM corrispondente è generalmente inaccessibile a un sistema a 32 bit.
Hai un paio di opzioni:
- L'opzione preferita è eseguire un sistema operativo a 64 bit. Ciò espande notevolmente lo spazio degli indirizzi, quindi c'è molto spazio per tutta la RAM e l'hardware. Rompe anche il limite di 2 GB/3 GB a 32 bit sulle applicazioni mantenendo la capacità di eseguire programmi a 32 bit. In generale, qualsiasi sistema con 2 GB di RAM in più dovrebbe eseguire un sistema operativo a 64 bit per evitare questi problemi.
- Un'altra opzione è eseguire un kernel a 32 bit con PAE abilitato. Questo mostrerà la RAM, ma ogni processo sarà comunque limitato a 2 GB/3 GB di spazio degli indirizzi, a seconda dei dettagli della build del kernel. Poiché i sistemi operativi a 64 bit eseguiranno perfettamente le applicazioni a 32 bit, ciò non presenta alcun vantaggio e presenta molti svantaggi (come la mancanza di un percorso di aggiornamento).
L'output di free
Il comando non conta la memoria del kernel riservata e pochi altri piccoli bit. Vedrai questa discrepanza anche in un kernel a 64 bit e anche con <2 GB di RAM.
La linea critica dalla tua mappa RAM fisica è questa:
BIOS-e820: 0000000100000000 - 0000000140000000 (usable)
Questa riga mostra che 1 GB (0x40000000 byte, esadecimale) della RAM fisica del tuo sistema viene mappato dal BIOS al di sopra del limite di 4 GB, rendendolo inaccessibile da un sistema a 32 bit senza PAE.