⚙️ Capítulo 3 — Arquitetura de Computadores: Processamento e Memória¶
Habilidades BNCC trabalhadas neste capítulo
EF02CO05, EF03CO05, EF03CO06, EF03CO07, EF04CO03, EF04CO04, EF04CO05, EF04CO06, EF04CO07, EF05CO05, EF05CO06, EF05CO07, EF05CO08, EM13LGG101 — eixos Mundo Digital e Pensamento Computacional.
No Capítulo 2 vimos como qualquer informação vira uma sequência de números binários. Este capítulo responde a duas perguntas que nascem diretamente dali: uma vez que os dados estão codificados, como o computador de fato os processa — e onde eles moram enquanto isso acontece? A primeira metade do capítulo trata da CPU e do ciclo de instrução; a segunda, da hierarquia de memória que sustenta esse processamento.
1. Arquitetura e organização: duas perspectivas sobre a mesma máquina¶
Vale começar com uma distinção que ajuda a explicar por que computadores continuam ficando mais rápidos sem que os programas precisem ser reescritos.
| Arquitetura | Organização | |
|---|---|---|
| Perspectiva | Lógica — o que o programador enxerga | Física — como o engenheiro implementou |
| O que define | Conjunto de instruções, tipos de dados, modelo de memória | Número de núcleos, tamanho de cache, frequência do clock |
| Estabilidade | Muda raramente (décadas) | Muda com frequência (a cada geração de chip) |
| Exemplo | "O processador tem uma instrução ADD" | "Essa instrução ADD leva 2 ciclos de clock nesse chip específico" |
Um programa escrito para a arquitetura x86-64 continua rodando em processadores lançados décadas depois porque a arquitetura se manteve compatível — mesmo que a organização interna do chip (núcleos, cache, técnicas de aceleração) tenha mudado radicalmente.
Como ensinar isso
Uma boa analogia é comparar prédios com a mesma planta arquitetônica construídos em décadas diferentes, com materiais e técnicas de construção diferentes: a "arquitetura" (a planta, os cômodos, a função de cada espaço) é a mesma, mas a "organização" (os materiais, os métodos construtivos) evoluiu. Isso explica, por exemplo, por que um jogo antigo ainda roda em um computador novo, mas roda muito mais rápido.
2. A ideia revolucionária de von Neumann¶
Os primeiros computadores eletrônicos, como o ENIAC (Capítulo 1), tinham uma limitação séria: o programa era fixado fisicamente em fios e plugues. Trocar de tarefa significava horas de trabalho manual de religação.
Em 1945, John von Neumann propôs uma ideia simples e poderosa: se dados podem ser guardados na memória, por que não guardar as instruções do programa ali também? Com instruções e dados convivendo na mesma memória, mudar de programa passou a ser tão simples quanto carregar um novo conjunto de números — sem tocar em um único fio.
Esse é o princípio por trás de praticamente todo computador em uso hoje — do supercomputador ao relógio inteligente — e tem quatro consequências centrais:
- Programa armazenado: instruções são números guardados na memória, indistinguíveis de dados até serem interpretadas pela CPU.
- Execução sequencial: as instruções são executadas uma após a outra, controladas por um contador que indica "qual é a próxima".
- Controle centralizado: uma unidade de controle coordena todos os outros componentes, sincronizada por um relógio (clock).
- Uniformidade de dados e instruções: a mesma sequência de bits pode ser um número ou uma instrução — o que determina a diferença é apenas o contexto em que a CPU a lê.
2.1 Os três blocos do modelo¶
┌─────────────┐ barramentos ┌─────────────┐
│ MEMÓRIA │ ◄──────────────────► │ CPU │
│ (dados + │ dados / endereços │ UC + ULA + │
│ instruções) │ / controle │ registradores│
└─────────────┘ └─────────────┘
▲
│ barramento de E/S
▼
┌───────────────────┐
│ Entrada / Saída │
│ (teclado, monitor…) │
└───────────────────┘
Memória principal. Uma fileira de "caixas numeradas" (endereços), cada uma guardando um número que pode ser interpretado como instrução ou como dado. A CPU acessa qualquer endereço em tempo aproximadamente igual — daí o nome "acesso aleatório".
CPU (processador). Divide-se em três partes:
- Unidade de Controle (UC) — o "maestro": busca instruções na memória, decodifica o que cada uma significa e coordena os demais componentes.
- Unidade Lógica e Aritmética (ULA) — executa as operações matemáticas (soma, subtração, multiplicação, divisão) e lógicas (E, OU, NÃO) propriamente ditas.
- Registradores — um pequeno número de "gavetas" de memória extremamente rápidas (100 a 1000 vezes mais rápidas que a RAM), usadas para valores que a CPU está manipulando naquele exato momento. O Program Counter (PC) guarda o endereço da próxima instrução a buscar; o Instruction Register (IR) guarda a instrução que está sendo decodificada agora.
Unidade de Entrada/Saída. A interface entre a máquina e o mundo — teclado, mouse, monitor, alto-falante — sempre mediada por controladores especializados.
Barramentos. As "avenidas" por onde tudo circula: o barramento de dados carrega os valores propriamente ditos, o de endereços indica qual posição de memória acessar, e o de controle carrega sinais de coordenação (leitura, escrita, interrupção).
O gargalo de von Neumann
Como instruções e dados compartilham o mesmo caminho até a memória, a CPU frequentemente fica esperando dados chegarem pelo barramento — mesmo sendo capaz de calcular muito mais rápido do que a memória consegue responder. Essa limitação, batizada de "gargalo de von Neumann", é uma das razões pelas quais os computadores modernos usam memória cache (veremos em detalhe na seção 6 deste capítulo).
3. O ciclo de instrução: fetch, decode, execute, store¶
O "coração" de qualquer processador é um ciclo que se repete bilhões de vezes por segundo, sempre com a mesma estrutura de quatro etapas:
A Unidade de Controle usa o valor do Program Counter para buscar, na memória, a próxima instrução, e a coloca no Instruction Register.
A UC interpreta o conteúdo do IR: qual operação é essa (o opcode) e quais são seus operandos (quais registradores ou endereços de memória envolve).
A operação é de fato realizada — a ULA soma dois valores, a memória é lida ou escrita, ou o PC é alterado diretamente (no caso de uma instrução de salto).
O resultado, se houver, é gravado de volta em um registrador (rápido) ou na memória (mais lento). O PC avança para a próxima instrução e o ciclo recomeça.
3.1 Um exemplo completo, ciclo a ciclo¶
Considere este pequeno programa guardado na memória:
[0] LOAD A, [0x2000] # carrega o valor do endereço 0x2000 no registrador A
[1] ADD A, 5 # soma 5 ao valor em A
[2] STORE A, [0x2001] # guarda o resultado no endereço 0x2001
[3] END
Supondo que o endereço 0x2000 contenha o valor 10:
| Ciclo | PC | Instrução | Fetch → Decode → Execute → Store |
|---|---|---|---|
| 1 | 0 | LOAD A, [0x2000] |
Busca a instrução → identifica "carregar" → lê 10 da memória → A = 10 |
| 2 | 1 | ADD A, 5 |
Busca a instrução → identifica "somar" → ULA calcula 10+5 → A = 15 |
| 3 | 2 | STORE A, [0x2001] |
Busca a instrução → identifica "armazenar" → escreve 15 → memória[0x2001] = 15 |
A cada ciclo, o PC avança (0 → 1 → 2 → 3), a não ser que uma instrução de salto (JUMP) o modifique diretamente — é assim que laços de repetição e desvios condicionais são implementados no nível mais baixo.
Como ensinar isso
O Program Counter pode ser explicado como "o dedo de quem está lendo em voz alta": ele aponta para a linha atual e desce uma linha a cada instrução executada, a menos que receba a instrução "pule para a linha X" (o JUMP). É uma imagem que funciona bem até para os anos finais do Ensino Fundamental.
3.2 Do código-fonte à eletricidade¶
Um único comando em uma linguagem de alto nível, como resultado = a + b, passa por várias camadas de tradução antes de virar sinais elétricos:
Código-fonte (Python) resultado = a + b
↓ compilador/interpretador
Assembly (legível) LOAD A, a | LOAD B, b | ADD A, B | STORE A, resultado
↓ montador
Código de máquina (binário) 00110100 10101010 ...
↓ carregado na memória
Ciclo fetch-decode-execute PC percorre cada instrução, ULA calcula, registradores guardam
↓
Resultado exibido na tela
Essa cadeia de traduções é mais uma instância do princípio de camadas de abstração que já apareceu no Capítulo 2: cada nível esconde a complexidade do nível abaixo, permitindo que o programador escreva a + b sem pensar em opcodes ou barramentos.
4. Por que isso importa para ensinar¶
Entender o ciclo de instrução dá ao professor de Computação argumentos sólidos para responder a perguntas recorrentes dos alunos:
- "Por que o programa deu um resultado errado?" — porque o computador executa exatamente o que foi instruído, sem "adivinhar" a intenção do programador. Um erro de lógica no código produz um resultado tecnicamente correto para instruções tecnicamente erradas: "lixo entra, lixo sai".
- "Como um programa é depurado (debugado)?" — porque cada ciclo é rastreável, é possível pausar a execução (um breakpoint) e inspecionar o valor de cada registrador para descobrir exatamente onde o comportamento diverge do esperado.
- "Por que computadores diferentes têm velocidades diferentes?" — porque, embora todos sigam o mesmo modelo de von Neumann (arquitetura), a organização interna varia: número de núcleos, tamanho de cache, frequência do clock.
5. O trade-off impossível: rápido, grande e barato — escolha dois¶
Vimos que a CPU busca instruções e dados na memória a cada ciclo. Mas "a memória" não é um bloco único e homogêneo — é uma hierarquia de vários tipos de armazenamento, cada um com um trade-off diferente entre velocidade, capacidade e custo. Entender essa hierarquia explica praticamente todo comportamento de desempenho que um usuário percebe no dia a dia.
Não existe memória que seja simultaneamente muito rápida, muito grande e muito barata. Por isso os computadores combinam vários tipos de memória em camadas, cada uma compensando a limitação da anterior.
Uma analogia que funciona em qualquer sala de aula
Pense em como você organiza seus próprios pertences: a carteira no bolso (acesso imediato, cabe pouca coisa), o guarda-roupa do quarto (acesso rápido, capacidade média), a caixa no fundo do armário (acesso lento, capacidade maior) e o banco, onde o dinheiro que você não usa no dia a dia fica guardado (acesso mais lento ainda, capacidade "ilimitada"). A hierarquia de memória de um computador segue exatamente essa lógica.
| Camada | Capacidade típica | Velocidade de acesso | Custo relativo |
|---|---|---|---|
| Registradores (dentro da CPU) | Algumas dezenas de bytes | ~1 nanosegundo | Altíssimo |
| Cache (L1/L2/L3) | Dezenas de KB a poucos MB | 4–40 nanosegundos | Muito alto |
| RAM | 8–32 GB, em máquinas atuais | ~100 nanosegundos | Moderado |
| SSD (NVMe) | 256 GB – 2 TB | Frações de microssegundo | Baixo-moderado |
| HD magnético | 1–8 TB | Milissegundos | Muito baixo |
| Nuvem / internet | "Ilimitada" | Dezenas a centenas de milissegundos | Assinatura mensal |
A diferença entre essas camadas não é sutil — é de ordens de grandeza. Se um acesso a registrador durasse 1 segundo, um acesso à RAM equivaleria a cerca de 1 minuto e meio, um acesso a SSD a quase uma hora e meia, e buscar um dado na nuvem levaria vários dias. É por isso que "fechar programas" ou "limpar cache" de fato torna um computador perceptivelmente mais responsivo: menos disputa por essas camadas mais rápidas e escassas.
Como ensinar isso
Uma atividade simples e desplugada para os anos iniciais: associe cada camada da hierarquia a um tempo de espera concreto ("na sua mão" = 1 segundo; "na mochila" = 1 minuto; "no quarto" = 1 hora; "na biblioteca" = 1 semana) e peça que os alunos decidam onde guardariam um livro que usam todos os dias versus um livro que só consultam uma vez por ano.
6. Registradores e cache: a memória que "adivinha"¶
Os registradores, já apresentados na seção 2 deste capítulo, são a camada mais rápida — literalmente dentro do chip da CPU — mas também a menor: um processador moderno tem apenas algumas dezenas deles.
A cache (dividida tipicamente em três níveis, L1, L2 e L3, cada um maior e um pouco mais lento que o anterior) resolve um problema real: como aproveitar a velocidade dos registradores para uma quantidade maior de dados? A resposta é uma aposta estatística chamada localidade:
- Localidade temporal: se um dado foi usado agora, é provável que seja usado de novo em breve — então vale a pena mantê-lo por perto.
- Localidade espacial: se um dado foi acessado, é provável que os dados "vizinhos" (no mesmo endereço de memória, próximos) também sejam acessados logo — então a cache traz um bloco inteiro, não apenas o item pedido.
Quando a CPU precisa de um dado e o encontra na cache, chamamos isso de hit (acerto); quando não encontra e precisa buscar na RAM, é um miss (falha). Programas bem escritos, que aproveitam a localidade, podem rodar várias vezes mais rápido que programas equivalentes que "saltam" de forma imprevisível pela memória — um dos motivos pelos quais "o mesmo algoritmo" pode ter desempenho muito diferente dependendo de como foi implementado.
7. RAM: rápida, mas esquecida quando a luz apaga¶
A RAM (memória de acesso aleatório) é onde vivem os dados dos programas em execução. Tecnicamente, cada bit é guardado em um capacitor minúsculo que precisa ser constantemente "recarregado" — e é exatamente por isso que ela é volátil: assim que a energia é cortada, os capacitores se descarregam em segundos e os dados somem para sempre.
RAM não é o mesmo que armazenamento
Uma confusão comum entre estudantes (e adultos!) é achar que "salvar" um arquivo e "ele estar aberto na tela" são a mesma coisa. Um documento sendo editado vive na RAM; só quando o usuário clica em "salvar" ele é gravado em um meio não volátil (SSD ou HD). É por isso que um travamento do computador pode fazer um trabalho não salvo desaparecer — e é um ótimo gancho para ensinar o hábito de salvar com frequência.
Quando a RAM disponível se esgota, o sistema operacional recorre a um artifício chamado memória virtual (ou swap): usa uma parte do SSD/HD como se fosse RAM extra. Como o armazenamento em disco é ordens de magnitude mais lento, esse é justamente o momento em que um computador "trava" ou fica extremamente lento — o sintoma mais comum de "pouca memória" que qualquer usuário já viveu.
8. Armazenamento persistente: HD e SSD¶
Diferente da RAM, o armazenamento em HD (disco rígido magnético) e SSD (unidade em estado sólido) preserva os dados mesmo sem energia — por isso é chamado de não volátil.
Usa um disco magnético girando fisicamente (tipicamente entre 5.400 e 7.200 rotações por minuto) e um braço mecânico com uma cabeça de leitura/escrita que se move até a posição certa. Essa mecânica impõe um tempo de espera real — tipicamente 10 a 20 milissegundos por operação — que o torna cerca de 100 mil vezes mais lento que a RAM. É também a razão pela qual HDs são sensíveis a impactos e vibração: são, literalmente, peças móveis de precisão.
Não tem partes móveis: usa transistores de memória flash para guardar cada bit, o que reduz o tempo de acesso para frações de milissegundo — tipicamente dezenas de vezes mais rápido que um HD, sem ruído e mais resistente a choques. A limitação do SSD é diferente: cada célula de memória suporta um número finito de ciclos de escrita (tipicamente milhares), o que os fabricantes compensam distribuindo as escritas por toda a unidade (uma técnica chamada wear leveling).
A interface de conexão também mudou com o tempo: SSDs antigos usavam a mesma interface SATA criada para HDs em 2003 (limitada a cerca de 550 MB/s), enquanto SSDs modernos usam NVMe sobre a interface PCIe, alcançando várias vezes mais velocidade (as gerações mais recentes de PCIe chegam a mais de 10 GB/s).
Como ensinar isso
Perguntar "por que o computador da escola é tão mais lento que o notebook novo de casa?" costuma ter uma resposta simples e concreta: em boa parte dos casos, é a diferença entre um HD antigo e um SSD moderno — não necessariamente o processador. É um ótimo exercício de investigação prática, usando o próprio Gerenciador de Tarefas/Monitor de Atividade do sistema operacional (retomaremos essas ferramentas no Capítulo 4).
9. A nuvem: armazenamento em outro lugar¶
"Guardar na nuvem" não é armazenamento mágico — é armazenamento em um computador de outra pessoa, tipicamente um data center com milhares de servidores, acessado pela internet.
A analogia mais direta é a diferença entre comprar uma casa e alugar um apartamento: manter dados localmente (SSD do seu computador) tem um custo inicial e a responsabilidade da manutenção é sua; usar a nuvem transfere essa responsabilidade a uma empresa, mediante uma assinatura mensal, ao custo de depender de conexão à internet e de confiar seus dados a terceiros.
Vale distinguir três modelos de serviço em nuvem, do mais técnico ao mais pronto para uso:
| Modelo | O que você gerencia | Exemplo |
|---|---|---|
| IaaS (infraestrutura) | Sistema operacional, aplicações, dados | Uma máquina virtual alugada na AWS, Azure ou Google Cloud |
| PaaS (plataforma) | Apenas o código da sua aplicação | Serviços de hospedagem de aplicações web |
| SaaS (software pronto) | Nada — apenas usa | Google Drive, Dropbox, Microsoft 365 |
10. Reflexões críticas: limites físicos, privacidade e sustentabilidade¶
Compreender a hierarquia de memória abre espaço para três discussões que vão além da técnica pura — e que se conectam diretamente ao eixo Cultura Digital da BNCC.
Limites físicos. A miniaturização de transistores está se aproximando de limites impostos pela própria física — quando os componentes chegam à escala de poucos nanômetros, efeitos quânticos passam a interferir no funcionamento do circuito. É por isso que os ganhos anuais de desempenho vêm desacelerando desde meados dos anos 2010, retomando a discussão sobre a Lei de Moore do Capítulo 1.
Privacidade. Um arquivo guardado na nuvem deixa de estar sob controle físico exclusivo do usuário: a empresa hospedeira tem, tecnicamente, acesso aos dados (mesmo que contratualmente prometa não os usar), e pode ser obrigada por ordem judicial a fornecê-los a autoridades. Não se trata de evitar a nuvem, mas de fazer escolhas conscientes sobre o que armazenar onde, considerando a sensibilidade da informação.
Impacto ambiental. Cada data center consome energia real — em geral, mais para refrigeração do que para o próprio processamento — e a "limpeza" de arquivos desnecessários acumulados ao longo dos anos ("lixo digital": capturas de tela antigas, versões duplicadas, downloads esquecidos) tem, ainda que pequeno individualmente, um custo ambiental agregado real.
📝 Atividades¶
- CPU humana (Anos Finais/Ensino Médio, desplugada). Divida a turma em papéis: CPU (coordena o ciclo), Unidade de Controle, ULA, Memória, Registradores e um narrador. Execute manualmente, com cartões de instrução, um programa simples de 4 instruções (como o exemplo do LOAD/ADD/STORE acima), narrando cada etapa do ciclo fetch-decode-execute-store em voz alta.
- Decodificador de instruções (Ensino Médio, desplugada/plugada). Forneça uma tabela pequena de opcodes (
00 = LOAD,01 = STORE,10 = ADD,11 = SUB) e uma sequência binária. Peça que os alunos decodifiquem manualmente o que o "programa" faz. - Simulação de barramento (Anos Finais, desplugada). Usando fitas coloridas para representar os três barramentos (dados, endereços, controle) e alunos representando CPU, memória e um dispositivo de E/S, encene fisicamente uma leitura de memória e, em seguida, uma interrupção causada por um dispositivo externo.
- Análise de performance (Ensino Médio, plugada). Compare dois trechos de código equivalentes — um que acessa a memória repetidamente e outro que usa registradores/variáveis locais — e discuta por que o segundo tende a ser mais rápido.
- Caça ao bug com debugger (Ensino Médio, plugada). Em qualquer IDE com depurador (VS Code, por exemplo), rode um pequeno programa com um erro de ordem de operações e use breakpoints para descobrir, passo a passo, onde o valor diverge do esperado. Reforce a mensagem: "a máquina não erra — o programa erra".
- Hierarquia com tempos concretos (Anos Iniciais, desplugada). Associe cada camada de memória a um tempo de espera do cotidiano (mão, mochila, quarto, biblioteca) e peça que os alunos decidam onde guardariam itens de uso frequente versus raro.
- Cronômetro de acesso (Anos Finais, plugada). Com um pequeno script que mede o tempo de leitura de um array em memória, de um arquivo em disco e de uma requisição de rede, os alunos comparam na prática a diferença de ordens de grandeza entre as camadas.
- Calculadora de custo por byte (Ensino Médio, plugada). A partir dos preços atuais de RAM, SSD e HD, os alunos calculam o custo por gigabyte de cada tecnologia e discutem por que ninguém compra 1 TB de RAM, mesmo sendo tecnicamente possível.
- Onde guardar o que importa (todos os níveis, reflexão). Compare HD local, nuvem pública e um pendrive em termos de confiabilidade, facilidade de acesso, privacidade e custo, e discuta: "se você tivesse fotos muito importantes para guardar por 20 anos, onde guardaria? Por quê?"
- Auditoria de lixo digital (Ensino Médio, plugada). Peça que os alunos revisem seu próprio armazenamento em nuvem (com supervisão e respeito à privacidade), identifiquem arquivos duplicados ou obsoletos, e reflitam sobre o custo ambiental agregado do armazenamento de dados que nunca mais serão usados.
Simuladores recomendados para essas atividades
- Little Man Computer (LMC) — o mais simples de todos, ótimo primeiro contato com o ciclo fetch-decode-execute: peterhigginson.co.uk/LMC
- Neander — CPU didática simplificada, em português, muito usada em cursos introdutórios no Brasil.
- CPUlator — simulador mais avançado, com registradores e memória de arquiteturas reais (ARM/MIPS): cpulator.01xz.net
📚 Para saber mais¶
- TANENBAUM, A. S.; AUSTIN, T. Organização Estruturada de Computadores. 6ª ed. — Capítulos 1 e 3 tratam diretamente do modelo de von Neumann e do ciclo de instrução; o capítulo sobre hierarquia de memória aprofunda cache e RAM.
- PATTERSON, D. A.; HENNESSY, J. L. Computer Organization and Design: The Hardware/Software Interface. — Referência mais aplicada, com exemplos em linguagem de montagem real e discussão aprofundada de cache e desempenho.
- Nand2Tetris — curso e conjunto de ferramentas gratuitas que permitem construir uma CPU a partir de portas lógicas: nand2tetris.org
- Documentação pública dos principais provedores de nuvem (Google Cloud, AWS, Azure) sobre pegada de carbono de data centers — bom material para a atividade de reflexão ambiental.
A seguir: no Capítulo 4, mudamos de camada: quem organiza tudo isso — a memória, os arquivos, os programas em execução — é o sistema operacional. Vamos entender seu papel como "maestro" da máquina, tanto na teoria quanto na prática com Linux e Windows.