Essa é uma pergunta ampla que não tem uma resposta fácil; está muito longe de elétrons deslizando pelos fios de cobre até a renderização de um site no Firefox. Tentarei fornecer uma visão geral de baixo para cima e apontar as coisas certas para procurar.
Números de codificação
01
Observe que também existem várias maneiras de codificar números em binário. Depois de montar seu primeiro processador, você percebe vantagens de fazer as coisas de determinadas maneiras. Exemplos populares são os carros alegóricos de dois complementos e IEEE . Para iniciantes, restrinja-se a números naturais simples.
Portões
Suponha que usamos codificação binária. Pense em como você aprendeu a adicionar na escola primária e escreva o mesmo para números binários. Como se vê, os blocos de construção da álgebra booleana já estão lá para você; é fácil construir um somador básico (e outras funções aritméticas) usando portas lógicas .
Como construir esses portões está fora do escopo da ciência da computação; a engenharia elétrica forneceu várias soluções usando, por exemplo, tubos ou transistores . Vá para o Electrical Engineering Stack Exchange para perguntas sobre isso.
Relógio e Estado
Nem todos os portões são igualmente rápidos e nem todas as partes de um cálculo têm o mesmo número de portões. Portanto, temos que tomar cuidado extra para que as operações individuais não se superem. Provou-se útil usar um relógio global ; o resultado de uma determinada rede de portas é o estado dos fios de saída no final do ciclo (que pode mudar muito enquanto os portões se conectam em cascata em direção a seus estados finais individuais).
Isso significa que os resultados de um ciclo podem ter que ser armazenados até o próximo ciclo, por exemplo, se você conectar os loops. Há vários elementos básicos que você pode usar para efeitos variados, todos construídos a partir de portas; alguns são chamados de chinelos . Eles também são usados para criar registros , elementos que armazenam números para quantos ciclos de relógio forem necessários.
Arquitetura e comandos
Agora você tem uma infinidade de opções de design a fazer. Quais operações aritméticas seu processador fornece? Como são seus comandos? Pode ser educativo olhar para a arquitetura MIPS, cujas formas iniciais são fáceis em comparação com outros designs. Veja os planos :
Original de http://ube.ege.edu.tr/~erciyes/CENG311
Essencialmente, é buscar e desmontar comandos, um conjunto de registros, uma ALU e controle. Os comandos codificam qual operação da ALU executar em quais operandos (pelo número do registro em que são mantidos), como manipular o contador do programa² ou qual registro para carregar / armazenar da / na memória³.
Considerações adicionais
Até agora você tem um processador em funcionamento no sentido moderno, supondo que tenha descoberto como construir uma memória e uma maneira de alimentar os comandos. No caminho para uma máquina moderna, muitas escolhas precisam ser feitas. Aqui estão alguns:
Alternativas
O exposto acima é fortemente influenciado pelo resultado da história. Em um mundo diferente, com mentes diferentes, os computadores podem funcionar de maneira diferente. De fato, existem muitos modelos de computação , alguns dos quais têm vantagens que os tornam úteis como abstração para máquinas reais em muitos casos. Também existem tentativas de imitar o funcionamento de nossos cérebros, ou seja, permitir a computação neural ou, de maneira mais geral, explorar estratégias de solução de problemas e armazenamento de informações observadas na natureza , principalmente o DNA e a computação quântica .
Então, talvez (espero?) As informações acima sejam toda a história antiga daqui a 50 ou 100 anos.
- Todas as coisas sofisticadas que fazemos hoje em dia com computadores são divididas em muitas pequenas tarefas aritméticas que o processador executa uma a uma.
- Se o seu modelo permitir que o programa manipule o fluxo de controle, esse seria o endereço de memória do qual o processador obtém a próxima instrução. Você também pode conceber máquinas que apenas leem um conjunto fixo de instruções de, digamos, uma fita. De fato, implementações iniciais fizeram isso. Sem saltos não significava loops; um programa era uma série de instruções completamente desenrolada / desdobrada, dependendo dos dados. Obviamente, poder usar o mesmo programa para vários dados de entrada é mais poderoso.
- Supondo que você tenha memória; seu processador funciona bem sem, mas só pode lidar com tantos valores de uma só vez. Os computadores antigos liam todos os dados das fitas e os mantinham registrados. Não havia memória, muito menos armazenamento gravável e persistente como o conhecemos hoje.