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 diferentes limitações.
Nos atuais processadores para PC x86-64, a MMU permite 48 bits de espaço de endereço virtual . Isso significa que o espaço de endereço é limitado a 256 TB. Com um bit para distinguir endereços de kernel de endereços de usuários, isso deixa 128 TB para o espaço de endereço de um processo.
Nos atuais processadores x86-64, endereços físicos podem usar até 48 bits , o que significa que você pode ter até 256 TB. O limite aumentou progressivamente desde que a arquitetura amd64 foi introduzida (a partir de 40 bits, se bem me lembro). Cada bit do espaço de endereço custa algumas lógicas de fiação e decodificação (o que torna o processador mais caro, mais lento e mais quente), portanto, os fabricantes de hardware têm um incentivo para manter o tamanho reduzido.
O Linux só permite que os endereços físicos subam para 2 ^ 46 (então 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 kernel / user deixa 47 bits para o espaço de endereço do kernel. Metade disso, no máximo, endereça diretamente a memória física, 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 integralmente ao mesmo tempo, mas isso introduz complexidade adicional, portanto, ela é feita apenas em plataformas onde é necessário, como x86-32 com PAE e armv7 com LPAE.)
É útil para a memória virtual ser maior que a memória física por vários motivos:
- Permite ao kernel mapear toda a memória física e ter espaço para mappins virtuais.
- Além dos mapeamentos da memória física, há mapeamentos de troca, de arquivos e de drivers de dispositivos.
- É útil ter memória não mapeada em locais: páginas de proteção para capturar estouros de buffer , grandes zonas não mapeadas devido a ASLR , etc.