HTG explica: Como uma CPU realmente funciona?

CPU
Rost / Shutterstock

A maioria das coisas em um computador é relativamente simples de entender: a RAM, o armazenamento, os periféricos e o software funcionam juntos para fazer o computador funcionar. Mas o coração do seu sistema, a CPU, parece mágica até mesmo para muitos técnicos. Aqui, faremos o nosso melhor para decompô-lo.

A maior parte da pesquisa para este artigo vem de “But How Do It Know?” por J. Clark Scott. É uma leitura fantástica, vai em muito mais profundidade do que este artigo, e vale bem a pena o casal de dólares na Amazon.

Uma observação antes de começarmos: CPUs modernas são ordens de magnitude mais complexas do que o que estamos descrevendo aqui. É quase impossível para uma pessoa entender todas as nuances de um chip com mais de um bilhão de transistores. No entanto, os princípios básicos de como tudo se encaixa permanecem os mesmos, e entender os fundamentos lhe dará uma melhor compreensão dos sistemas modernos.

Começando pequeno

Os computadores funcionam em binário . Eles só entendem dois estados: ligado e desligado. Para realizar cálculos em binário, eles usam o que é chamado de transistor. O transistor só permite que a corrente da fonte flua através dele para o dreno se houver corrente na porta. Essencialmente, isso forma uma chave binária, que corta o fio dependendo de um segundo sinal de entrada.

Os computadores modernos usam bilhões de transistores para realizar cálculos, mas nos níveis mais baixos, você só precisa de um punhado para formar os componentes mais básicos, conhecidos como portas.

Portões lógicos

Empilhe alguns transistores corretamente e você terá o que é conhecido como porta lógica. As portas lógicas pegam duas entradas binárias, realizam uma operação nelas e retornam uma saída. A porta OR, por exemplo, retorna verdadeiro se qualquer uma das entradas for verdadeira. A porta AND verifica se ambas as entradas são verdadeiras, XOR verifica se apenas uma das entradas é verdadeira e as N-variantes (NOR, NAND e XNOR) são versões invertidas de suas portas básicas.

Fazendo matemática com portões

Com apenas duas portas, você pode fazer a adição binária básica. O diagrama acima mostra um meio somador, criado usando o  Logicly , um playground online gratuito para portas lógicas. A porta XOR aqui será ligada se apenas uma das entradas estiver ligada, mas não ambas. A porta AND será ativada se ambas as entradas estiverem ativadas, mas permanecerá desativada se não houver entrada. Portanto, se ambos estiverem ligados, o XOR permanece desligado e a porta AND liga, dando a resposta correta de dois:

Recomendado:  Como atribuir itens da lista de verificação no Google Docs

Isso nos dá uma configuração simples com três saídas distintas: zero, um e dois. Mas um bit não pode armazenar nada maior do que 1, e esta máquina não é muito útil, pois só resolve um dos problemas matemáticos mais simples possíveis. Mas este é apenas um meio somador, e se você conectar dois deles com outra entrada, você obterá um somador completo:

O somador completo tem três entradas – os dois números a serem somados e um “transporte”. O transporte é usado quando o número final excede o que pode ser armazenado em um único bit. Somadores completos serão ligados em uma corrente, e o transporte é passado de um somador para o próximo. O carry é adicionado ao resultado da porta XOR no somador da primeira metade, e há uma porta OU extra para lidar com ambos os casos quando o so que precisaria estar ativado.

Quando ambas as entradas estão ativadas, o carry é ativado e o envia para o próximo somador completo na cadeia:

E isso é o mais complexo possível. Mover-se para mais bits significa essencialmente apenas mais somadores completos em uma cadeia mais longa.

A maioria das outras operações matemáticas pode ser feita com adição; a multiplicação é apenas adição repetida, a subtração pode ser feita com alguma inversão extravagante de bits e a divisão é apenas a subtração repetida. E embora todos os computadores modernos tenham soluções baseadas em hardware para acelerar operações mais complicadas, você pode fazer tudo tecnicamente com o somador completo.

O ônibus e a memória

No momento, nosso computador nada mais é do que uma calculadora ruim. Isso ocorre porque ele não consegue se lembrar de nada e não faz nada com suas saídas. Acima está uma célula de memória, que pode fazer tudo isso. Por baixo do capô, ele usa muitas portas NAND, e na vida real pode ser bem diferente dependendo da técnica de armazenamento, mas sua função é a mesma. Você fornece algumas entradas, liga o bit de ‘gravação’ e ele armazenará as entradas dentro da célula. Esta não é apenas uma célula de memória, pois também precisamos de uma maneira de ler as informações dela. Isso é feito com um ativador, que é uma coleção de portas AND para cada bit na memória, todas ligadas a outra entrada, o bit de “leitura”. Os bits de gravação e leitura também são chamados de “definir” e “habilitar”.

