Em um livro, li o seguinte:
Os processadores de 32 bits têm 2 ^ 32 endereços possíveis, enquanto os processadores atuais de 64 bits têm um espaço de endereço de 48 bits
Minha expectativa era que, se for um processador de 64 bits, o espaço de endereço também deveria ser 2 ^ 64.
Então, eu queria saber qual é o motivo dessa limitação?
The 32-bit processors have 2^32 possible addresses
não é necessariamente verdade, pode existir uma CPU de 32 bits com apenas 24 "pinos" para endereçar a memória. Por exemplo, 68EC020 (versão 68020 mais barata) é uma CPU de 32 bits, mas com 24 bits para endereçamento de memória.Respostas:
Porque isso é tudo o que é necessário. 48 bits fornecem um espaço de endereço de 256 terabytes. Isso é muito. Você não verá um sistema que precisa de mais do que isso tão cedo.
Portanto, os fabricantes de CPU escolheram um atalho. Eles usam um conjunto de instruções que permite um espaço de endereço completo de 64 bits, mas as CPUs atuais usam apenas os 48 bits inferiores. A alternativa era desperdiçar transistores ao lidar com um espaço de endereço maior, que não seria necessário por muitos anos.
Portanto, quando chegarmos perto do limite de 48 bits, é apenas uma questão de liberar CPUs que controlam o espaço de endereço completo, mas não exigirá nenhuma alteração no conjunto de instruções e não quebrará a compatibilidade.
fonte
Qualquer resposta referente ao tamanho do barramento e memória física está um pouco equivocada, já que a pergunta do OP era sobre o espaço de endereço virtual e não o espaço de endereço físico . Por exemplo, o limite supostamente análogo em alguns 386's era um limite na memória física que eles podiam usar, não o espaço de endereço virtual, que sempre era de 32 bits completos. Em princípio, você poderia usar 64 bits completos de espaço de endereço virtual, mesmo com apenas alguns MB de memória física; é claro que você pode fazer isso trocando ou para tarefas especializadas onde deseja mapear a mesma página na maioria dos endereços (por exemplo, certas operações de dados esparsos).
Acho que a verdadeira resposta é que a AMD estava sendo barata e esperava que ninguém se importasse agora, mas não tenho referências para citar.
fonte
__far
(ou pior ainda,FAR
/far
!) Ponteiros ...Leia a seção de limitações do artigo da wikipedia :
Ou seja, não faz sentido implementar o endereçamento de 64 bits completo neste ponto, porque não podemos construir um sistema que poderia utilizar esse espaço de endereço por completo - então escolhemos algo que seja prático para os sistemas de hoje (e de amanhã).
fonte
A largura de registro / operação nativa interna não precisa ser refletida na largura do barramento de endereço externo.
Digamos que você tenha um processador de 64 bits que só precisa acessar 1 megabyte de RAM. Um barramento de endereço de 20 bits é tudo o que é necessário. Por que se preocupar com o custo e a complexidade do hardware de todos os pinos extras que você não usará?
O Motorola 68000 era assim; 32 bits internamente, mas com um barramento de endereço de 23 bits (e um barramento de dados de 16 bits). A CPU podia acessar 16 megabytes de RAM e, para carregar o tipo de dados nativo (32 bits), precisava de dois acessos à memória (cada um contendo 16 bits de dados).
fonte
Há uma razão mais grave do que apenas salvar transistores no caminho de endereço da CPU: se você aumentar o tamanho do espaço de endereço, você precisa aumentar o tamanho da página, aumentar o tamanho das tabelas de página ou ter uma estrutura de tabela de página mais profunda (que é mais níveis de tabelas de tradução). Todas essas coisas aumentam o custo de uma falha de TLB, o que prejudica o desempenho.
fonte
Do meu ponto de vista, este é o resultado do tamanho da página. Cada página contém no máximo 4096/8 = 512 entradas da tabela de páginas. E 2 ^ 9 = 512. Portanto, 9 * 4 + 12 = 48.
fonte
Para responder à pergunta original: Não houve necessidade de adicionar mais de 48 bits de PA.
Os servidores precisam da quantidade máxima de memória, então vamos tentar ir mais fundo.
1) A maior configuração de servidor (comumente usada) é um sistema de 8 soquetes. Um sistema 8S nada mais é do que 8 CPUs de servidor conectados por uma interconexão coerente de alta velocidade (ou simplesmente, um "barramento" de alta velocidade) para formar um único nó. Existem clusters maiores lá fora, mas eles são poucos e distantes entre si, estamos falando de configurações comumente usadas aqui. Observe que nos usos do mundo real, o sistema 2 Socket é um dos servidores mais comumente usados e o 8S é normalmente considerado de ponta.
2) Os principais tipos de memória usados pelos servidores são memória DRAM regular endereçável por byte (por exemplo, memória DDR3 / DDR4), memória IO mapeada - MMIO (como memória usada por uma placa adicional), bem como espaço de configuração usado para configurar os dispositivos que estão presentes no sistema. O primeiro tipo de memória é aquele que normalmente é o maior (e, portanto, precisa do maior número de bits de endereço). Alguns servidores de ponta também usam uma grande quantidade de MMIO, dependendo da configuração real do sistema.
3) Suponha que cada CPU do servidor possa hospedar 16 DIMMs DDR4 em cada slot. Com um tamanho máximo DDR4 DIMM de 256 GB. (Dependendo da versão do servidor, este número de DIMMs possíveis por soquete é na verdade menor que 16 DIMMs, mas continue lendo para o exemplo).
Portanto, cada soquete pode teoricamente ter 16 * 256 GB = 4096 GB = 4 TB. Para nosso sistema 8S de exemplo, o tamanho da DRAM pode ser no máximo 4 * 8 = 32 TB. Isso significa que o número máximo de bits necessários para endereçar este espaço DRAM é 45 (= log2 32 TB / log2 2).
Não entraremos em detalhes sobre os outros tipos de memória (MMIO, MMCFG etc), mas o ponto aqui é que o tipo de memória mais "exigente" para um sistema de 8 soquetes com os maiores tipos de DDR4 DIMMs disponíveis hoje (256 GB DIMMs) usam apenas 45 bits.
Para um sistema operacional que suporta 48 bits (WS16 por exemplo), existem (48-45 =) 3 bits restantes. O que significa que se usarmos os 45 bits inferiores apenas para 32 TB de DRAM, ainda teremos 2 ^ 3 vezes de memória endereçável que pode ser usada para MMIO / MMCFG para um total de 256 TB de espaço endereçável.
Portanto, para resumir: 1) 48 bits de endereço físico são muitos bits para suportar os maiores sistemas de hoje que estão "totalmente carregados" com grandes quantidades de DDR4 e também muitos outros dispositivos IO que exigem espaço de MMIO. 256 TB para ser exato.
Observe que este espaço de endereço de 256 TB (= 48 bits de endereço físico) NÃO inclui nenhuma unidade de disco como unidades SATA porque NÃO fazem parte do mapa de endereço, eles incluem apenas a memória endereçável por byte e é exposta ao sistema operacional.
2) O hardware da CPU pode optar por implementar 46, 48 ou> 48 bits dependendo da geração do servidor. Mas outro fator importante é quantos bits o sistema operacional reconhece. Hoje, o WS16 oferece suporte a endereços físicos de 48 bits (= 256 TB).
O que isso significa para o usuário é que, mesmo tendo uma CPU de servidor grande e ultramoderna que pode suportar> 48 bits de endereçamento, se você executar um sistema operacional que suporta apenas 48 bits de PA, então você só pode tirar proveito de 256 TB .
3) Em suma, existem dois fatores principais para tirar vantagem de um número maior de bits de endereço (= mais capacidade de memória).
a) Quantos bits seu HW de CPU suporta? (Isso pode ser determinado pela instrução CPUID em CPUs Intel).
b) Qual versão do sistema operacional você está executando e quantos bits de PA ele reconhece / suporta.
O mínimo de (a, b) determinará, em última instância, a quantidade de espaço endereçável da qual seu sistema pode aproveitar.
Escrevi esta resposta sem examinar as outras respostas em detalhes. Além disso, não mergulhei em detalhes nas nuances do MMIO, MMCFG e em toda a construção do mapa de endereços. Mas espero que isso ajude.
Obrigado, Anand K Enamandram, arquiteto de plataforma de servidor Intel Corporation
fonte
Muitas pessoas têm esse conceito errado. Mas estou prometendo a você que, se você ler isso com atenção, depois de ler todos os seus equívocos ficará claro.
Dizer que um processador de 32 ou 64 bits não significa que ele deve ter um barramento de endereço de 32 bits ou um barramento de endereço de 64 bits, respectivamente! ... Repito, NÃO!
Processador de 32 bits significa que tem ALU (Unidade Aritmética e Lógica) de 32 bits ... isso significa que pode operar em operando binário de 32 bits (ou simplesmente dizendo um número binário com 32 dígitos) e similarmente processador de 64 bits pode operar em binários de 64 bits operando. Portanto, o tempo de um processador de 32 ou 64 bits NÃO significa que a quantidade máxima de memória pode ser instalada. Eles apenas mostram o quão grande o operando pode ser ... (por analogia você pode pensar em uma calculadora de 10 dígitos pode calcular resultados de até 10 dígitos ... ela não pode nos dar 11 dígitos ou qualquer outro resultado maior ... embora seja em decimal, mas estou dizendo esta analogia para simplificar) ... mas o que você está dizendo é o espaço de endereço que é o tamanho máximo da memória diretamente interfaciável (RAM). O carneiro' O tamanho máximo possível é determinado pelo tamanho do barramento de endereços e não é o tamanho do barramento de dados ou mesmo da ALU em que o tamanho do processador é definido (32/64 bits). Sim, se um processador tiver "barramento de endereço" de 32 bits, ele será capaz de endereçar 2 ^ 32 bytes = 4 GB de RAM (ou para 64 bits será 2 ^ 64) ... mas dizendo que um processador de 32 ou 64 bits tem nada relevante para este espaço de endereço (espaço de endereço = até que ponto ele pode acessar a memória ou o tamanho máximo da RAM) e depende apenas do tamanho de sua ALU. Claro que o barramento de dados e o barramento de endereços podem ter o mesmo tamanho e então pode parecer que o processador de 32 bits significa que ele acessará 2 ^ 32 bytes ou 4 GB de memória ... mas é apenas uma coincidência e não será o mesmo para todos.... por exemplo, intel 8086 é um processador de 16 bits (já que tem ALU de 16 bits), então, como você disse, deveria ter acessado 2 ^ 16 bytes = 64 KB de memória, mas não é verdade. Ele pode acessar até 1 MB de memória por ter um barramento de endereço de 20 bits .... Você pode google se tiver alguma dúvida :)
Acho que deixei meu ponto claro. Agora voltando à sua pergunta ... como processador de 64 bits não significa que ele deve ter barramento de endereço de 64 bits, então não há nada de errado em ter um barramento de endereço de 48 bits em um processador de 64 bits ... eles mantiveram o espaço de endereço menor para tornar o design e fabricação baratos .... já que ninguém vai usar uma memória tão grande (2 ^ 64 bytes) ... onde 2 ^ 48 bytes é mais que suficiente hoje em dia.
fonte
Não é verdade que apenas 48 bits de baixa ordem de um VA de 64 bits são usados, pelo menos com Intel 64. Os 16 bits superiores são usados, mais ou menos.
A seção 3.3.7.1 Endereçamento canônico no Manual do desenvolvedor de software das arquiteturas Intel® 64 e IA-32 diz:
Portanto, os bits 47 a 63 formam um superbit, todo 1 ou zero. Se um endereço não estiver na forma canônica, a implementação deve falhar.
Em AArch64, isso é diferente. De acordo com a Visão geral do conjunto de instruções ARMv8 , é um VA de 49 bits.
fonte
[vsyscall]
página. (Isso pode ser exportar coisas como o PID atual para quegetpid()
seja puramente espaço do usuário. Tambémgettimeofday()
pode apenas usar o rdtsc no espaço do usuário + fatores de escala exportados pelo kernel. Embora parte disso seja, eu acho[vdso]
, que está perto do topo do metade inferior.)__VMALLOC_BASE
faz. Presumivelmente, não é usado diretamente.Uma CPU é considerada "N-bits" principalmente por seu tamanho de barramento de dados e por grande parte de suas entidades (arquitetura interna) : Registradores, Acumuladores, Unidade Aritmética-Lógica (ALU), Conjunto de Instruções, etc. Por exemplo: O bom e velho CPU Motorola 6800 (ou Intel 8050) é um CPU de 8 bits. Possui um barramento de dados de 8 bits, arquitetura interna de 8 bits e um barramento de endereço de 16 bits.
fonte