Das folgende Bild zeigt, wie ein virtueller 32-Bit-Prozessadressraum aufgeteilt wird:
Aber wie wird ein virtueller Adressraum für 64-Bit-Prozesse aufgeteilt?
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.