Na arquitetura x86, por que há menos bits para o espaço de endereço virtual do que físico?

10

Eu estava lendo este artigo sobre computação de 64 bits, e ele menciona:

For example, the AMD64 architecture as of 2011 allowed 52 bits for physical memory and 48 bits for virtual memory

Eu pensaria que faria mais sentido permitir mais memória virtual do que a memória física, então por que é realmente o contrário?

Pergunta bônus: O que significa "permitir" 52 ou 48 bits em uma arquitetura de 64 bits? Quais são os outros bits usados?

    
por dougvk 06.10.2013 / 16:50

2 respostas

10

Aqui está uma imagem de uma tabela de páginas AMD64 (do Guia do Programador de Arquitetura AMD, Vol. 2, Rev 3.23, 2013, página 132).

Otamanho"natural" de uma página na arquitetura AMD64 é 2 12 = 4096 bytes. (Existem modos em que você pode ter 2 21 = páginas de 2Mbyte, mas vamos ignorá-las por enquanto.)

Cada entrada de tabela de tabela (PTE) (ou, dependendo do nível chamado PDE, PDPE ou PML4E) é de 64 bits = 2 3 bytes. Portanto, existem 2 9 entradas por página. Então, 4 níveis de tabela de páginas você recebe 4x9 + 12 = 48 bits de endereço virtual por processo. Andar pela tabela de páginas é caro, então elas não se expandirão para 5 ou 6 níveis, a menos que haja demanda do consumidor.

Não sei por que decidiram usar um limite de endereço físico de 52 bits. Isso pode ser estendido até 63 bits no futuro. A preços de outubro de 2013 (cerca de US $ 1 / Gigabit para chips de 4 Gbit) custaria mais de US $ 32.000.000,00 para construir uma memória de 2 bytes, então levará algum tempo até que haja uma demanda significativa para aumentar o limite de endereço físico. Há vários motivos pelos quais você deseja manter os endereços físicos o menor possível: as tags TLB e de cache precisam conter endereços físicos, por exemplo.

Não é necessariamente para trás que há mais memória física do que virtual. A memória virtual é por processo enquanto a memória física é compartilhada por todos os processos. Portanto, um servidor com endereços virtuais de 48 bits e 2 52 bytes de memória poderia suportar 16 processos simultâneos e ainda garantir que não seja necessário trocar.

    
por 07.10.2013 / 14:56
3

Alguns pontos a considerar, a RAM física é cara. Com certeza 16 GB é mais barato agora que 4GB foi apenas alguns anos atrás, mas 2 ^ 64 (16 exabytes) ridiculamente grande.

Assim, as extensões do x86 para x64 da AMD "permitiram" até 2 ^ 52 limitando os registros . Isso faz duas coisas, reduz o custo dos processadores e melhora o desempenho. Mais registros que não são usados significam que há muito espaço vazio que ainda deve ser levado em consideração durante as operações.

E, caso você não seja um cara de matemática ... A diferença entre três tamanhos é enorme! Eu não sou nenhum guru da matemática, mas pelo decimal 52 bit é sobre .02% de 64bit. 48 bit é 6% de 52. (alguém verifica minha matemática?)

Quanto ao motivo pelo qual a AMD permitiu mais RAM física do que virtual, o artigo afirma que é porque a AMD estava pensando em servidores. Os servidores precisam de grandes quantidades de RAM física. A RAM virtual é muito lenta para suportar os aplicativos médios do servidor para centenas ou milhares de funcionários.

Meus próprios pensamentos: deixamos o tempo em que a RAM era pequena e os discos rígidos precisavam suportar a RAM. O preço na RAM caiu a um ponto em que a persona média pode colocar RAM suficiente. Tome aplicações típicas, como o Office, que requer 1-2GB de RAM. Meu computador há 7 anos poderia lidar com isso. Embora com velocidades de leitura e gravação em disco, espero nunca ter recuperado um arquivo de 7 GB da memória virtual (usando a antiga filosofia PM * 2.5).

Eu também posso apenas supor que a AMD queria deixar espaço para registros que usam os registradores RAMs físicos, como RAM em GPUs integradas.

    
por 06.10.2013 / 18:31