Recomendado:  O que há de novo no Chrome 101, já disponível

Todo este pacote está embrulhado no que é conhecido como registro. Esses registradores são conectados ao barramento, que é um feixe de fios que percorre todo o sistema, conectado a todos os componentes. Mesmo os computadores modernos têm um barramento, embora possam ter vários barramentos para melhorar o desempenho multitarefa.

Cada registro ainda tem um bit de escrita e leitura, mas nesta configuração, a entrada e a saída são a mesma coisa. Isso é realmente bom. Por exemplo. Se você quisesse copiar o conteúdo de R1 para R2, ligaria o bit de leitura para R1, que empurraria o conteúdo de R1 para o barramento. Enquanto o bit de leitura estiver ativado, você ativará o bit de gravação para R2, o que copia o conteúdo do barramento para R2.

Os registros também são usados ​​para fazer RAM. A RAM é frequentemente disposta em uma grade, com fios indo em duas direções:

Os decodificadores pegam uma entrada binária e ligam o fio numerado correspondente. Por exemplo, “11” é 3 em binário, o número de 2 bits mais alto, então o decodificador ligaria o fio mais alto. Em cada cruzamento, há um registro. Todos eles são conectados ao barramento central e a uma entrada central de gravação e leitura. As entradas de leitura e gravação só serão ativadas se os dois fios que cruzam o registro também estiverem ativados, permitindo efetivamente que você selecione o registro a partir do qual escrever e ler. Novamente, a RAM moderna é muito mais complicada, mas essa configuração ainda funciona.

O Relógio, o Stepper e o Decodificador

Os registros são usados ​​em qualquer lugar e são a ferramenta básica para mover dados e armazenar informações na CPU. Então, o que lhes diz para mover as coisas?

O relógio é o primeiro componente no núcleo da CPU e liga e desliga em um intervalo definido, medido em hertz ou ciclos por segundo. Esta é a velocidade que você vê anunciada ao lado das CPUs; um chip de 5 GHz pode executar 5 bilhões de ciclos por segundo. A velocidade do clock costuma ser uma boa métrica para determinar a velocidade de uma CPU.

O relógio tem três estados diferentes: o relógio base, o relógio de ativação e o relógio definido. O relógio base ficará ativo por meio ciclo e desativado na outra metade. O relógio de ativação é usado para ativar os registradores e precisará permanecer ativado por mais tempo para garantir que os dados estejam ativados. O relógio definido sempre precisa estar ligado ao mesmo tempo que o relógio de ativação, caso contrário, dados incorretos podem ser gravados.

Recomendado:  Como desativar ou personalizar a correção automática no Mac

O relógio é conectado ao stepper, que contará de um ao passo máximo e se reinicializará para um quando terminar. O relógio também está conectado a portas AND para cada registro em que a CPU pode gravar:

Essas portas AND também são conectadas à saída de outro componente, o decodificador de instrução. O decodificador de instrução pega uma instrução como “SET R2 TO R1” e a decodifica em algo que a CPU possa entender. Ele tem seu próprio registro interno, denominado “Registro de Instrução”, onde a operação atual é armazenada. Como exatamente isso acontece, depende do sistema em que você está executando, mas uma vez que for decodificado, ele ligará o conjunto correto e habilitará os bits para os registros corretos, que serão acionados de acordo com o relógio.

As instruções do programa são armazenadas na RAM (ou cache L1 em ​​sistemas modernos, mais perto da CPU). Uma vez que os dados do programa são armazenados em registradores, assim como todas as outras variáveis, eles podem ser manipulados em tempo real para navegar pelo programa. É assim que os programas obtêm sua estrutura, com loops e instruções if. Uma instrução de salto define o local atual na memória de onde o decodificador de instrução está lendo para um local diferente.

Como tudo se junta

Agora, nossa simplificação grosseira de como uma CPU funciona está completa. O barramento principal abrange todo o sistema e se conecta a todos os registros. Os somadores completos, junto com um monte de outras operações, são compactados na Unidade Lógica Aritmética, ou ALU. Esta ALU terá conexões com o barramento e também terá seus próprios registros para armazenar o segundo número em que está operando.

Para realizar um cálculo, os dados do programa são carregados da RAM do sistema para a seção de controle. A seção de controle lê dois números da RAM, carrega o primeiro no registrador de instruções da ALU e, em seguida, carrega o segundo no barramento. Enquanto isso, ele envia à ALU um código de instrução dizendo o que fazer. A ALU então realiza todos os cálculos e armazena o resultado em um registro diferente, de onde a CPU pode ler e então continuar o processo.

Crédito da imagem: Rost9 / Shutterstock