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?
terminology
memory
cpu
register
Jeroen
fonte
fonte
Respostas:
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:
o compilador produziria código de máquina que (quando desmontado) se parece com isso:
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.)
fonte
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
fonte
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.
fonte
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.
fonte