Arquitetura de Computadores · Ibmec RJ
Objetivos de aprendizagem
6.1 / áreas e elementos funcionais
Os processadores possuem duas áreas funcionais básicas:
Fig. 6.1 — Unidades funcionais do processador: ULA (operações + registradores + cache L1) e UC (RI, decodificador, circuitos de controle)
| Elemento | Área | Função |
|---|---|---|
| Circuitos lógicos/aritméticos | ULA | Executam as instruções desse tipo |
| Registradores de uso geral | ULA | Armazenam dados sobre os quais as instruções operam |
| Cache L1 | ULA | Memó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) | UC | Armazena a instrução buscada, a ser executada |
| Decodificador de instruções | UC | Converte a instrução em um conjunto específico de bits que alimenta os circuitos de controle |
| Circuitos de controle | UC | Geram os sinais de controle encaminhados aos demais componentes da máquina |
6.2 / núcleos e threads
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.
Fig. 6.2 — Processador multicore: cada núcleo replica os componentes de um processador independente
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.
6.3 / 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.
A instrução divide-se em dois campos: opcode (código binário da operação) e operando (referencia o dado a ser usado).
| Formato | Característica | Exemplo (AVR ATmega2560) |
|---|---|---|
| Sem operando | Instrução não requer dado | IJMP — desvio incondicional |
| Monádica | Operando referencia um dado | INC Rd → Rd ← Rd + 1 |
| Diádica | Operando referencia dois dados | ADD Rr,Rd → Rr ← Rr + Rd |
A referência ao dado em memória é o modo de endereçamento da instrução:
| Modo | Característica | Exemplo |
|---|---|---|
| Imediato | Operando contém o próprio dado — buscado junto com a instrução, execução mais rápida | LDI Rs,k → Rs ← k |
| Direto | Operando contém o endereço do dado em memória — um acesso à memória | LDS Rs,k → Rs ← DS[k] |
| Indireto do registrador | Operando contém o registrador ponteiro, cujo valor é o endereço do dado | LD Rs,x+ → Rs ← DS[[x+]] |
| Indexado | Operando 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:
| Unidade | Mede |
|---|---|
| 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 |
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.
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.
Fig. 6.3 — Pipeline de 5 estágios: fetch, decode, operand fetch, execute, store — instruções sucessivas se sobrepõem
Outra estratégia de paralelismo é organizar unidades especializadas dentro da ULA, cada uma dedicada a um tipo de operação.
Fig. 6.4 — Unidades de execução especializadas: cada tipo de operação é resolvido em uma unidade dedicada, em paralelo
6.4 / 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ística | RISC | CISC |
|---|---|---|
| Conjunto de instruções | Reduzido e simples | Complexo e variado |
| Ciclos por instrução | Tende a ser uniforme/curto | Executa tarefas complexas em menos ciclos |
| Velocidade/eficiência energética | Geralmente mais rápida e eficiente | Pode ser menos eficiente |
| Uso de memória | Pode exigir mais memória para programas | Mais compacto por instrução |
| Flexibilidade | Menor | Maior — executa tarefas mais complexas diretamente |
checkpoint
Qual instrução AVR é um exemplo de instrução monádica?
Executar vários threads em um único núcleo equivale a dobrar o desempenho do processador?
No pipeline de 5 estágios, o que acontece quando a primeira instrução está no estágio "execute"?