Batas-batas itu tidak datang dari Debian atau dari Linux, mereka datang dari perangkat keras. Arsitektur yang berbeda (prosesor dan bus memori) memiliki keterbatasan yang berbeda.
Pada prosesor PC x86-64 saat ini, MMU memungkinkan 48 bit ruang alamat virtual . Itu berarti bahwa ruang alamat dibatasi hingga 256TB. Dengan satu bit untuk membedakan alamat kernel dari alamat userland, yang meninggalkan 128TB untuk ruang alamat proses.
Pada prosesor x86-64 saat ini, alamat fisik dapat menggunakan hingga 48 bit , yang berarti Anda dapat memiliki hingga 256TB. Batas semakin meningkat sejak arsitektur amd64 diperkenalkan (dari 40 bit jika saya ingat dengan benar). Setiap bit ruang alamat membutuhkan logika pengkabelan dan penguraian ulang (yang membuat prosesor lebih mahal, lebih lambat dan lebih panas), sehingga produsen perangkat keras memiliki insentif untuk mempertahankan ukurannya.
Linux hanya memperbolehkan alamat fisik naik ke 2 ^ 46 (jadi Anda hanya bisa memiliki hingga 64TB) karena itu memungkinkan memori fisik untuk sepenuhnya dipetakan dalam ruang kernel. Ingat bahwa ada 48 bit ruang alamat; satu bit untuk kernel / pengguna meninggalkan 47 bit untuk ruang alamat kernel. Separuh dari itu paling banyak menangani memori fisik secara langsung, dan setengahnya lagi memungkinkan kernel untuk memetakan apa pun yang dibutuhkan. (Linux dapat mengatasi memori fisik yang tidak dapat dipetakan secara penuh pada saat yang sama, tetapi itu memperkenalkan kompleksitas tambahan, jadi itu hanya dilakukan pada platform yang membutuhkannya, seperti x86-32 dengan PAE dan armv7 dengan LPAE.)
Ini berguna untuk memori virtual menjadi lebih besar dari memori fisik karena beberapa alasan:
- Ini memungkinkan kernel memetakan seluruh memori fisik, dan memiliki ruang tersisa untuk mappins virtual.
- Selain pemetaan memori fisik, ada pemetaan swap, file, dan driver perangkat.
- Ini berguna untuk memiliki memori yang belum dipetakan di tempat: halaman penjaga untuk menangkap buffer overflows , zona besar yang belum dipetakan karena ASLR , dll.