Como os computadores funcionam? [fechadas]

59

É uma pergunta quase embaraçosa ... Sou formado em Ciência da Computação (e um segundo em andamento). Trabalhei como desenvolvedor .NET em tempo integral por quase cinco anos. Eu geralmente pareço competente no que faço.

Mas eu não sei como os computadores funcionam!

Por favor, fique comigo por um segundo. Um rápido Google de 'How a Computer Works' produzirá muitos e muitos resultados, mas lutei para encontrar um que realmente respondesse ao que estou procurando. Sei que essa é uma pergunta enorme, realmente muito boa, se você puder me dar algumas palavras-chave ou alguma direção.

Eu sei que existem componentes .... a fonte de alimentação, a placa-mãe, ram, CPU, etc ... e eu recebo a 'idéia geral' do que eles fazem. Mas eu realmente não entendo como você parte de uma linha de código como Console.Readline()no .NET (ou Java ou C ++) e faz com que ela realmente faça coisas.

Claro, estou vagamente ciente do MSIL (no caso do .NET) e que alguma mágica acontece com o compilador JIT e ele se transforma em código nativo (eu acho). Disseram-me que Java é semelhante e C ++ corta o passo do meio.

Eu fiz uma montagem de mainframe, já faz alguns anos. Lembro-me de que havia algumas instruções e alguns registradores da CPU, e escrevi o código .... e então alguma mágica aconteceu ... e meu programa funcionaria (ou travaria). Pelo que entendi, um 'Emulador' simularia o que acontece quando você chama uma instrução e atualiza os registros da CPU; mas o que faz essas instruções funcionarem da maneira que funcionam?

Isso se torna uma questão de eletrônica e não uma questão de 'computador'? Estou supondo que não há nenhuma razão prática para eu entender isso, mas sinto que deveria ser capaz.

(Sim, é isso que acontece quando você passa o dia com uma criança pequena. Demora cerca de 10 minutos e cinco iterações para perguntar 'Por quê?' Para você perceber o quanto não sabe).

Rob P.
fonte
20
Eu recomendo Código por Charles Petzold
Não é um Emulator. É um monte de circuitos semicondutores reais com centenas (milhares) de fios de entrada e saída e bilhões de portas lógicas. O Emulatorfoi usado apenas para fins instrucionais.
Rwong 5/06
11
Eu acho que o título deve ser alterado para ser mais específico / informativo. Essa é realmente uma pergunta muito útil, mas à primeira vista parece totalmente ridícula, como o que a criança pequena originalmente perguntou. Altere para algo como "como os comandos de software de alto nível se conectam às respostas de hardware de baixo nível?"
jhocking
2
Olá Rob, como está escrito no momento, isso é irremediavelmente amplo e rapidamente se transformou em uma pergunta sobre recomendação de livros e uma discussão prolongada: os quais não queremos aqui. Se você pode apertar o seu foco e perguntar algo específico sobre um problema que você está atualmente enfrentando, não hesite em perguntar sobre isso.

Respostas:

139

Iniciarei do nível mais baixo que possa ser relevante (posso começar de um nível ainda mais baixo, mas provavelmente são irrelevantes), iniciando de Atom, Eletricidade, Transistores, Logic Gates, Circuitos Integrados (Chip / CPU) ) e termina na Assembléia (presumo que você esteja familiarizado com os níveis mais altos).

No início

Átomo

O átomo é uma estrutura composta de elétrons, prótons e nêutrons (que são compostos de partículas elementares ). A parte mais interessante do átomo para computadores e eletrônicos são os elétrons porque os elétrons são móveis (isto é, podem se mover com relativa facilidade, ao contrário de prótons e nêutrons que são mais difíceis de se mover) e podem flutuar livremente sem serem mantidos dentro um átomo.

Normalmente, cada átomo tem um número igual de prótons e elétrons, que chamamos de estado "neutro". Por acaso, é possível que um átomo perca ou obtenha elétrons extras. Dizem que átomos nesse estado desequilibrado são átomos de "carga positiva" (mais prótons do que elétrons) e átomos de "carga negativa" (mais elétrons que próton), respectivamente.

