Wie ist ein virtueller 64-Bit-Prozessadressraum unter Linux aufgeteilt?

12

Das folgende Bild zeigt, wie ein virtueller 32-Bit-Prozessadressraum aufgeteilt wird:

Geben Sie hier die Bildbeschreibung ein

Aber wie wird ein virtueller Adressraum für 64-Bit-Prozesse aufgeteilt?

Christopher
quelle

Antworten:

8

Die virtuelle 64-Bit-x86-Speicherzuordnung teilt den Adressraum in zwei Teile: Der untere Abschnitt (mit dem oberen Bit auf 0) ist der Benutzerraum, der obere Abschnitt (mit dem oberen Bit auf 1) ist der Kernelraum. (Beachten Sie, dass x86-64 "kanonische" Adressen "untere Hälfte" und "höhere Hälfte" definiert, wobei die Anzahl der Bits effektiv auf 48 oder 56 begrenzt ist. Weitere Informationen finden Sie in Wikipedia .)

Die vollständige Map ist im Kernel detailliert dokumentiert ; Derzeit sieht es so aus

========================================================================================
    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
__________________|_________|__________________|_________|______________________________

mit virtuellen 48-Bit-Adressen. (Die 56-Bit-Variante hat dieselbe Struktur mit 64 PB nutzbarem Adressraum auf beiden Seiten eines 16K-PB-Lochs.)

Im Gegensatz zum 32-Bit-Fall spiegelt die 64-Bit-Speicherzuordnung die Hardwareeinschränkungen direkt wider.

Stephen Kitt
quelle
Zur Verdeutlichung: Diese Einschränkung wird von der Hardware auferlegt. Derzeit gibt es keine 64-Bit-Prozessorimplementierung, die keine große Lücke unbrauchbarer Adressen in der Mitte des virtuellen Adressraums hinterlässt. Die Menge an physischem Speicher, die die CPUs adressieren können, liegt ebenfalls weit unter 2
hoch
Danke @Johan, ich habe versucht dies hervorzuheben.
Stephen Kitt