Arquitetura de Computadores · Ibmec RJ

Cap. 6 — Processadores

leitura ~30 min Prof. Clayton J A Silva Rev 2026.2

Objetivos de aprendizagem

  • Identificar as áreas funcionais do processador: ULA e Unidade de Controle
  • Compreender os conceitos de núcleos (cores) e threads em processadores multicore
  • Classificar formatos de instrução e modos de endereçamento
  • Calcular e comparar medidas de desempenho (MIPS, FLOPS)
  • Diferenciar arquiteturas RISC e CISC, e técnicas de paralelismo (pipeline, unidades especializadas)

Áreas e elementos funcionais

Os processadores possuem duas áreas funcionais básicas:

ULA Circuitos lógicos e aritméticos Registradores de uso geral Cache L1 (dados/instruções) UC Registrador de Instruções (RI) Decodificador de instruções Circuitos de controle interligação via barramento local

Fig. 6.1 — Unidades funcionais do processador: ULA (operações + registradores + cache L1) e UC (RI, decodificador, circuitos de controle)

ElementoÁreaFunção
Circuitos lógicos/aritméticosULAExecutam as instruções desse tipo
Registradores de uso geralULAArmazenam dados sobre os quais as instruções operam
Cache L1ULAMemória cache de nível 1, interna ao processador — a mais rápida e cara; armazena dados/instruções de uso frequente
Registrador de Instruções (RI)UCArmazena a instrução buscada, a ser executada
Decodificador de instruçõesUCConverte a instrução em um conjunto específico de bits que alimenta os circuitos de controle
Circuitos de controleUCGeram os sinais de controle encaminhados aos demais componentes da máquina
Os elementos das duas áreas se interligam por meio de um barramento local (ver Cap. 5).

Núcleos (core) e threads

6.2.1 Processadores multicore

Processadores modernos multiplicam a configuração ULA+UC — são os chamados processadores multicore. Cada núcleo (core) contém todos os componentes de um processador independente. Quanto mais núcleos, maior a complexidade construtiva.

Core 0 ULA+UC+L1 Core 1 ULA+UC+L1 Core 2 ULA+UC+L1 Core 3 ULA+UC+L1 cada núcleo executa um ou mais threads, compartilhando caches superiores e barramento

Fig. 6.2 — Processador multicore: cada núcleo replica os componentes de um processador independente

6.2.2 Threads

thread

Sequência de instruções executadas em um núcleo, representando uma tarefa independente. A multitarefa permite que os núcleos trabalhem em várias tarefas simultaneamente, cada um executando um ou vários threads.

Em processadores básicos, cada núcleo executa um thread por vez. Processadores mais avançados permitem que um núcleo execute vários threads simultaneamente, melhorando desempenho/eficiência em tarefas como edição de vídeo, renderização 3D e processamento de dados em larga escala — otimizando a distribuição de tarefas e evitando núcleos ociosos.

Executar vários threads em um núcleo não equivale a adicionar núcleos adicionais: melhora o desempenho em situações específicas, mas não o dobra, pois os recursos do núcleo continuam compartilhados entre as threads.

Set de instruções

Cada processador executa um conjunto finito e pré-definido de instruções — o set de instruções, decodificado pela UC. Cada instrução produz um comportamento específico; as instruções de um programa são tipicamente armazenadas em posições lineares de endereço de memória, e normalmente possuem visibilidade sobre alguns registradores.

6.3.1 Formatos e modos de endereçamento das instruções

A instrução divide-se em dois campos: opcode (código binário da operação) e operando (referencia o dado a ser usado).

FormatoCaracterísticaExemplo (AVR ATmega2560)
Sem operandoInstrução não requer dadoIJMP — desvio incondicional
MonádicaOperando referencia um dadoINC Rd → Rd ← Rd + 1
DiádicaOperando referencia dois dadosADD Rr,Rd → Rr ← Rr + Rd

A referência ao dado em memória é o modo de endereçamento da instrução:

ModoCaracterísticaExemplo
ImediatoOperando contém o próprio dado — buscado junto com a instrução, execução mais rápidaLDI Rs,k → Rs ← k
DiretoOperando contém o endereço do dado em memória — um acesso à memóriaLDS Rs,k → Rs ← DS[k]
Indireto do registradorOperando contém o registrador ponteiro, cujo valor é o endereço do dadoLD Rs,x+ → Rs ← DS[[x+]]
IndexadoOperando contém o registrador-ponteiro mais um valor de deslocamento (índice)LDD Rs,X+k → Rs ← DS[[x+]+k]

Tipos de instrução mais comuns:

6.3.2 Desempenho

UnidadeMede
MIPS (Milhões de Instruções Por Segundo)Velocidade de execução de instruções em geral — não distingue instruções de tempos de execução muito diferentes (ex.: multiplicação inteira vs. ponto flutuante)
FLOPS (Operações de Ponto Flutuante Por Segundo)Desempenho da ULA especificamente nas instruções de ponto flutuante, mais complexas

6.3.3 Paralelismo de execução das instruções

O ciclo de instrução, embora composto de várias etapas, é tradicionalmente executado sequencialmente — uma etapa inicia após a anterior terminar. Enquanto a decodificação ocorre, a busca (MBR/MAR) e a execução (ULA) ficam ociosas.

CPUs que executam mais de uma instrução por ciclo são chamadas superescalares.

a. Pipeline

Técnica de implementação em que múltiplas instruções estão em execução simultaneamente, em estágios distintos, cada um com seu próprio bloco de controle. Ao concluir, um estágio passa a instrução ao próximo e inicia a próxima instrução.

ciclo → 12 34 56 Instr. 1: fetch decode op. fetch execute store Instr. 2: fetch decode op. fetch execute store instruções sobrepostas em estágios distintos — aumento de desempenho

Fig. 6.3 — Pipeline de 5 estágios: fetch, decode, operand fetch, execute, store — instruções sucessivas se sobrepõem

A implementação do pipeline traz desafios — conflitos de dados, estruturais e de controle — que aumentam a complexidade em proveito do desempenho.

b. Unidades de execução especializadas

Outra estratégia de paralelismo é organizar unidades especializadas dentro da ULA, cada uma dedicada a um tipo de operação.

ULA inteiros FPU (ponto flut.) Load/Store Desvio (branch) despachante de instruções

Fig. 6.4 — Unidades de execução especializadas: cada tipo de operação é resolvido em uma unidade dedicada, em paralelo

Arquiteturas RISC x CISC

Duas estratégias de construção de instruções de processadores: RISC (Reduced Instruction Set Computing) e CISC (Complex Instruction Set Computing). A diferença está, principalmente, na complexidade das instruções e no número de ciclos de clock necessários para executá-las.

CaracterísticaRISCCISC
Conjunto de instruçõesReduzido e simplesComplexo e variado
Ciclos por instruçãoTende a ser uniforme/curtoExecuta tarefas complexas em menos ciclos
Velocidade/eficiência energéticaGeralmente mais rápida e eficientePode ser menos eficiente
Uso de memóriaPode exigir mais memória para programasMais compacto por instrução
FlexibilidadeMenorMaior — executa tarefas mais complexas diretamente

Teste seus conhecimentos

? Pergunta 1 de 3

Qual instrução AVR é um exemplo de instrução monádica?

? Pergunta 2 de 3

Executar vários threads em um único núcleo equivale a dobrar o desempenho do processador?

? Pergunta 3 de 3

No pipeline de 5 estágios, o que acontece quando a primeira instrução está no estágio "execute"?

← anteriorCap. 5 — Barramento