Esses limites não vêm do Debian ou do Linux, eles vêm do hardware. Arquiteturas diferentes (processador e barramento de memória) têm limitações diferentes.
Nos atuais processadores x86-64 para PC, a MMU permite 48 bits de espaço de endereço virtual . Isso significa que o espaço de endereço está limitado a 256 TB. Com um bit para distinguir os endereços do kernel dos endereços da terra do usuário, isso deixa 128 TB para o espaço de endereço do processo.
Nos atuais processadores x86-64, os endereços físicos podem usar até 48 bits , o que significa que você pode ter até 256 TB. O limite aumentou progressivamente desde a introdução da arquitetura amd64 (de 40 bits, se bem me lembro). Cada bit de espaço de endereço custa alguma lógica de fiação e decodificação (o que torna o processador mais caro, mais lento e mais quente), para que os fabricantes de hardware tenham um incentivo para manter o tamanho baixo.
O Linux permite apenas endereços físicos de até 2 ^ 46 (portanto, você só pode ter até 64 TB) porque permite que a memória física seja totalmente mapeada no espaço do kernel. Lembre-se de que existem 48 bits de espaço de endereço; um bit para o kernel / usuário deixa 47 bits para o espaço de endereço do kernel. Metade disso, no máximo, endereça a memória física diretamente, e a outra metade permite que o kernel mapeie o que for necessário. (O Linux pode lidar com a memória física que não pode ser mapeada na íntegra ao mesmo tempo, mas isso introduz complexidade adicional, por isso é feito apenas em plataformas onde é necessário, como x86-32 com PAE e armv7 com LPAE.)
É útil que a memória virtual seja maior que a memória física por vários motivos:
- Ele permite que o kernel mapeie toda a memória física e tenha espaço para mappins virtuais.
- Além dos mapeamentos da memória física, existem mapeamentos de troca, de arquivos e de drivers de dispositivo.
- É útil ter memória não mapeada em alguns locais: páginas de proteção para capturar estouros de buffer , grandes zonas não mapeadas devido ao ASLR , etc.