Qual é o tamanho da palavra de uma RAM em uma máquina de 32/64 bits (processador)

Qual é o tamanho da palavra de uma RAM em uma máquina de 32/64 bits (processador)

Qual é o tamanho da palavra de uma RAM em uma máquina (processador) de 32/64 bits?

Essa pergunta está me deixando louco. Qual é exatamente o tamanho da palavra que salva os dados na própria RAM em máquinas de 64 bits como microprocessadores Intel Core i5?

Além disso, o tamanho da palavra que contém os dados muda de 32 bits para 64 bits?

Responder1

Tradicionalmente, uma "palavra" em arquiteturas de computadores era geralmente a menor unidade endereçável de memória. E tradicionalmente este tem sido o mesmo tamanho do registro de uso geral da máquina.

No entanto, desde que o endereçamento de bytes se tornou popular, o conceito tornou-se diluído. (Provavelmente podemos dar crédito ao IBM System/360 e ao PDP-11 no lado do minicomputador por isso.)

Em termos de endereçamento de memória definido pela arquitetura da CPU - ou seja, como os programadores veem a máquina - o conceito de "palavra" não existe em x86/x64, a menos que você pense nele como sinônimo de bytes. Cada byte de memória tem seu próprio endereço, e o endereço de um byte também é o endereço de qualquer região maior que comece naquele byte (estendendo-se para endereços com números mais altos). É claro que podemos mover um, dois, quatro ou (em x64) oito bytes por vez entre o registrador e a RAM - ou muito mais, memória para memória, com as instruções REP - mas o endereço que afirmamos ainda é o de um byte. Podemos fazer aritmética com palavras de todos esses tamanhos. (E outros.)

Se você pensar em termos de registradores, normalmente se assume que o “tamanho da palavra” de uma máquina é o mesmo de seus registradores de uso geral. Isso seria 32 bits em x86, 64 bits em x64. Na maioria das arquiteturas, o tamanho do GPR é o tamanho do maior número inteiro no qual a CPU pode realizar aritmética simples com uma única instrução.

Agora vamos introduzir mais confusão...!

Em termos de plataforma (placa-mãe, módulos e chips de RAM, etc.), em todas as máquinas que usam CPUs e chipsets "commodities" Intel e AMD, a RAM é endereçada em pedaços de 64 bits - suponho que você possa chamá-los de palavras. Você podia ver isso claramente em processadores anteriores que tinham pinos separados para endereço e dados: O pino de endereço menos significativo é chamado A3, não A0! Os bits de endereço físico A0, A1 e A2 nunca saem do processador. Mas os programadores nunca veem esses endereços.

E por último, existe o conceito de “linha de cache”. Uma linha de cache é um pedaço fisicamente contíguo de RAM que ocupa uma entrada no cache L1/L2/L3. As linhas de cache no mundo Intel/AMD já têm 64 bytes de largura há algum tempo. Então, quando você acessa um endereço de memória que não está atualmente em seu cache, a CPU buscaoitodesses pedaços de 8 bytes de RAM. Em outras palavras, os endereços armazenados no cache omitem os seis bits de ordem inferior. Então talvez uma palavrano esconderijoé realmente 64 bytes ou 512 bits! (Mas o acesso à memória que ignora o cache ainda pode ler ou gravar apenas 8 bytes por vez; em intervalos de endereços físicos que são decodificados por dispositivos de E/S mapeados na memória, bytes individuais podem ser endereçáveis; isso depende do barramento. E, claro, claro que não podemos fazer aritmética em números inteiros de 512 bits.)

Em ambientes de programação derivados do Microsoft C, uma "palavra" tem 16 bits - tem sido assim desde muito antes da Microsoft, e o nome e a definição do tipo de dados foram transportados para os ambientes de 32 e 64 bits para compatibilidade. Uma "palavra dupla" (ou DWORD ou LONG, para "palavra longa", termo comum no VAX) tem 32 bits. Inteiros de 64 bits são chamados de "quadwords" na arquitetura, mas geralmente têm nomes mais específicos em C, como UINT64 (inteiro de 64 bits, sem sinal).

Portanto, depende de onde você está no sistema e do que está vendo. Normalmente não pensamos em "tamanho da palavra" hoje em dia, mas sim em "tamanho GPR".

Responder2

Não estou familiarizado com os detalhes sangrentos de como a RAM funciona com CPUs Intel atualmente, devido a coisas mais recentes, como coerência de cache e NUMA, mas do ponto de vista da RAM, acredito que ainda sejam bytes de 8 bits, embora a RAM agora seja comumente organizada em canais onde vários slots podem ser acessados ​​ao mesmo tempo. Portanto, capturar 4 bytes (assumindo 4 slots) por vez levará o mesmo tempo que capturar 1 byte nesse sistema. Ainda assim, a RAM aceita um endereço do controlador de memória como entrada e devolve 8 bits como saída AFAIK.

O tamanho da "palavra" pode significar coisas diferentes. Lembro-me de ter encontrado esse termo pela primeira vez estudando a linguagem assembly 68000 - no texto que estava lendo, "byte" significava 8 bits e "palavra" significava 16 bits, e "alinhado por palavra" significava um endereço caindo em um limite de 16 bits. Eu sei que o termo "palavra" estava em uso antes da introdução do 68000 (1980?) E pode ter sido sinônimo de "byte" em épocas anteriores.

Os dados "nativos" com os quais a CPU "prefere" lidar correspondem ao "bitness" de sua arquitetura e ao modo em que está sendo executado. Uma CPU de 32 bits (ou CPU de 64 bits que não está no "modo longo") tem 32 registros de bits, um monte de instruções para carregar valores da RAM (4 bytes) nesses registros e outras coisas. Mas com a Intel, um registro de 32 bits como o EAX também pode ser endereçado como dois registros AH (os 16 bits superiores do EAX) e AL (os 16 bits inferiores) e há inúmeras instruções MOV que carregam coisas da RAM para o EAX, AH, AL, e daí de volta para RAM. Estou com preguiça de olhar o guia de referência do programador Intel no momento, mas acho que há instruções para carregar bytes únicos nos 8 bits superiores ou inferiores de AH ou AL. (Eu sei que o MIPS tem instruções como essa). Mas acho que há mais instruções que funcionam com todos os 32 bits, e se você quiser trabalhar com menos bits, você prejudica a eficiência porque primeiro precisa mover as coisas para registros temporários e tal.

Portanto, na Intel e na maioria das outras CPUs de uso geral fabricadas desde a era dos 16 bits, você é realmente flexível na maneira como aborda a memória. No entanto, as instruções são provavelmente mais otimizadas para funcionar no "bitness" da arquitetura.

informação relacionada