Limites de memória em sistemas de 16, 32 e 64 bits

17

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?

Matthew Layton
fonte

Respostas:

15

Eles fazem, o sistema é chamado Extensão de Endereço Físico (PAE) . Aqui está uma lista dos SOs do Windows e sua memória máxima, qualquer sistema de 32 bits que permita mais de 4 GB de RAM está usando o PAE para acessar a memória (por exemplo, o Windows 2003 R2 Datacenter de 32 bits permite 128 GB de RAM).


De fato, o Windows 8 requer uma CPU compatível com PAE nos requisitos mínimos .


Para responder à sua pergunta "não solicitada", sobre por que o seu sistema operacional de 32 bits não pode acessar a ram se ela existe: Licenciamento. Eles optam por não permitir que a RAM seja superior a 4 GB para seus sistemas operacionais de 32 bits, a menos que você pague por uma edição de data center (é por isso que eles vendem uma edição de data center, se você precisar de muita memória RAM, provavelmente poderá gastar mais dinheiro em um sistema operacional).

Scott Chamberlain
fonte
Ah, eu já ouvi falar do PAE antes, mas nunca o investiguei. Parece ser largamente utilizado na arquitetura de servidor, por isso não parece aplicar-se a uma instalação de 32 bits do Windows 7, como da lista especifica que W7x86 só permite até 4GB
Matthew Layton
1
@ 0xC0000022L para ser justo, adicionei a parte da licença como uma edição após o seu comentário, mas devido à janela de edição de 4 min, parece que eu a publiquei antes de ele postar o comentário.
22413 Scott Chamberlain
1
O PAE exige que o switcheroo da tabela de páginas funcione, e isso é caro em termos de desempenho.
vonbrand
3
Isso é um mito. A sobrecarga devido ao PAE é pequena. E se você não gosta do PAE, deve odiar x64, porque a estrutura da tabela de páginas no x64 se parece com o PAE, apenas com mais um nível de tabela adicionado na parte superior e mais bits para PFNs nos PxE.
Jamie Hanrahan
1
PAE não foi "removida no Windows 7 porque não é mais necessário", ele ainda está presente no Windows 7 x86 - é apenas lá por padrão, em vez de ter que ser optioned no.
Jamie Hanrahan
13

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).

0xC0000022L
fonte
Hmm, por que tenho a impressão de que Linus realmente odeia HIGHMEM.SYS e PAE? : P
Karan
2
Entendo que o PAE seria um incômodo para qualquer código que necessitasse de mais de duas apresentações de conjunto de trabalho e para o código no nível do sistema que precisa gerenciar várias tarefas de 2 ou mais apresentações cada, mas a menos que um único aplicativo precise de mais de 2 shows, eu esperaria que o PAE fosse transparente. Além disso, eu acho que o PAE também seria melhor do que o uso global de ponteiros de 64 bits nos casos que precisassem de 3 GB de RAM de uso geral, além de um grande cache de disco ou unidade de armazenamento temporário.
Supercat
Os comentários de Linus são estranhos. Não há relação entre o funcionamento do himem.sys e o funcionamento do PAE. É muito divertido ver pessoas argumentando a favor de x64 e contra o endereçamento PAE ... quando o modo longo x64 simplesmente adota o esquema PAE e adiciona mais um nível de tabela de páginas!
21813 Jamie Hanrahan
@JamieHanrahan: ... pelo menos dois em sistemas mais recentes (devido à virtualização), o que abre algumas possibilidades interessantes. Suas comparações (Linus) não estão completamente corretas, mas se for um conceito estranho, as metáforas podem ajudar :) ... Acho que foi por isso que ele escolheu isso para defender seu ponto de vista.
0xC0000022L
2

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.

William
fonte
1

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.

OCDtech
fonte
1
Isso realmente não tem informações suficientes para fazer backup de suas declarações. Windows 3.1 é um sistema operacional de 16 bits. É preciso lembrar que, em 1992, 2 MB de memória ultrapassavam os US $ 300.
Ramhound 22/02
Você é um comentário de 22 de fevereiro e a explicação de Scott Chamberlin cobre praticamente o que eu estava dirigindo. Eles deixam descrições de por que a paginação segmentada extensível foi usada no DOS / Win16, mas não no Windows posterior. Não incluí isso, porque não contribuiria diretamente para responder à pergunta do OP.
OCDtech
É minha opinião que as respostas devem permanecer sozinhas. Seu comentário adiciona informações suficientes para resolver meus problemas com sua resposta.
Ramhound
1
@OCDtech: O modelo segmentado 8086 permitiria que uma linguagem orientada a objetos usasse referências de objetos de 2 bytes para identificar objetos alinhados nos limites de 16 bytes, mas as linguagens não estavam bem equipadas para usar segmentos com eficiência. O modelo 80286 impõe uma sobrecarga monstruosamente maior a esses programas e a maneira como ele foi estendido no 80386 tornaria um esquema de segmento por objeto totalmente inútil.
Supercat
0

Os limites teóricos de memória em máquinas de 16, 32 e 64 bits são os seguintes ...

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?)

Jamie Hanrahan
fonte
E não se esqueça de sistemas que não usam 8 bits por célula de RAM. (EG: 16/16 = 128K máx., 32/32 = 16G máx., 32/64 = 32G máx.)
SkyCharger