O que são registradores de CPU?

27

Esta pergunta está me incomodando há algum tempo agora e hoje achei que iria pesquisar no Google. Eu li algumas coisas sobre isso e parecia muito semelhante ao que eu sempre soube como cache do processador .

Existe uma diferença entre os dois ou estou certo quando penso que são os mesmos? É realmente necessário um registro para estar dentro de uma CPU para que funcione?

Segundo a Wikipedia, um registro é um local na CPU onde a memória pode ser acessada e modificada rapidamente antes de ser enviada de volta à RAM. Entendi isso errado ou o cache e o registro são realmente iguais?

Jeroen
fonte
13
Um registro de CPU é uma organização que monitora sua CPU para você. A NSA é um exemplo de um registro da CPU.
Jimmy Hoffa
3
O cache de nível 1 da CPU geralmente é feito do mesmo tipo de material de silício que os registros. Não é tão rápido porque precisa de pesquisas extras para associar endereços em cache a locais de cache. Mas registros e cache são definitivamente lugares diferentes nos chips.
Zan Lynx
3
@ JimmyHoffa: Receio que seu comentário seja muito confuso para o OP, em detrimento do conhecimento em ciência da computação.
Rwong 28/08
3
@rwong Nah, entendi, achei muito engraçado. : P
Jeroen
1
E outra diferença é o tamanho: um arquivo de registro raramente é maior que algumas centenas de palavras, enquanto o cache L1 pode facilmente ser tão grande quanto 64k.
SK-logic

Respostas:

61

Eles não são exatamente iguais. Os registradores são os locais em que os valores nos quais a CPU está realmente trabalhando estão localizados. O design da CPU é tal que só é capaz de modificar ou de fato agir sobre um valor quando está em um registro. Portanto, os registradores podem trabalhar com lógica, enquanto a memória (incluindo cache) pode conter apenas valores pelos quais a CPU lê e grava.

Imagine um carpinteiro no trabalho. Ele tem alguns itens em suas mãos (registradores) e, em seguida, bem perto de sua bancada (cache), coisas em que ele está trabalhando frequentemente, mas não está usando neste momento, e depois na oficina (memória principal) coisas que pertencem a o projeto em questão, mas que não são imediatamente importantes o suficiente para estar na bancada de trabalho.

EDIT: Aqui está uma explicação simples de como funciona a lógica de registro.

Vamos imaginar que temos quatro registros chamados R1..R4. Se você compilar uma declaração parecida com esta:

x = y + z * 3;

o compilador produziria código de máquina que (quando desmontado) se parece com isso:

LOAD  R1, ADDRESS_Z //move the value of Z into register 1
MUL   R1, 3         //multiply the value of register 1 by 3
LOAD  R2, ADDRESS_Y //move the value of Y into register 2
ADD   R1, R2        //adds the value in R2 to the value in R1
STORE R1, ADDRESS_X //move the value of register 1 into X

Como a maioria das CPUs modernas possui registros com 32 ou 64 bits de largura, eles podem fazer cálculos em qualquer valor, até o tamanho que podem conter. Eles não precisam de registros especiais para valores menores; eles apenas usam instruções especiais do ASM que dizem para ele usar apenas parte do registro. E, assim como o carpinteiro com apenas duas mãos, os registros podem conter apenas uma pequena quantidade de dados de uma só vez, mas podem ser reutilizados, transmitindo dados ativos dentro e fora deles, o que significa que "muitos registros" não acabam sendo necessários. (Ter muito disponível permite aos compiladores gerar código mais rápido, é claro, mas não é estritamente necessário.)

Mason Wheeler
fonte
26
E mais coisas no armazém em toda a cidade (disco) e outras coisas que ele pode ter Fedex'd na (rede) :-)
Dan Pichelman
2
Depende muito da arquitetura do sistema em questão.
World Engineer
5
@ Binero, em um processador x86 de 16 bits, você tem registros chamados Ax, Bx e assim por diante. Quando eles mudaram para processadores de 32 bits, estenderam os registros para EAx, EBx de 32 bits. Se você acessa o Ax, obtém os baixos 16 bits do EAx. No modo de 64 bits, eles nomearam os registradores RAx, com os 32 bits inferiores sendo EAx e os 16 bits inferiores ainda sendo Ax. confira estes diagramas para ver como você chegar a outras partes de bytes como AH para obter o byte alto do 16 bit Ax registrar: en.wikipedia.org/wiki/X86#Structure
stonemetal
2
E nas CPUs modernas, isso meio que quebra, também, devido aos registros serem mapeamentos temporários para um banco de memória Really Fast, mudando de acordo com o fluxo de instruções e com a proximidade com o fluxo de instruções previsto.
Vatine 29/08/13
2
@MasonWheeler Uma boa escolha de sua parte.
Vatine 29/08/13
3

