L'immagine seguente mostra come è diviso uno spazio di indirizzi virtuali di processo a 32 bit:
Ma come viene diviso uno spazio di indirizzi virtuali di processo a 64 bit?
L'immagine seguente mostra come è diviso uno spazio di indirizzi virtuali di processo a 32 bit:
Ma come viene diviso uno spazio di indirizzi virtuali di processo a 64 bit?
Risposte:
La mappa di memoria virtuale x86 a 64 bit suddivide lo spazio degli indirizzi in due: la sezione inferiore (con il bit superiore impostato su 0) è spazio utente, la sezione superiore (con il bit superiore impostato su 1) è spazio kernel. (Si noti che x86-64 definisce gli indirizzi "canonici" "metà inferiore" e "metà superiore", con un numero di bit effettivamente limitato a 48 o 56; vedere Wikipedia per i dettagli.)
La mappa completa è documentata in dettaglio nel kernel ; al momento sembra
========================================================================================
Start addr | Offset | End addr | Size | VM area description
========================================================================================
| | | |
0000000000000000 | 0 | 00007fffffffffff | 128 TB | user-space virtual memory
__________________|_________|__________________|_________|______________________________
| | | |
0000800000000000 | +128 TB | ffff7fffffffffff | ~16M TB | non-canonical
__________________|_________|__________________|_________|______________________________
| | | |
ffff800000000000 | -128 TB | ffffffffffffffff | 128 TB | kernel-space virtual memory
__________________|_________|__________________|_________|______________________________
con indirizzi virtuali a 48 bit. (La variante a 56 bit ha la stessa struttura, con 64 PB di spazio di indirizzi utilizzabile su entrambi i lati di un foro PB 16K.)
A differenza del caso a 32 bit, la mappa di memoria "64 bit" riflette direttamente i vincoli hardware.