Os elétrons são inconstrutíveis e indestrutíveis (não na mecânica quântica, mas isso é irrelevante para o nosso propósito); Portanto, se um átomo perde um elétron, outro átomo próximo precisa receber os elétrons extras ou o elétron precisa liberar-se em um elétron flutuante livre, por outro lado, como o elétron é inconstrutível, para ganhar elétrons extras, um átomo precisa absorvê-lo de átomos próximos ou de um elétron flutuante livre. A mecânica dos elétrons é tal que, se houver um átomo carregado negativamente próximo a um átomo carregado positivamente, alguns elétrons migrarão até que ambos os átomos tenham a mesma carga.

Eletricidade

A eletricidade é apenas um fluxo de elétrons de uma área com número muito alto de átomos com carga negativa para uma área com número muito alto de átomos com carga positiva. Certas reações químicas podem criar uma situação em que temos um nó com muitos átomos com carga negativa (chamado "ânodo") e outro nó com muitos átomos com carga positiva (chamado "cátodo"). Se conectarmos dois nós com carga oposta a um fio, massas de elétrons fluirão do ânodo para o cátodo, e esse fluxo é o que chamamos de "corrente elétrica".

Nem todos os fios podem transmitir elétrons de maneira igualmente fácil, os elétrons fluem muito facilmente em materiais "condutores" do que em materiais "resistentes". Um material "condutor" possui baixa resistência elétrica (por exemplo, fios de cobre nos cabos) e um material "resistente" possui alta resistência elétrica (por exemplo, isolamento do cabo de borracha). Alguns materiais interessantes são chamados de semicondutores (por exemplo, silicons), porque podem alterar sua resistência facilmente, sob certas condições um semicondutor pode atuar como condutor e, em outras condições, pode se transformar em um resistor.

A eletricidade sempre prefere fluir através do material com menor resistência; portanto, se um cátodo e um ânodo estiverem conectados com dois fios, um com resistência muito alta e outro com resistência muito baixa, a maioria dos elétrons fluirá através do cabo de baixa resistência e quase nenhum flui através do material de alta resistência.

A Idade Média

Switches e transistores

Interruptores / flip-flops são como os interruptores de luz comuns; um interruptor pode ser colocado entre dois pedaços de fio para cortar e / ou restaurar o fluxo de eletricidade. Os transistores funcionam exatamente da mesma maneira que um interruptor de luz, exceto que, em vez de conectar e desconectar fisicamente os fios, um transistor conecta / desconecta o fluxo de eletricidade, alterando sua resistência, dependendo da existência de eletricidade no nó base e, como você já deve ter adivinhado Sei que transistores são feitos de semicondutores porque podemos alterar o semicondutor para se tornar um resistor ou um condutor para conectar ou desconectar correntes elétricas.

Um tipo comum de transistor, o transistor de junção bipolar NPN (BJT), possui três nós: "base", "coletor" e "emissor". Em um NPN BJT, a eletricidade pode fluir do nó "emissor" para o nó "coletor" somente quando o nó "base" é carregado. Quando o nó base não é carregado, praticamente nenhum elétron pode fluir através dele e, quando o nó base é carregado, os elétrons podem fluir entre o emissor e o coletor.

O comportamento de um transistor

(Eu sugiro que você leia isso antes de continuar, pois ele pode explicar melhor do que eu com gráficos interativos)

