Ці обмеження не походять від Debian або Linux, вони надходять із апаратного забезпечення. Різні архітектури (процесор і шина пам'яті) мають різні обмеження.
На поточних процесорах x86-64 ПК MMU дозволяє отримати 48 біт віртуального адресного простору . Це означає, що адресний простір обмежений 256 ТБ. За допомогою одного біта для розрізнення адрес ядра від адрес користувача, що залишає 128 ТБ для адресного простору процесу.
У поточних процесорах x86-64 фізичні адреси можуть використовувати до 48 біт , а це означає, що ви можете мати до 256 ТБ. Ліміт прогресивно підвищувався з моменту введення архітектури amd64 (з 40 біт, якщо я правильно пам'ятаю). Кожен біт адресного простору коштує певної логіки проводки та декодування (що робить процесор дорожчим, повільнішим та гарячим), тому виробники апаратних засобів мають стимул зменшити розмір.
Linux дозволяє лише фізичним адресам збільшити до 2 ^ 46 (тому у вас може бути до 64 ТБ), оскільки він дозволяє повністю відобразити фізичну пам'ять у просторі ядра. Пам’ятайте, що є 48 біт адресного простору; один біт для ядра / користувача залишає 47 біт для адресного простору ядра. Половина цього максимум звертається до фізичної пам'яті безпосередньо, а інша половина дозволяє ядру відображати все необхідне. (Linux може впоратися з фізичною пам'яттю, яка не може бути відображена в повному обсязі одночасно, але це вводить додаткові складності, тому це робиться лише на платформах, де це потрібно, наприклад x86-32 з PAE і armv7 з LPAE.)
Корисно, щоб віртуальна пам'ять була більшою, ніж фізична пам'ять з кількох причин:
- Це дозволяє ядру відображати всю фізичну пам'ять і залишати місця для віртуальних карт.
- Окрім відображень фізичної пам'яті, є відображення swap, файлів та драйверів пристроїв.
- Корисно мати незроблену пам'ять у місцях: сторожові сторінки для лову переповнення буфера , великі незмінені зони через ASLR тощо.