Na verdade, um registro na terminologia da CPU é pequeno Pedaço de memória nomeado Disponível dentro de um microprocessador (CPU), os registradores têm nomes, tamanhos e funções específicos que variam de processador para processador, por exemplo, se o microprocessador 8085 for um processador de 8 bits, por exemplo, registradores de bits (A: registradores acumuladores, B, C, D, E, H e L e um registro de flag são todos de 8 bits). Dois registradores de 16 bits, PC e SP, todos têm funções especiais e funções aparecem em cena durante a programação da montagem. Poucos registros de controle estão além do programador.

Se você usar outro processador, os registradores variarão, digamos, 8086 é processador de 16 bits e possui AX, BX, CX e DX, todos são registradores de 16 bits, PC, SP e Flag.

como você citou na pergunta, eles devem acelerar a execução do programa e agir como cache do processador, mas agora a arquitetura do processador foi alterada e a Intel adiciona muita memória ao cache do processador.

mas há uma pequena diferença entre o cache do processador (CPU) e os registros do processador (CPU), registros realmente necessários para algumas atividades especiais, como ponteiro de memória, status do programa, etc. Ex: PC: Program Counter, que atua como ponteiro de memória na memória do programa, SP: Ponteiro de pilha que atua como um ponteiro de memória na memória de pilha. e Accumulator é buffer e registro principal para acessar a ALU para operações aritméticas ...

Você pode ver a explicação de Mason Wheeler para exemplos

Mohan PAKALAPATI
fonte
1

Eu acho que ajuda pensar que Registros não são memória e não devem ser pensados ​​como tal.

Pense mais como OO - Register é uma classe, não derivada da Memória, e Memory é uma classe não derivada do registro, mas a classe Register possui métodos (Machine Op Codes) para converter seus dados para e da Memória. Por outro lado, a memória não sabe nada sobre registros e não pode invocar ações neles. Como resultado, todas as operações da CPU são executadas por registradores, que geralmente acessam a memória.

Não é incomum ver registros apenas de gravação - dificilmente um atributo da memória. Também é possível que um valor de registro mude sem escrever nele - novamente, não o comportamento que você espera da memória.

mattnz
fonte
Nas E / S mapeadas na memória, as regiões somente de gravação da "memória" não são incomuns.
SK-logic
@ SK-logic - Correct - no entanto, o contexto da pergunta feita claramente o OP pensa na memória como algo que você lê e escreve. Não há necessidade de confundi-lo mais :)
mattnz
0

A resposta fornecida por @Mason Wheeler foi precisa, mas acho que é possível colocar sua pergunta sob outra perspectiva. A julgar pela sua pergunta, me parece que o conceito de que você precisa para entender perfeitamente a diferença entre um cache e um registro é o caminho dos dados . Como Mason apontou corretamente, a lógica da CPU (ou seja, seu caminho de dados) é projetada de tal maneira que as informações de memória não podem ser tratadas diretamente pela CPU e é por isso que os registros existem. De fato, a CPU nem sequer é capaz de decodificar a instrução atual do programa em execução, se essa instrução não tiver sido carregada primeiro no registro apropriado (geralmente o chamado IR, "Registro de Instruções").

Isso está relacionado à maneira como a CPU é conectada. Não há caminho físico entre a memória e a ULA; todos os dados fornecidos à ALU precisam ser armazenados de alguma forma em algum registro. Pode ser diferente, mas o circuito necessário para conectar a memória à ALU diretamente seria muito complexo: é mais fácil e mais eficiente mediar toda a comunicação entre a memória e a ALU através do arquivo de registro , conforme determinado pelo caminho de dados mencionado anteriormente. . De fato, mesmo quando uma determinada instrução especifica uma posição de memória como um operando (um modo de endereçamento conhecido como endereçamento direto ), a unidade de dados correspondente é carregada em um registro conhecido como MBR (Memory Buffer Register, às vezes chamado MDR, Memory Data Buffer). )

Observe que, do ponto de vista da CPU, não importa realmente se as informações (dados ou código) vêm da memória principal ou do cache, mas a última é muito mais rápida. Os caches existem por razões de desempenho, os registros existem por causa do design da CPU (ou seja, por causa do caminho dos dados). Programadores inteligentes (compiladores inteligentes, na verdade) tentam maximizar o uso de registradores para minimizar os acessos à memória (os registradores são mais rápidos que o cache ou a memória). Isso é justificável porque as informações armazenadas nos registros tendem a ser usadas várias vezes e, de fato, esse é um dos princípios da filosofia RISC.

Humberto Fioravante Ferro
fonte