Gambar berikut menunjukkan bagaimana ruang alamat virtual proses 32-bit dibagi:
Tapi bagaimana proses 64-bit ruang alamat virtual dibagi?
Jawaban yang Diterima:
x86
Peta memori virtual x86 64-bit membagi ruang alamat menjadi dua:bagian bawah (dengan bit atas diatur ke 0) adalah ruang pengguna, bagian atas (dengan bit atas diatur ke 1) adalah ruang kernel. (Perhatikan bahwa x86-64 mendefinisikan alamat "kanonik" "setengah bawah" dan "setengah lebih tinggi", dengan jumlah bit secara efektif dibatasi hingga 48 atau 56; lihat Wikipedia untuk detailnya.)
Peta lengkap didokumentasikan secara rinci di kernel; saat ini sepertinya
Mulai addr | Offset | Akhiri alamat | Ukuran | Deskripsi area VM |
---|---|---|---|---|
0000_0000_0000_0000 | 0000_7fff_ffff_ffff | 128 TiB | memori virtual ruang pengguna | |
0000_8000_0000_0000 | +128 TiB | ffff_7fff_ffff_ffff | ~16 juta TiB | non-kanonik |
ffff_8000_0000_0000 | -128 TiB | ffff_ffff_ffff_ffff | 128 TiB | memori virtual ruang kernel |
dengan alamat virtual 48-bit. (Varian 56-bit memiliki struktur yang sama, dengan 64 PiB ruang alamat yang dapat digunakan di kedua sisi lubang 16K PiB.)
(Perhatikan bahwa 16KPiB =16MTiB =2byte.)
Tidak seperti casing 32-bit, peta memori "64-bit" adalah cerminan langsung dari batasan perangkat keras.
LENGAN
ARM 64-bit memiliki perbedaan alamat yang serupa dalam perangkat keras:enam belas bit teratas adalah 0 untuk ruang pengguna, 1 untuk ruang kernel. Linux menggunakan 39, 42 atau 48 bit untuk alamat virtual, tergantung pada jumlah tingkat tabel halaman dan ukuran halaman. Dengan ARMv8.2-LVA, empat bit lainnya ditambahkan, menghasilkan alamat virtual 52-bit.
Ini juga didokumentasikan secara rinci di kernel.