Digamos que temos um transistor conectado a uma fonte elétrica em sua base e coletor e, em seguida, conectamos um cabo de saída próximo ao coletor (veja a Figura 3 em http://www.spsu.edu/cs/faculty/bbrown/web_lectures / transistores / ).

Quando aplicamos eletricidade a nenhuma base ou coletor, nenhuma eletricidade pode fluir, uma vez que não há eletricidade para falar:

B   C  |  E   O
0   0  |  0   0

Quando aplicamos eletricidade ao coletor, mas não à base, a eletricidade não pode fluir para o emissor, pois a base se torna um material de alta resistência; portanto, a eletricidade escapa para o fio de saída:

B   C  |  E   O
0   1  |  0   1

Quando aplicamos eletricidade à base, mas não ao coletor, também não há eletricidade que possa fluir, pois não há diferença de carga entre o coletor e o emissor:

B   C  |  E   O
1   0  |  0   0

Quando aplicamos eletricidade à base e ao coletor, obtemos eletricidade fluindo através do transistor, mas como o transistor agora possui menor resistência que o fio de saída, quase nenhuma eletricidade flui através do fio de saída:

B   C  |  E   O
1   1  |  1   O

Portões lógicos

Quando conectamos o emissor de um transistor (E1) ao coletor de outro transistor (C2) e, em seguida, conectamos uma saída próxima à base do primeiro transistor (O) (veja a Figura 4 em http://www.spsu.edu / cs / faculdade / bbrown / web_lectures / transistors / ), então algo interessante acontece. Digamos também que sempre aplicamos eletricidade ao coletor do primeiro transistor (C1) e, portanto, brincamos apenas com os nós de base dos transistores (B1, B2):

B1   B2   C1   E1/C2  |  E2   O
----------------------+----------
0    0    1    0      |  0    1
0    1    1    0      |  0    1
1    0    1    0      |  0    1
1    1    1    1      |  1    0

Vamos resumir a tabela para ver apenas B1, B2 e O:

B1   B2  |  O
---------+-----
0    0   |  1
0    1   |  1
1    0   |  1
1    1   |  0

Eis que , se você estiver familiarizado com a Boolean Logic e / ou Logic Gates, observe que esse é precisamente o portão NAND. E se você estiver familiarizado com a lógica booleana e / ou portas lógicas, também deve saber que um NAND (assim como o NOR) está funcionalmente completo , ou seja, usando apenas o NAND, é possível construir todos os outros portões lógicos e o resto da verdade tabelas. Em outras palavras, você pode projetar um chip de computador inteiro usando apenas portas NAND.

De fato, a maioria das CPUs é (ou costumava ser?) Projetada usando NAND apenas uma vez que é mais barato fabricar do que usar uma combinação de NAND, NOR, AND, OR etc.

Derivando os outros operadores booleanos do NAND

Eu não descreveria como criar todos os operadores booleanos, apenas o NOT e o gate AND, você pode encontrar o resto em outro lugar.

Dado um operador NAND, podemos construir uma porta NOT:

Given one input B
O = NAND(B, B)
Output O

Dado um operador NAND e NOT, podemos construir um portão AND:

Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O

Podemos construir outros portões lógicos de maneira semelhante. Como a porta NAND é funcionalmente completa , também é possível construir portas lógicas com mais de 2 entradas e mais de 1 saída, não discutirei como construir essas portas lógicas aqui.

Idade do Iluminismo

Construindo uma máquina de Turing a partir de portas booleanas

Uma CPU é apenas uma versão mais complicada de uma máquina de Turing. Os registradores da CPU são o estado interno da máquina de Turing e a RAM é uma fita da máquina de Turing.

Uma máquina de Turing (CPU) pode fazer três coisas:

  • ler um 0 ou 1 da fita (ler uma célula da memória da RAM)
  • alterar seu estado interno (alterar seus registros)
  • mover para a esquerda ou direita (leia várias posições da RAM)
  • escreva 0 ou 1 na fita (escreva para uma célula da memória na RAM)

Para nosso propósito, estamos construindo a Máquina de Turing de dois estados e três símbolos da Wolfram usando lógica combinatória (as CPUs modernas usariam microcódigo, mas são mais complexas do que o necessário para o nosso propósito).

A tabela de estados da Máquina de Turing da Wolfram (2,3) é a seguinte:

    A       B
0   P1,R,B  P2,L,A
1   P2,L,A  P2,R,B
2   P1,L,A  P0,R,A

Queremos reencodificar a tabela de estados acima como uma tabela de verdade:

Let I1,I2 be the input from the tape reader (0 = (0,0), 1 = (0,1), 2 = (1,0))
Let O1,O2 be the tape writer (symbol encoding same as I1,I2)
Let M be connected to the machine's motor (0 = move left, 1 = move right)
Let R be the machine's internal state (A = 0, B = 1)
(R(t) is the machine's internal state at timestep t, R(t+1) at timestep t+1)
(Note that we used two input and two outputs since this is a 3-symbol Turing machine.)

      R  0          1
I1,I2
(0,0)    (0,1),1,1  (1,0),0,0
(0,1)    (1,0),0,0  (1,0),1,1
(1,0)    (0,1),0,0  (0,0),1,0

The truth table for the state table above:

I1  I2  R(t) | O1  O2  M   R(t+1)
-------------+--------------------
0   0   0    | 0   1   1   1
0   0   1    | 1   0   0   0
0   1   0    | 1   0   0   0
0   1   1    | 1   0   1   1
1   0   0    | 0   1   0   0
1   0   1    | 0   0   1   0

Eu realmente não vou construir uma porta lógica (não sei como desenhá-la no SE e provavelmente será enorme), mas como sabemos que a porta NAND está funcionalmente completa , temos uma maneira para encontrar uma série de portas NAND que implementarão essa tabela de verdade.

Uma propriedade importante da Turing Machine é que é possível emular um computador de programa armazenado usando uma máquina de Turing que possui apenas uma tabela de estados fixos. Portanto, qualquer Universal Turing Machine pode ler seu programa a partir da fita (RAM), em vez de ter que ter suas instruções codificadas na tabela de estado interna. Em outras palavras, nossa (2,3) Máquina de Turing pode ler suas instruções dos pinos I1, I2 (como software), em vez de ser codificada na implementação da porta lógica (como hardware).

Microcódigos

Devido à crescente complexidade das CPUs modernas, torna-se proibitivamente difícil usar a lógica combinatória sozinha para projetar uma CPU inteira. A CPU moderna é geralmente projetada como um intérprete de instruções de microcódigos; um microcódigo é um pequeno programa incorporado à CPU que é usado pela CPU para interpretar o código real da máquina. Esse próprio interpretador de microcódigo geralmente é projetado usando lógica combinatória.

Registro, cache e RAM

Esquecemos algo acima. Como nos lembramos de algo? Como implementamos a fita e a RAM? A resposta está em um componente eletrônico chamado Capacitor. Um capacitor é como uma bateria recarregável; se um capacitor estiver carregado, ele reterá elétrons extras e também poderá retornar elétrons ao circuito.

Para gravar em um capacitor, enchemos o capacitor com elétron (escreva 1) ou drenamos todos os elétrons no capacitor até que ele fique vazio (escreva 0). Para ler o valor de um capacitor, tentamos descarregá-lo. Se, quando tentamos descarregar, não há eletricidade fluindo, o capacitor está vazio (leia 0), mas se detectarmos eletricidade, o capacitor deve ser carregado (ler 1). Você pode notar que a leitura de um capacitor drena sua reserva de elétrons; as RAMs modernas têm o circuito para recarregar periodicamente o capacitor, para que possam reter sua memória enquanto houver eletricidade.

Existem vários tipos de capacitores usados ​​em uma CPU, os registros da CPU e os caches de CPU de nível mais alto são feitos usando "capacitores" de alta velocidade, que são realmente construídos a partir de transistores (portanto, quase não há "atraso" para ler / gravar a partir de eles), eles são chamados de RAM estática (SRAM); enquanto a memória principal RAM é feita usando menos energia, mas capacitores mais lentos e muito mais baratos, eles são chamados de RAM dinâmica (DRAM).

Relógio

Um componente muito importante de uma CPU é o relógio. Um relógio é um componente que "marca" regularmente para sincronizar o processamento. Um relógio normalmente contém um quartzo ou outros materiais com um período de oscilação conhecido e relativamente constante, e o circuito do relógio mantém e mede essa oscilação para manter seu senso de tempo.

As operações da CPU são realizadas entre os ticks do relógio e a leitura / gravação é feita nos ticks para garantir que todos os componentes se movam de forma síncrona e não pisem entre si enquanto estiverem em estados intermediários. Em nossa (2,3) Máquina de Turing, entre os tiques do relógio, a eletricidade passa pelos portões lógicos para calcular a saída da entrada (I1, I2, R (t)); e, no relógio, o gravador grava O1, O2 na fita, o motor se move dependendo do valor de M e o registro interno é gravado a partir do valor de R (t + 1), depois o leitor de fita lerá a fita atual e carregará I1, I2 e o registro interno será relido novamente para R (t).

Conversando com Periféricos

Observe como a (2,3) Turing Machine faz interface com seu motor. Essa é uma visão muito simplificada de como uma CPU pode interagir com um hardware arbitrário. O hardware arbitrário pode ouvir ou gravar em um fio específico para entradas / saídas. No caso da Máquina de Turing (2,3), sua interface com o motor é apenas um único fio que instrui o motor a girar no sentido horário ou anti-horário.

O que não foi dito nesta máquina é que o Motor precisava de outro "relógio" que funcionasse em sincronia com o "relógio" interno da Máquina para saber quando iniciar e parar de funcionar, portanto, este é um exemplo de transmissão de dados síncrona . A outra alternativa comumente usada, a transmissão assíncrona usa outro fio, chamado linha de interrupção, para comunicar pontos de sincronização entre a CPU e o dispositivo assíncrono.

Idade digital

Código da máquina e montagem

A linguagem assembly é um mnemônico legível por humanos para códigos de máquina. No caso mais simples, há um mapeamento individual entre o código de montagem e a máquina; embora em linguagens assembly modernas, algumas instruções possam ser mapeadas para vários opcodes.

Linguagem de programação

Todos nós estamos familiarizados com isso, não estamos?


Ufa, finalmente terminei, digitei tudo isso em apenas 4 horas, por isso tenho certeza de que há um erro em algum lugar (sou principalmente um programador, não engenheiro elétrico nem físico, então pode haver várias coisas que são flagrantemente erradas). Por favor, se você encontrou um erro, não hesite em dar um @yell ou consertar você mesmo se tiver o representante ou criar uma resposta complementar.

Lie Ryan
fonte
37
" impressionante " não faz justiça. Essa resposta é positivamente heróica .
Njd 05/06
11
A parte dos átomos não está incorreta? Geralmente eles irão ionizam para formar átomos com carga, em vez de ficar neutro, a fim de ter uma subcamada externa completa.
alternativa
3
+1, +1000 se eu pudesse. O que é realmente surpreendente para mim, e por que eu amo esse campo, é que a grande quantidade de informações nesta resposta nem sequer começa a arranhar a superfície da incrível profundidade da tecnologia que faz um PC moderno funcionar.
Quentin-starin
Caralho. Fantástico. Eu gostaria de poder fazer mais do que votar uma vez.
Rob P.
3
+1, embora eu deva notar que o hardware moderno não é exatamente feito via portas NAND. Existem portões, sim, mas eles são realmente bastante complexos e apenas (geralmente) aproximam a lógica NAND; as restrições são praticamente físicas. Os portões físicos são primeiramente montados em módulos lógicos, que poderiam ser um NAND clássico, mas geralmente são um pouco mais (por exemplo, flip-flop ou half-somador). O conjunto exato de portas permitido depende do estilo lógico usado e das restrições da fábrica de fabricação; nem todo fab pode construir tudo. (! Aaargh Estou começando a se lembrar de detalhes Help!!)
Donal Fellows
12

De Nand para Tetris em 12 passos

Eu acho que isso será absolutamente perfeito para você:

De Nands a Tetris em 12 etapas

Noite escura
fonte
obrigado pelo link, assistindo agora. Existe um índice central dessas conversas ou você acabou de vê-la em algum blog?
jhocking
Eu não tenho certeza, neste particular surgiu como eu estava navegando um dia
Darknight
Ele perdeu o 13º passo - bolachas de silicone.
obrigado por publicá-lo! Este é basicamente o resumo do currículo do curso que o autor das palestras nas palestras em vídeo da IDC em Israel, e é baseado em seu livro - eu publiquei um link para o livro em minha resposta.
Littleadv
Este site é o mesmo material? Porque parece que é muito melhor organizado do que apenas um grande vídeo nand2tetris.org
jhocking
10

Se você fez a montagem, realmente existem apenas duas ou três camadas para entender:

  • Portas lógicas , que é como a lógica é implementada via elétrons em movimento - aqui ela se torna uma questão eletrônica
  • Design de CPU e sistema, que é como os portões lógicos são compostos para formar uma CPU e conectados à RAM e periféricos. As CPUs modernas são extremamente complexas, mas para o seu desejo de entender como as coisas funcionam basicamente, deve ser suficiente olhar para uma CPU simples clássica como a Z80 .
  • Microcódigo , que é como as instruções de montagem são interpretadas e transformadas em ações no nível de hardware de registradores e circuitos lógicos.

O último (Microcódigo) foi o que o fez "clicar" para mim, porque preencheu a lacuna entre a eletrônica e o código.

Michael Borgwardt
fonte
Talvez esteja faltando um microcódigo. Tomei aulas em portas lógicas e design de CPU / sistema, programadas em assembly e aprendi tudo sobre comandos binários (e me saí bem em todas essas classes), mas ainda não consegui dizer como diabos tudo se encaixa. Vou ter que pesquisar microcódigo.
Casey Patton
@ Casey: é bem possível que isso seja realmente o que você está perdendo. Para mim, aprender sobre (e escrever alguns) microcódigos foi exatamente onde eu pensei: OK, agora eu entendo como os computadores funcionam. Claro, eles se tornaram tão complexos que você ainda pode facilmente encontrar situações que parecem impossíveis de entender, mas estou convencido de que qualquer situação pode ser entendida se você for competente, persistente e investir tempo suficiente.
Michael Borgwardt
7

Exemplo de um programa de graduação em CS que explica exatamente o que você perguntou pode ser encontrado aqui (IDC.AC.IL curso CS101) . É baseado neste livro da MIT Press: " Os elementos dos sistemas de computação: construindo um computador moderno a partir dos primeiros princípios ".

littleadv
fonte
11
+1 por mencionar "Os elementos dos sistemas de computação". É um ótimo livro e deve responder com precisão à pergunta "Como os computadores funcionam?".
Cedric
você se importaria de explicar mais sobre o que esses recursos fazem e por que os recomenda como resposta à pergunta? "Respostas apenas de link" não são bem-vindas no Stack Exchange
gnat
7

Para responder completamente a essa pergunta, seria necessário um livro inteiro. Felizmente, alguém já escreveu esse livro. É chamado Código: A Linguagem Oculta de Hardware e Software de Computador, por Charles Petzold. É uma leitura altamente informativa e muito divertida.

Bill the Lizard
fonte
11
+1, apenas Ctrl-F para "Petzold" traz a resposta que eu tinha certeza que estava lá;)
mlvljr
4

Eu recomendo o código de Charles Petzold. O livro é uma lição de história e uma visão geral técnica de como construir um computador. Começando com a explicação de simples comutadores telegráficos, o livro demonstra como os transistores funcionam, depois para portas lógicas, computadores programáveis ​​e coisas mais complexas. Também é muito bem escrito e provavelmente poderia ser compreendido por qualquer pessoa com curiosidade suficiente.

Doug T.
fonte
3

Vai ser muito difícil (e longo!) Listar tudo o que você precisa saber para obter uma compreensão suficiente do que você precisa saber. Um livro famoso que realmente responde a todas essas perguntas é de Andrew Tanenbaum: Structured Computer Organization .

Na verdade, este livro leva você do computador físico de sua mesa até portas lógicas e álgebra booleana, e mostra um exemplo de arquitetura para guiá-lo através de como tudo realmente acontece nesse sistema.

(Uma observação: é muito caro, pois possui ~ 800 páginas. Provavelmente é bom apenas obter uma versão em segunda mão ou uma edição mais antiga. Os conceitos não mudaram.)

Deckard
fonte
2

Bem, é preciso muitas bolas para dizer isso e perguntar, eu acho.

Praticamente o código é reduzido ainda mais e mais para um código de nível inferior mais complicado. Até o código de nível de montagem com registros push e move ... etc ...

Em seguida, o hardware pega esse código e age sobre ele. Na maioria das vezes, o hardware realmente tem suas próprias instruções sobre como fazer as coisas. Portanto, pode haver uma instrução simples, como um PUSH, em que um registro (local da memória) obtém um valor como 1 ou 2 ou o que for.

Definitivamente é uma questão de computador. E também uma programação. Alguns programadores programam o hardware que pega seu código e faz com que ele faça algo, embora em um nível muito baixo. Também é uma questão de eletrônica.

Ross
fonte
1

Existem dispositivos.

Depois, há drivers de dispositivo que interagem com esses dispositivos. Peça escrita em C, peça em montagem normalmente.

O sistema operacional interage com o software de aplicativo em uma extremidade e os drivers de dispositivo na outra para se comunicar com o hardware real.

Se você está realmente interessado, por que não fazer um hack do kernel Linux para saber mais?

Fanatic23
fonte
Obrigado pela sua resposta e sugestão. Parece uma ótima ideia!
Rob P.
1

No centro das coisas, esta é uma questão de eletrônica, embora o básico disso deva ter sido coberto no curso de pesquisa para qualquer diploma de CS. Todo o hardware atua com base nas portas programadas no nível do componente. Estas são as operações lógicas mais básicas: NOT, AND, OR, XOR, NAND, NOR. Cada porta tem uma função específica:

A porta NOT pega um valor de entrada e produz um valor de saída, obtém 0 ou 1 e gera o oposto.

O portão AND recebe dois valores de entrada e produz um valor de saída, obtém qualquer combinação de 0 e 1 e gera 0 para qualquer combinação, exceto dois, para os quais gera 1.

O portão OR funciona como o portão AND, mas produz 1 para cada combinação de 0 e 1, exceto dois zeros, para os quais gera um 0.

A porta XOR é novamente semelhante às portas AND e OR, mas produzirá um 0 quando as duas entradas forem iguais e um 1 quando as duas entradas forem diferentes.

A porta NAND é o oposto lógico da porta AND e a porta NOR é o oposto lógico da porta OR.

Em outras palavras, no nível do hardware, tudo se resume às expressões lógicas binárias mais básicas. Tudo o resto é apenas uma transição de um nível mais alto de programação para um nível mais baixo até atingir essa última camada.

MaQleod
fonte
+1 O próximo nível é como fazer um comportamento seqüencial com esses portais lógicos. O componente principal é o flip-flop . Monte portas lógicas para formar uma ALU, alguns flip-flop para registros, um relógio e você obterá uma CPU.
Mouviciel
@mouviciel Você esqueceu os multiplexadores.
starblue
1

Embora eu ache surpreendente que alguém possa concluir um curso em CS sem entender o hardware, suponho que seja inteiramente possível que um curso possa se concentrar apenas na teoria como um ramo da matemática, e não nos detalhes de engenharia e implementação. As veneráveis palestras do SICP (apresentadas na década de 1980) pareciam ser assim.

No meu curso de CS, há duas décadas, uma edição anterior de Computers: from Logic to Architecture era leitura obrigatória no primeiro ano.
Algo assim deve preencher as lacunas.

Como alternativa, o Open Courseware do MIT deve ter algo que ajude.

njd
fonte