Come viene diviso in Linux uno spazio di indirizzi virtuali di processo a 64 bit?


12

L'immagine seguente mostra come è diviso uno spazio di indirizzi virtuali di processo a 32 bit:

inserisci qui la descrizione dell'immagine

Ma come viene diviso uno spazio di indirizzi virtuali di processo a 64 bit?

Risposte:


10

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.


Per chiarire: questa limitazione è imposta dall'hardware. Al momento non esiste un'implementazione del processore a 64 bit che non lasci un enorme buco di indirizzi inutilizzabili nel mezzo dello spazio degli indirizzi virtuali. La quantità di memoria fisica che le CPU sono in grado di indirizzare è anche molto inferiore a 2 alla potenza di 64.
Johan Myréen

Grazie @Johan, ho provato a evidenziarlo.
Stephen Kitt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.