Os limites teóricos de memória em máquinas de 16, 32 e 64 bits são os seguintes:
16 bits = 65.536 bytes (64 kilobytes)
32 bits = 4.294.967.296 bytes (4 Gigabytes)
64 bits = 18.446.744.073.709.551.616 (16 exabytes)
Lembro-me do DOS / Windows 3.11 dias, que a memória de 16 bits poderia ser separada em segmentos, para que uma máquina de 16 bits pudesse acessar uma quantidade maior de memória que 64 kilobytes.
Eu tenho uma máquina com 16 GB de memória e estou inicializando duas vezes um sistema operacional de 32 bits e um sistema operacional de 64 bits. Eu posso acessar todos os 16 GB de 64 bits, mas apenas 3,21 GB em 32 bits.
Portanto, minha pergunta é: se os sistemas operacionais de 16 bits permitiram maior acesso à memória de 64 KB devido à segmentação de memória, por que as máquinas de 32 bits não seguem o mesmo principal?
Em vez de explicar por mim mesmo, deixarei alguém que precisar manter um kernel com suporte do PAE falar de suas maneiras encantadoras, Linus Torvalds
Lembre-se também de que o suporte do PAE nas versões de 32 bits do Windows custa muito dinheiro. O XP nem poderá usar normalmente 4 GiB de RAM normalmente, porque a MS optou por não ativar os recursos do PAE. Um kernel intimamente relacionado, o Windows 2003 Server, oferece suporte ao PAE. No entanto, mesmo lá, a sua "edição padrão" suportará apenas 4 GiB (mas contornando o orifício de memória do BIOS), enquanto as edições mais caras permitirão até 64 GiB de RAM. O mesmo vale para o Vista de 32 bits .
No entanto, nem sempre é essa limitação imposta pelo Windows. Se assim fosse, a inicialização de um kernel Linux habilitado para PAE ainda permitiria o uso de 4 GiB completos (ou mais). Não é assim, alguns fabricantes de hardware optaram por impor essa limitação no nível do BIOS, embora a CPU e o chipset sejam capazes de lidar com o PAE.
Apenas uma observação: nenhum dos atuais processadores de 64 bits baseados em x86 pode endereçar fisicamente todo o intervalo de endereços de 64 bits (para referência, consulte esta pergunta e respostas).
fonte
As CPUs de 8 bits geralmente tinham um barramento de endereços de 16 bits. (A Motorola tinha um barramento de endereços unificado, RAM e E / S periférica compartilhavam o mesmo espaço de endereço, a Intel optou por dividir os dois. No caso da Intel, os limites de endereço de E / S dos 8088 e 8086 transitaram os limites dos 8080 e CPUs 8085.)
O 8088 e o 8086 da Intel tinham um barramento de endereço de memória de 20 bits (1 MB), enquanto o 68000 da Motorola possuía um barramento de endereço de 24 bits (16 MB). IIRC, o [80] 286 pulou para um barramento de endereço de 24 bits. Mais tarde, os dois se expandiram para um barramento de endereço de 32 bits com os [80] 386 e o 68020, respectivamente.) Com os chips Pentium, o barramento de endereço foi expandido para 64 bits. (Eu acho que os chips PowerPC da Motorola / IBM também passaram pelo barramento de endereços de 64 bits.)
A memória disponível abaixo e até o máximo que podia ser acessado diretamente pela CPU era limitada apenas pelos chips de hardware suportados (chipset) e SO. Bill Gates era famoso no passado por afirmar que ninguém precisava de mais de 640K de RAM, portanto o DOS nunca evoluiu para acessar diretamente mais RAM. Com o HiMem.sys e o EMM386, o DOS foi estendido para acessar mais memória "superior", com o EMM386 sendo usado para acessar diretamente toda a RAM disponível. O HiMem.sys tinha menos flexibilidade e podia basicamente usar a RAM extra para armazenamento.
A memória que excede esse limite exigia uma MMU (Unidade de gerenciamento de memória) para dividir a memória em segmentos e mapeá-la no espaço de memória endereçável da CPU. É assim que o CoCo 3, o Commodore 128 e outros computadores de 8 bits podem acessar mais de 64 K de RAM.
Mais favorável agora é usar a memória virtual para estender os limites de memória física passados, embora com os limites impostos pelo sistema operacional.
fonte
Porque não há razão prática para fazê-lo. As extensões de endereço físico permitem a mesma funcionalidade e seu uso ainda é muito limitado entre os usuários. Nos dias do Windows 3.1, havia restrições que simplesmente não estão presentes hoje.
fonte
A falha fundamental aqui é a noção de que a "largura de bit" do processador, que geralmente é do tamanho dos registros de uso geral da máquina, é necessariamente a mesma que a largura dos endereços de RAM.
No x86 com paginação ativada, mas sem o PAE, os endereços que o programa e o código do SO usam são chamados de "endereços lineares" pela Intel - geralmente os chamamos de "endereços virtuais". Eles têm 32 bits de largura. Isso permite um espaço de endereço virtual de 4 GiB.
Mas é mais ou menos coincidência, apenas um artefato do formato das entradas da tabela de páginas, que o tamanho de um endereço físico (RAM) também é de 32 bits.
Com o PAE, o último é de 36 bits (a princípio ... mais amplo em implementações posteriores). Portanto, apenas porque é, por exemplo, uma "máquina de 32 bits", não significa que os endereços de memória física estejam limitados a 32 bits.
O setor possui um longo histórico de máquinas cuja "largura de bit" não corresponde ao tamanho máximo de endereço físico. Por exemplo, a arquitetura VAX define uma máquina de 32 bits e os endereços virtuais (que são os endereços usados pelo código quando a tradução de endereços é ativada) têm 32 bits de largura ... mas os endereços físicos do VAX têm apenas 30 bits de largura - e metade do espaço de endereço físico é dedicado aos registros de dispositivos de E / S; portanto, o máximo de RAM era de apenas 512 MiB.
Mesmo sem o hardware de conversão de endereço, não é necessariamente o caso da "largura de bit" da máquina definir o endereço máximo de RAM. Exemplo: As séries "superior 3000" do CDC eram máquinas de 36 bits. Você acha que eles poderiam endereçar 64 GiB de RAM? Dificilmente! Essas máquinas foram lançadas em meados dos anos 60! Caramba, não podíamos nem ter 64 GB de espaço em disco naqueles dias. (A série CDC 6000 era uma máquina de 60 bits. Preciso continuar?)
fonte