Você pressiona Enter. O terminal exibe o resultado. Três décimos de segundo se
passaram.
Parece simples. Não é.
Nesses trezentos milissegundos, uma série de eventos em cascata se desenrolou a velocidades impossíveis de visualizar intuitivamente: o processador buscou centenas de milhões de instruções da memória; o subsistema de cache tentou antecipar quais dados seriam necessários a seguir; o pipeline sobrepôs a execução de dezenas de operações simultâneas; a unidade de controle decodificou, uma a uma, as instruções em linguagem de máquina que correspondem às suas linhas de código — que antes passaram por fases de análise léxica, sintática, semântica e geração de código.
E tudo isso sobre hardware que, no fundo, só entende dois estados: voltagem alta ou baixa. Zero ou um.
Esta série explora como essas camadas funcionam de verdade: como a memória é organizada e endereçada, como o processador busca e executa instruções, quais as diferenças entre RISC e CISC, o que é um hazard de pipeline, como um número decimal vira sequência de bits na memória, como um programa em linguagem de alto nível chega ao hardware.
Pré-requisitos e série complementar #
Esta série é autocontida no que diz respeito à arquitetura de computadores. Ela tem, no entanto, uma série irmã: Do Zero ao Float, que cobre a representação numérica binária com profundidade — bases numéricas, complemento de dois, overflow e ponto flutuante IEEE 754. Se você ainda não conhece esses conceitos, recomendo começar por lá. O artigo sobre representação de dados desta série retoma os pontos principais, mas não substitui aquela leitura.
Programar em Python é bem-vindo, mas não obrigatório. Todos os exemplos de cálculo e raciocínio são apresentados matematicamente. Python aparece como bônus em alguns artigos para quem quiser explorar os conceitos interativamente.
O que você vai aprender nesta série #
Se pudéssemos abrir um computador e mapear como suas peças principais “conversam” entre si, veríamos um modelo muito bem definido. De um lado, temos o “cérebro” da máquina: a CPU, que abriga as unidades de controle, cálculos (lógica e aritmética) e os registradores. Do outro, temos a Memória Principal e os dispositivos que interagem com o mundo externo (teclados, impressoras, monitores). Para que a CPU não precise de um cabo individual para cada peça, tudo é interligado por uma via principal de comunicação chamada barramento, como ilustra o diagrama a seguir:

