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


11

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

Por exemplo, a arquitetura AMD64 em 2011 permitia 52 bits para memória física e 48 bits para memória virtual

Eu pensaria que faria mais sentido permitir mais memória virtual do que 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? Para que os outros bits são usados?


Para x86, os bits VA não utilizados devem ser uma extensão de sinal do MSbit do VA. (O ARM AArch64 oferece a opção de permitir que 8 MSbits sejam ignorados pelo hardware, para que possam ser convenientemente usados ​​para tags. O processador Azul Systems Vega - parte de um dispositivo Java - forneceu 16 bits de VA para uso em tags). Na tabela de páginas, os bits PA reservados devem ser zero (principalmente para garantir que o software não tente usá-los e quebre a compatibilidade com o hardware posterior).
Paul A. Clayton

Respostas:


11

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

Tabela de páginas AMD64 Longmode

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

Cada entrada de tabela de página (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. Portanto, quatro níveis de tabela de páginas oferecem 4x9 + 12 = 48 bits de endereço virtual por processo. Andar pela tabela da página é caro, então eles não serão expandidos para 5 ou 6 níveis, a menos que / até que haja demanda do consumidor.

Não sei por que eles decidiram um limite de endereço físico de 52 bits. Isso pode ser estendido até 63 bits no futuro. Nos preços de outubro de 2013 (cerca de 1US $ / Gigabit para chips 4Gbit), custaria mais de 32.000.000,00 US $ para criar uma memória de 2 52 bytes, por isso levará um tempo até que exista uma demanda significativa para aumentar o limite de endereço físico. Existem vários tipos de razões pelas quais você deseja manter os endereços físicos o menor possível: as tags TLB e 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 a não necessidade de troca.


Pode ser interessante notar que os arquitetos de computadores aprenderam a exigir que os bits superiores sejam usados ​​pelo hardware, geralmente por extensão de sinal, para se adequar ao uso comum de endereços negativos para o sistema operacional ("Para que os outros bits são usados?"). Além disso, com o cache de entrada do diretório Ln, uma tabela de 5 níveis não precisa ser totalmente percorrida na maioria das vezes. Os bits PTE 52:62 são reservados para software, portanto, não podem ser usados ​​para endereços físicos sem quebrar a compatibilidade, limitando as páginas 4KiB a 52 bits de PA. Além disso, Linus Torvalds é famoso contra o PAE (VA> PA parece simplificar o design "tradicional" do sistema operacional).
Paul A. Clayton

"Isso pode ser estendido até 63 bits no futuro." Bem, não, não sem alterar a estrutura da tabela de páginas. No momento, os bits 52 a 62 do PxE são reservados para uso do sistema operacional. E os sistemas operacionais estão usando-os (o Windows usa esse campo para um "índice da lista de conjuntos de trabalho"), portanto os arquitetos do processador não estão livres para expandir o campo PFN para eles. Obviamente, seria possível ter uma opção semelhante ao PAE no futuro que mudaria a estrutura do PT para permitir mais bits de PFN, mas isso seria uma mudança arquitetônica significativa.
21714 Jamie Hanrahan #

3

Alguns pontos a considerar, a RAM física é cara. Com certeza, 16 GB são mais baratos agora que os 4 GB eram apenas alguns anos atrás, mas 2 ^ 64 (16 exabytes) ridiculamente grandes.

Portanto, 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 ​​significa 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 matemático ... A diferença entre três tamanhos é enorme! Eu não sou um guru de matemática, mas, por um decimal de 52 bits, é cerca de 0,02% de 64 bits. 48 bits é 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 de servidor comuns 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 tinham que suportar RAM. O preço da RAM caiu a um ponto em que a pessoa média pode colocar mais do que suficiente RAM. Tome aplicativos típicos, como o Office, que requer 1-2 GB de RAM. Meu computador há 7 anos poderia lidar com isso. Embora com velocidades de leitura e gravação em disco, espero nunca ter que recuperar um arquivo de 7 GB da memória virtual (usando a antiga filosofia PM * 2.5).

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.