Computer Science › Como os Computadores Realmente Funcionam
Os mesmos conectivos ∧, ∨, ¬ já vistos como lógica formal, agora estudados como um sistema algébrico por si só: exatamente a matemática com que todo circuito digital desta disciplina é construído.
As regras algébricas (comutatividade, associatividade, distributividade e as leis de De Morgan) que permitem reescrever uma expressão booleana numa forma diferente, igualmente correta, mas muitas vezes mais barata de construir.
AND, OR, NOT, NAND, NOR e XOR como circuitos físicos: cada um uma realização direta e minúscula, em hardware, de um conectivo booleano, com uma tabela verdade que é ao mesmo tempo sua especificação e seu teste.
Todas as outras portas (AND, OR, NOT, tudo) podem ser construídas só com portas NAND, um fato genuinamente surpreendente que é o motivo inteiro de chips reais serem fabricados com um único bloco de construção repetido.
Ligar portas individuais num circuito maior que calcula uma função booleana mais complexa: a mesma ideia de dividir para conquistar já conhecida, aplicada a hardware em vez de código.
Um multiplexador seleciona uma entre várias entradas para passar adiante, com base num sinal de controle; um decodificador faz o inverso, ativando exatamente uma linha de saída com base numa entrada binária: dois circuitos pequenos e reutilizáveis que aparecem em toda parte numa CPU real.
Um meio somador soma dois bits; um somador completo soma dois bits mais um carry de entrada; encadear somadores completos, um por posição de bit, constrói um somador para números de qualquer largura: aritmética feita inteiramente com portas.
Um único circuito capaz de fazer muitas operações diferentes (somar, subtrair, AND, OR, comparar) sobre duas entradas, com um sinal de controle selecionando qual delas de fato produzir neste ciclo.
Além do resultado principal, uma ULA também informa algumas flags de um bit (zero, negativo, overflow, carry), exatamente os sinais que a lógica de controle de uma CPU lê para decidir se um desvio condicional deve de fato saltar.
Todo circuito até aqui não tinha memória: sua saída dependia só da entrada atual. Um latch, e seu primo sincronizado por clock, o flip-flop, é o menor circuito capaz de guardar um único bit de estado ao longo do tempo.
Um sinal de clock compartilhado que diz a cada flip-flop de um circuito exatamente quando atualizar; sem ele, partes diferentes de um circuito poderiam discordar sobre o estado atual no mesmo instante.
Um grupo de flip-flops, um por bit, com clock comum: um único circuito que guarda uma palavra inteira de estado de uma vez, e a menor unidade de armazenamento que uma CPU de fato lê e escreve diretamente.
Um registrador que guarda o estado atual, mais lógica combinacional que calcula o próximo estado e as saídas: o padrão geral com que todo circuito sequencial com comportamento real, incluindo a própria CPU, é construído.
Um banco pequeno e rápido de registradores, cada um endereçável individualmente e selecionado por um decodificador: o espaço de rascunho da própria CPU, e o ancestral direto em hardware do array já conhecido como estrutura de dados.
Ampliar um banco de registradores para uma matriz de memória muito maior usando uma árvore de decodificadores para selecionar uma linha entre milhões: o circuito real por trás do acesso aleatório O(1) já tomado como certo como a propriedade que define um array.
Uma arquitetura de conjunto de instruções é o vocabulário exato de operações que um processador promete suportar: a fronteira que permite escrever software sem saber como o hardware por baixo de fato implementa qualquer parte disso.
Um conjunto de instruções didático pequeno, real e aberto (um punhado de loads, stores, instruções aritméticas e de desvio), pequeno o bastante para ser totalmente implementado em hardware, e a ISA concreta que a CPU desta disciplina de fato executa.
Como os 32 bits de uma instrução são recortados em um opcode, números de registradores e um valor imediato ou deslocamento, e as diferentes formas de uma instrução indicar onde seus dados de fato estão.
Traduzir uma instrução assembly legível por humanos no padrão exato de bits que uma CPU de fato busca e decodifica: o processo mecânico, um para um, que um montador automatiza.
Ligar o banco de registradores, a ULA e a memória com barramentos e multiplexadores: o caminho físico pelo qual os dados de fato fluem até virar o resultado de uma instrução.
Uma máquina de estados finitos, construída exatamente com as ideias de circuito sequencial já vistas, que lê o opcode de uma instrução e configura cada multiplexador e linha de controle do datapath para fazer aquela instrução específica acontecer.
A cada ciclo, uma CPU busca a próxima instrução, decodifica qual operação ela nomeia, executa-a pelo datapath e atualiza o contador de programa: o mesmo laço de três passos, repetido bilhões de vezes por segundo.
Cada peça construída nesta disciplina (portas, a ULA, registradores, memória, o datapath, a unidade de controle) ligada num único computador de propósito geral que funciona, ainda que simples, capaz de executar programas reais desta ISA.
Uma grade arranjada de modo que células adjacentes diferem em exatamente um bit de entrada: uma técnica visual para enxergar quais termos de uma expressão booleana podem ser fundidos, transformando um circuito grande num genuinamente menor.
O bit como a menor unidade de informação que uma máquina consegue guardar, e binário, octal e hexadecimal como três formas diferentes de escrever exatamente o mesmo padrão de bits subjacente.
Representar números negativos em binário sem um bit de sinal separado: o complemento de dois, o esquema que toda máquina real de fato usa, escolhido justamente porque faz a soma e a subtração usarem exatamente o mesmo circuito.
Representar uma fração em binário usando um sinal, um expoente e uma mantissa: o mesmo padrão que toda máquina real segue, e o motivo exato de 0.1 + 0.2 não aparecer como 0.3.
Part of the Computer Science curriculum.
Os mesmos conectivos ∧, ∨, ¬ já vistos como lógica formal, agora estudados como um sistema algébrico por si só: exatamente a matemática com que todo circuito digital desta disciplina é construído.
As regras algébricas (comutatividade, associatividade, distributividade e as leis de De Morgan) que permitem reescrever uma expressão booleana numa forma diferente, igualmente correta, mas muitas vezes mais barata de construir.
AND, OR, NOT, NAND, NOR e XOR como circuitos físicos: cada um uma realização direta e minúscula, em hardware, de um conectivo booleano, com uma tabela verdade que é ao mesmo tempo sua especificação e seu teste.
Todas as outras portas (AND, OR, NOT, tudo) podem ser construídas só com portas NAND, um fato genuinamente surpreendente que é o motivo inteiro de chips reais serem fabricados com um único bloco de construção repetido.
Ligar portas individuais num circuito maior que calcula uma função booleana mais complexa: a mesma ideia de dividir para conquistar já conhecida, aplicada a hardware em vez de código.
Um multiplexador seleciona uma entre várias entradas para passar adiante, com base num sinal de controle; um decodificador faz o inverso, ativando exatamente uma linha de saída com base numa entrada binária: dois circuitos pequenos e reutilizáveis que aparecem em toda parte numa CPU real.
Um meio somador soma dois bits; um somador completo soma dois bits mais um carry de entrada; encadear somadores completos, um por posição de bit, constrói um somador para números de qualquer largura: aritmética feita inteiramente com portas.
Um único circuito capaz de fazer muitas operações diferentes (somar, subtrair, AND, OR, comparar) sobre duas entradas, com um sinal de controle selecionando qual delas de fato produzir neste ciclo.
Além do resultado principal, uma ULA também informa algumas flags de um bit (zero, negativo, overflow, carry), exatamente os sinais que a lógica de controle de uma CPU lê para decidir se um desvio condicional deve de fato saltar.
Todo circuito até aqui não tinha memória: sua saída dependia só da entrada atual. Um latch, e seu primo sincronizado por clock, o flip-flop, é o menor circuito capaz de guardar um único bit de estado ao longo do tempo.
Um sinal de clock compartilhado que diz a cada flip-flop de um circuito exatamente quando atualizar; sem ele, partes diferentes de um circuito poderiam discordar sobre o estado atual no mesmo instante.
Um grupo de flip-flops, um por bit, com clock comum: um único circuito que guarda uma palavra inteira de estado de uma vez, e a menor unidade de armazenamento que uma CPU de fato lê e escreve diretamente.
Um registrador que guarda o estado atual, mais lógica combinacional que calcula o próximo estado e as saídas: o padrão geral com que todo circuito sequencial com comportamento real, incluindo a própria CPU, é construído.
Um banco pequeno e rápido de registradores, cada um endereçável individualmente e selecionado por um decodificador: o espaço de rascunho da própria CPU, e o ancestral direto em hardware do array já conhecido como estrutura de dados.
Ampliar um banco de registradores para uma matriz de memória muito maior usando uma árvore de decodificadores para selecionar uma linha entre milhões: o circuito real por trás do acesso aleatório O(1) já tomado como certo como a propriedade que define um array.
Uma arquitetura de conjunto de instruções é o vocabulário exato de operações que um processador promete suportar: a fronteira que permite escrever software sem saber como o hardware por baixo de fato implementa qualquer parte disso.
Um conjunto de instruções didático pequeno, real e aberto (um punhado de loads, stores, instruções aritméticas e de desvio), pequeno o bastante para ser totalmente implementado em hardware, e a ISA concreta que a CPU desta disciplina de fato executa.
Como os 32 bits de uma instrução são recortados em um opcode, números de registradores e um valor imediato ou deslocamento, e as diferentes formas de uma instrução indicar onde seus dados de fato estão.
Traduzir uma instrução assembly legível por humanos no padrão exato de bits que uma CPU de fato busca e decodifica: o processo mecânico, um para um, que um montador automatiza.
Ligar o banco de registradores, a ULA e a memória com barramentos e multiplexadores: o caminho físico pelo qual os dados de fato fluem até virar o resultado de uma instrução.
Uma máquina de estados finitos, construída exatamente com as ideias de circuito sequencial já vistas, que lê o opcode de uma instrução e configura cada multiplexador e linha de controle do datapath para fazer aquela instrução específica acontecer.
A cada ciclo, uma CPU busca a próxima instrução, decodifica qual operação ela nomeia, executa-a pelo datapath e atualiza o contador de programa: o mesmo laço de três passos, repetido bilhões de vezes por segundo.
Cada peça construída nesta disciplina (portas, a ULA, registradores, memória, o datapath, a unidade de controle) ligada num único computador de propósito geral que funciona, ainda que simples, capaz de executar programas reais desta ISA.
Uma grade arranjada de modo que células adjacentes diferem em exatamente um bit de entrada: uma técnica visual para enxergar quais termos de uma expressão booleana podem ser fundidos, transformando um circuito grande num genuinamente menor.
O bit como a menor unidade de informação que uma máquina consegue guardar, e binário, octal e hexadecimal como três formas diferentes de escrever exatamente o mesmo padrão de bits subjacente.
Representar números negativos em binário sem um bit de sinal separado: o complemento de dois, o esquema que toda máquina real de fato usa, escolhido justamente porque faz a soma e a subtração usarem exatamente o mesmo circuito.
Representar uma fração em binário usando um sinal, um expoente e uma mantissa: o mesmo padrão que toda máquina real segue, e o motivo exato de 0.1 + 0.2 não aparecer como 0.3.