Entender essa organização de um computador é o objetivo central desta série de artigos. Ao final, espero que o leitor tenha um entendimento aprofundado de cada aspecto apresentado na figura.
A série está organizada em 11 artigos temáticos (os títulos ainda não estão definidos, mas os temas e tópicos estão listados abaixo). Cada artigo é dedicado a um aspecto específico da arquitetura de computadores, mas todos estão interconectados para formar um panorama completo do funcionamento interno de uma máquina:
| # | Tema | Tópicos abordados |
|---|---|---|
| 0 | Apresentação | Este artigo aqui |
| 1 | Hierarquia de Memória | Células, endereços, REM/RDM, SRAM, DRAM, ROM, ECC e dimensionamento |
| 2 | Memória Cache | Localidade, mapeamentos direto/associativo/por conjuntos, substituição e escrita |
| 3 | CPU — Componentes e Ciclo de Instrução | ULA, UC, registradores, RI, CI e o ciclo fetch-decode-execute |
| 4 | CPU — O Processador Hipotético | Conjunto de instruções de 12 bits, execução passo a passo e assembly hipotético |
| 5 | Pipeline e Barramentos | Estágios, hazards de dados/controle/estruturais e UC hardwired × microprogramada |
| 6 | Representação de Dados | ASCII, Unicode, complemento de dois, shifts e IEEE 754 |
| 7 | Representação de Instruções | ISA, formatos de 0 a 3 operandos e os 7 modos de endereçamento |
| 8 | Execução de Programas | Evolução de linguagens, fases do compilador, montador, linker e carregador |
| 9 | Python e o Caminho do Código ao Hardware (bônus) | CPython, bytecode, VM e diferenças entre linguagens interpretadas e compiladas |
| 10 | Entrada e Saída | Polling, interrupções, DMA e o cálculo de overhead de I/O |
| 11 | Arquiteturas Avançadas | RISC × CISC, taxonomia de Flynn, SMP, NUMA, clusters e multicore |
Sobre a metodologia #
Cada artigo parte de definições precisas, apresenta as fórmulas e modelos fundamentais, resolve exemplos teóricos e numéricos passo a passo e termina conectando o tema ao artigo seguinte.
Os exemplos de código assembly são apresentados exatamente como aparecem em referências acadêmicas, sem adaptações. A fidelidade ao material original é intencional: você estará vendo o mesmo assembly que aparece em livros-texto clássicos de arquitetura de computadores.
Sobre a origem da série e minha experiência #
Tenho um bacharelado em química e depois fiz mestrado em química. No entanto, sempre tive muita afinidade com informática e equipamentos eletrônicos de forma geral. Tanto que, ainda na minha graduação, enquanto fazia iniciação científica, fiquei responsável pela manutenção e gestão dos equipamentos de laboratório e seus respectivos computadores. Além disso, sempre que podia automatizar algo via código, nem que fosse uma planilha de Excel, eu automatizava.
Assim, naturalmente minha carreira foi evoluindo para algo ligado à programação. Por exemplo, já fui professor de química em um instituto federal e em minhas aulas usava materiais interativos que eu mesmo desenvolvi. Também orientei alunos em projetos que envolviam programação. E, hoje, sou cientista de dados, já tendo atuado em diversos projetos para grandes empresas nacionais e internacionais.
Fui aprendendo programação por conta própria, a partir de livros, documentações e materiais na internet. Até que, por gostar muito de estudar, resolvi começar uma nova graduação. Sinceramente, nem sei se vou levar o curso até o final, por conta de tempo e trabalho. Comecei porque gosto de estudar e já estudava por conta própria diversos materiais de graduação e pós-graduação em computação. Se achar que compensa, vou continuar, senão saio do curso e sigo de forma autodidata como sempre fiz. Mas, de qualquer forma, essa série se baseia em uma das disciplinas do curso. Vamos falar um pouco sobre o curso e a disciplina que deu origem aos artigos desta série.
Tecnólogo em Sistemas de Computação #
Esta série de artigos foi elaborada tendo como inspiração os materiais da disciplina Organização de Computadores do curso de Tecnólogo em Sistemas de Computação oferecido pelo CEDERJ.
Caso você não seja do Rio de Janeiro ou não conheça o projeto, o CEDERJ (Centro de Educação a Distância do Estado do Rio de Janeiro) é um consórcio que reúne as principais universidades públicas do estado (como UFF, UFRJ, UERJ, entre outras) para oferecer ensino superior. No caso do curso em questão, o diploma é emitido pela UFF. O formato do curso é semipresencial: os alunos estudam através de uma plataforma com materiais didáticos dedicados e suporte de tutorias online, mas a aplicação das provas oficiais ocorre de forma presencial nos polos regionais espalhados pelo estado.
Se você tem dúvidas sobre o que é um curso Tecnólogo, saiba que ele é uma graduação de nível superior, exatamente como um bacharelado ou uma licenciatura. A principal diferença está no foco e no tempo: enquanto um bacharelado em Ciência da Computação pode durar quatro ou cinco anos com uma carga teórica extensa, o tecnólogo é mais enxuto (geralmente dura cerca de três anos) e tem uma grade curricular teoricamente mais direcionada para a prática e para as demandas reais e imediatas do mercado de trabalho de tecnologia. Ênfase no “teoricamente”, mas isso é papo para outro artigo.
Algum dia vou escrever mais sobre o curso, se este vale a pena, sobre a organização do mesmo e outros pontos. Aqui, vale comentar um pouco sobre a disciplina e, também, fazer alguns esclarecimentos.
Como a série foi desenvolvida #
Alguns pontos muito importantes:
- Eu não tenho qualquer ligação com o CEDERJ senão como aluno. Não conheço os professores da disciplina (lembre-se que o curso é via plataforma online com vídeos pré-gravados) nem os tutores.
- Os artigos nasceram de anotações pessoais que fui fazendo durante os estudos para a disciplina. Depois fui complementando com outras coisas que achei interessantes e que não foram cobertas na disciplina. E fui adaptando para ficar mais dentro da forma e linguagem dos outros artigos aqui do Ciência Programada.
- Os artigos não têm a menor pretensão de substituir os materiais do curso. Na realidade, escrevi para eles serem lidos por qualquer pessoa com interesse no tema, mesmo que ela nem saiba o que é CEDERJ ou nem leia esse artigo de apresentação. Novamente, os artigos são completamente independentes do material que serviu de inspiração.
- Os artigos abordam diversos tópicos não cobertos na disciplina mas que achei interessante adicionar. Por exemplo, como trabalho com Python, adicionei diversos exemplos com essa linguagem que não são originais da disciplina. Coloquei porque gosto da linguagem e achei legal adicionar.
- O material da disciplina é muito datado. Assim, fiz um esforço para atualizar e complementar com informações mais recentes quando possível.
- Os materiais da disciplina serviram apenas como inspiração e referência. Para não violar eventuais direitos autorais dos professores, da instituição, ou dos livros por ventura usados pelos professores para fazer o material, não copiei nenhum trecho, mesmo que mínimo, dos slides. Também não utilizei diretamente nenhuma figura dos slides.
- Sobre as figuras que aparecem nos artigos, ou eu recriei usando Draw.io ou Mermaid, ou foram criadas do zero por mim. Algumas também foram criadas usando geradores de imagem por IA, como o Gemini, e nesses casos é possível reconhecer pela marca d’água que tais ferramentas costumam deixar. As que eu recriei possuem acréscimos que achei interessantes sobre as figuras originais dos materiais da disciplina.
- Sobre os exemplos que aparecem nos artigos. Alguns são inspirados em exemplos dos materiais da disciplina, seja dos slides, seja de atividades, mas foram adaptados e modificados para se encaixar melhor na forma e linguagem dos artigos aqui do site. Alguns outros são adaptados dos livros citados abaixo. E há exemplos que são originais, criados por mim, sem qualquer relação com os materiais da disciplina.
Na realidade, o material da disciplina é bem simples e antigo. E não estou fazendo uma crítica aos professores que desenvolveram o material originalmente. Se alguém merece crítica, é a instituição CEDERJ que não investe em atualização do material. Até mesmo por isso que fui buscando outras fontes enquanto estudava, pois o material não atendia minhas curiosidades e está bem desatualizado, especialmente em formato.
Para quem tiver curiosidade, aqui estão os slides da disciplina. E também as atividades a distância dos últimos anos e as provas dos últimos anos. Todos esses links são de um Google Drive mantido pelo Diretório Acadêmico do curso, do qual não faço parte e não tenho qualquer envolvimento.
O mesmo Diretório Acadêmico fez upload dos vídeos disponíveis na plataforma de estudo para o YouTube, nesta playlist. O motivo é a instabilidade da plataforma, que prejudica constantemente os alunos. Ficando no YouTube, a chance de ficar fora do ar diminui drasticamente.
Como podem ver, os vídeos foram gravados há muito tempo, quase 20 anos. A baixa qualidade da imagem não é por conta do YouTube, é exatamente assim na plataforma. Infelizmente, é isso que o CEDERJ disponibiliza. E não é apenas nessa matéria essa situação. Novamente, não estou criticando os professores que gravaram isso há anos atrás com os recursos e tecnologias disponíveis na época. Acredito que nem eles achavam à época que o material ia ser utilizado quase duas décadas depois. O que critico é a instituição que não investe em atualização do material, seja em formato, seja em conteúdo. Tenho mais de uma década de experiência docente, sei quando uma deficiência de material é por falta de investimento da instituição ou por falta de empenho do professor. E, nesse caso, é claramente a instituição que não investe.
Enfim, algum dia escrevo mais sobre os problemas do CEDERJ (e também algumas coisas positivas). O objetivo aqui é apenas deixar claro que os artigos, por mais que inicialmente inspirados no material da disciplina, não possuem cópias de trechos dos materiais. Na realidade, imagino que qualquer um que leia os artigos vai perceber que os artigos possuem conteúdo, forma e abordagem bem distintos dos slides e vídeos.
Por fim, a disciplina recomenda o livro “Introdução à Organização de Computadores” de Mário A. Monteiro, editora LTC. Até onde consegui apurar, a última edição deste livro é de 2007… O livro até é bom, mas acredito que um mais atualizado seja mais interessante. Acabei estudando mais pelo “Arquitetura e Organização de Computadores” do William Stallings, que possui edições mais recentes e uma didática que achei melhor que a do livro do Monteiro.
Agora é curtir a série #
É isso por esse artigo. Diferentemente de outras séries aqui do site, achei que essa precisava de uma apresentação mais detalhada antes de entrar direto no conteúdo. Há todo um contexto que, para leitores mais exigentes, pode fazer diferença. Mas, no geral, acho que a série pode tranquilamente ser entendida e aproveitada sem esse contexto pessoal abordado aqui.
Para quem está lendo no dia em que este artigo foi publicado, o primeiro artigo da série será disponibilizado amanhã. Até lá!