Bagaimana proses ruang alamat virtual proses 64-bit dibagi dalam Linux?

12

Gambar berikut menunjukkan bagaimana ruang alamat virtual proses 32-bit dibagi:

masukkan deskripsi gambar di sini

Tapi bagaimana proses ruang alamat virtual proses 64-bit dibagi?

Christopher
sumber

Jawaban:

10

64-bit x86 virtual memory map 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" "bagian bawah" dan "bagian lebih tinggi", dengan sejumlah bit secara efektif dibatasi hingga 48 atau 56; lihat Wikipedia untuk detailnya.)

Peta lengkap didokumentasikan secara rinci dalam kernel ; Saat ini sepertinya

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

dengan alamat virtual 48-bit. (Varian 56-bit memiliki struktur yang sama, dengan 64 PB ruang alamat yang dapat digunakan di kedua sisi lubang 16K PB.)

Berbeda dengan kasing 32-bit, peta memori "64-bit" adalah refleksi langsung dari kendala perangkat keras.

Stephen Kitt
sumber
Untuk memperjelas: batasan ini dikenakan oleh perangkat keras. Saat ini tidak ada implementasi prosesor 64-bit yang tidak meninggalkan lubang besar alamat yang tidak dapat digunakan di tengah ruang alamat virtual. Jumlah memori fisik yang dapat diatasi oleh CPU juga jauh di bawah 2 pangkat 64.
Johan Myréen
Terima kasih @Johan, saya sudah mencoba menyoroti ini.
Stephen Kitt