Como funciona um computador?

40

Sou nerd de computador há muitos e muitos anos. Eu posso programar em várias línguas e até construí-las. Outro dia, sentei-me com um amigo e perguntei como um computador realmente leva eletricidade e faz alguma coisa com ele, e simplesmente não conseguimos descobrir, e o Google também não ajudou muito.

Quero dizer, como um computador pega um fluxo constante de eletricidade e o transforma em zeros e zeros e depois faz algo com esses zeros e zeros, como acender a luz por 15 segundos?

Entendo portões (AND, OR, NOR, NAND, NOT) e um pouco sobre diodos , resistores e transistores , mas achei que esse seria o lugar perfeito para explicar em termos de verdadeiros leigos!

Alguém pode me apontar na direção certa ou me dar uma breve explicação?

cristão
fonte
8
Você também pode perguntar "como as bactérias funcionam?". Esta é uma pergunta incrivelmente ampla. Sugiro que você analise uma arquitetura simples de processador (por exemplo, MIPS ; aprendemos essa em sala de aula) e trabalhe para baixo e para cima a partir daí. As perguntas que você enfrenta ao longo do caminho provavelmente são muito mais adequadas para o Stack Exchange do que esta.
Raphael
3
Eu sei como as bactérias trabalho, seu computador eu não entendo lol
Christian
14
Elfos. Pequenos duendes mágicos.
JeffE 02/09/12
11
A melhor maneira de aprender como um computador realmente funciona no nível mais baixo é projetar um microcontrolador simplista em um fpga ou manualmente a partir dos portões Nand. Eu fiz isso em uma aula de "Arquiteturas de Computadores" e foi realmente uma grande surpresa. Não é difícil de fazer se você mantiver tudo no mínimo e projetar um controlador de 4 bits com adição, manipulação de bits e um salto condicional. Ou ainda mais simples, um hardware implementando uma máquina Turing simplificada. Hum, essa projeção me deu uma idéia: aprenda como funciona uma máquina de Turing. Isso lhe dará uma boa visão.
vsz

Respostas:

47

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 :

MIPS estágio único
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.


  1. 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.
  2. 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.
  3. 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.
Rafael
fonte
Uau! Isso merece um aplauso. Essa foi uma ótima leitura. Obrigado por compartilhar. Eu certamente aprendi alguma coisa. Embora, depois de ler isso, eu acho que o que eu quero saber seja mais os fundamentos da engenharia elétrica em termos de como ela controla fisicamente a eletricidade. Vou postar a mesma pergunta nesse grupo um pouco mais tarde hoje. Obrigado!
Christian
11
Ocorreu-me que eu provavelmente deveria ter incluído a "conversa com a peça da máquina". Isso significa que o design de um idioma com o qual os humanos podem trabalhar com eficiência e a tradução (com um compilador) para o conjunto de instruções que você especificou. Esses são os tópicos principais da ciência da computação, enquanto o material na minha resposta é principalmente a engenharia da computação .
Raphael
Imagino que não seja uma resposta rápida. Um dia pagarei a algum engenheiro de computação que construa modelos de placas-mãe ou telefones celulares, exatamente como os fundamentos funcionam. Ou seja, como um computador realmente calcula ou acende uma luz por 5 segundos e depois apaga. Eu imagino que tenha muito a ver com interruptores e capacitores.
Christian
@ Christian Se você quiser economizar, considere comprar uma caixa de experimentos de EE (como as para crianças), que inclui transistores. Mudar as luzes ou construir um pequeno somador geralmente está incluído, a muito tempo. (Mais uma vez, os Engenharia Elétrica pessoas provavelmente sabe mais.)
Raphael
25

A imagem completa é bastante complicada. Existem muitas camadas construídas umas sobre as outras que implementam coletivamente abstrações de alto nível sobre tensões elétricas. Não há uma explicação simples de como tudo é organizado, especialmente considerando que o hardware e o software do computador evoluíram drasticamente nos últimos cinquenta anos.

Se você estiver interessado em ver como tudo é organizado, consulte The Elements of Computing Systems , um livro que começa com NAND gates e constrói progressivamente uma implementação funcional do Tetris em cima de um compilador e sistema operacional que você também constrói. Cada parte do computador é construída sobre a anterior, o que pode ajudá-lo a ver como tudo funciona.

templatetypedef
fonte
Isso soa como um ponto de partida perfeito. Vai começar por aí. Muito obrigado :)
Christian
2
Também recomendo a leitura de CODE de Charles Petzold.
ybakos
7

O podcast Segurança Agora! fez uma série de como os computadores funcionam, começando com os princípios básicos.

  • 233 - Vamos projetar um computador (parte 1)
  • 235 - Linguagem de Máquina
  • 237 - Indirecionamento: o poder dos ponteiros (não faz parte tecnicamente da série)
  • 239 - Pilhas, registros e recursão
  • 241 - Interrupções de hardware
  • 247 - O inverso “multi”
  • 250 - Sistemas operacionais
  • 252 - Negócio RISCY
  • 254 - O que faremos pela velocidade

As lacunas nos números devem-se ao fato de todos os outros episódios serem de feedback do ouvinte, portanto, você também pode assistir a esses episódios. Também entre 241 e 247, eles fizeram alguns episódios sobre SSL, devido às notícias de última hora sobre países que obrigavam a CA a dar raízes a eles.

Também EP. 248 é o "Portable Dog Killer", que não mata cães, mas uma arma sônica que Steve fez sozinho quando criança para ajudar a ensinar um cão vizinho a não correr até a linha da cerca e tentar atacar pessoas na calçada .

Scott Chamberlain
fonte
interessante! Obrigado por compartilhar. Vou dar uma olhada.
Christian
4

Um computador trabalha manipulando gradientes de energia (que depois interpretamos como 1 e 0) de maneira consistente e definida . É a consistência que define um computador, enquanto é a definição que separa os diferentes processadores.

Além disso, aprenda sobre como apenas duas portas lógicas (OR e AND) são blocos de construção suficientes para construir qualquer computador de uso geral. Veja também Danny Hillis e o computador Tinkertoy.


fonte
Essa foi uma leitura intersting sobre o Tinkertoy, especialmente o fato de que ele sempre ganha (! Science20.com/brain_candyfeed_your_mind/... )
Christian
No entanto, embora me dê uma boa visão de como um computador 'pensa', ou seja, fornecendo a ele todas as combinações e mecanismos para encontrar a próxima resposta dada a anterior, ele não responde à minha pergunta original de como realmente construir um computador. Suponha que eu esteja indo para a minha loja de ferragens elétricas local (que tem tudo) para comprar os bits básicos (transitores, resistores, capacitores, portas, etc.) e configurá-los para que eu tenha um computador extremamente básico, o que eu precisaria? Afinal, o primeiro computador era do tamanho de um armazém com bits e fios, portanto deve ser possível!
Christian
@ Christian: haha, tudo bem, construa alguns portões lógicos básicos (E / OU / NÃO) alguns chinelos para armazenamento básico de memória e você poderá adicionar dois números de 4 bits.
Eu tenho alguns chinelos! Dois pares de fato.
Christian
3

Um computador é um grande sistema lógico síncrono , o que significa que

  • 0/1
  • Ele opera com um relógio (muito rápido), para que todos os sinais sejam amostrados em momentos discretos para garantir coerência.

0/1

Possui circuitos especializados para reter informações enquanto o computador estiver ligado (RAM, em grandes quantidades). Possui circuitos especializados para executar aritmética binária (na verdade, os bits são manipulados em grupos - geralmente em múltiplos de 8 - que representam coletivamente um número inteiro). E possui recursos de roteamento especializados baseados em endereços de memória, que nada mais são que números inteiros.

Por último, mas não menos importante, um computador moderno possui um programa também armazenado na RAM, que é uma lista de instruções codificadas como números inteiros, executadas sequencialmente, geralmente buscando dados da memória, realizando alguma aritmética e enviando os resultados de volta à memória.

No seu cenário, pode-se pensar em uma implementação em que o tempo decorrido seja armazenado em algum lugar da RAM e o programa instrua a

  • buscar o valor do tempo decorrido,
  • incrementá-lo com um somador,
  • compare-o com um atraso predefinido com um comparador,
  • retornar ao endereço inicial do programa em caso de desigualdade (ou seja, "loops"),
  • caso contrário, defina um sinal especializado que vá para um comutador externo e não para a RAM.

Observe que hoje em dia todos esses elementos alcançam um alto grau de sofisticação e cada frase desta breve visão geral merece vários livros de explicações.

Yves Daoust
fonte
-1

Existem várias maneiras de executar uma função de atraso ou converter os dados binários em dados decimais ou intensidade do sinal. Quando você insere o valor "15", o computador exibe uma imagem de bitmap do número 15 na tela. Este é realmente o valor binário, no momento o código binário do seu teclado também é enviado para a CPU. Ele analisará os dados e depois transformará o código na unidade de processamento ALU (unidade lógica aritmética) para convertê-lo em um pulso para um chip DAC. O sinal analógico agora está controlando a frequência (a frequência de khz a hz) de um circuito de flip-flop. Agora, a saída de frequência será direcionada para a RAM e a CPU leu a RAM para corresponder se os dados forem "1111". Então são 4 segundos.

Lan ...
fonte
Não tenho certeza de como isso responde à pergunta.
Yuval Filmus 14/09
você pode ver que ele perguntou como o computador piscava por 15 segundos, e eu explico como o computador cria o segundo valor para usar em loop.
Lan ...