Arquitetura de Computadores - IFPB
Entendendo as Arquiteturas Fundamentais dos Computadores
Imagine que você está cozinhando e precisa de dois tipos de coisas: o livro de receitas (instruções) e os ingredientes (dados). A grande pergunta é: onde você vai guardar essas coisas?
Na arquitetura de computadores, temos duas filosofias principais para organizar a memória que armazena programas e dados. Essa escolha fundamental afeta como o processador acessa informações e, consequentemente, o desempenho e a segurança do sistema.
Um único "baú" (memória) para guardar tanto o livro de receitas (programa) quanto os ingredientes (dados). A CPU pega tudo do mesmo lugar.
Dois "baús" separados. Um SÓ para o livro de receitas (memória de programa) e outro SÓ para os ingredientes (memória de dados). A CPU tem duas portas para pegar coisas.
Aspecto | Von Neumann | Harvard |
---|---|---|
Organização da Memória | Memória unificada para programa e dados | Memórias separadas para programa e dados |
Barramento | Barramento único compartilhado | Barramentos separados |
Velocidade | Limitada pelo gargalo de acesso | Mais rápida (acesso simultâneo) |
Complexidade | Mais simples | Mais complexa |
Flexibilidade | Alta (permite automodificação) | Menor (programa fixo) |
Segurança | Menor (programa pode ser corrompido) | Maior (programa protegido) |
Uso Típico | Computadores pessoais, servidores | Microcontroladores, DSPs |
Custo | Menor | Maior |
Vamos ver uma consequência prática: E se um programa tentasse reescrever uma de suas próprias instruções enquanto executa?
# Exemplo conceitual Von Neumann
memória = [
"CARREGAR 5", # Endereço 0: Carrega valor 5
"SOMAR_MEM 3", # Endereço 1: Soma com valor no endereço 3
"SALVAR_MEM 1", # Endereço 2: MODIFICA a própria instrução!
"10" # Endereço 3: Dados
]
# A instrução no endereço 2 pode modificar a instrução no endereço 1!
# Isso é possível porque programa e dados estão na mesma memória.
# Exemplo conceitual Harvard
memória_programa = [
"CARREGAR 5", # Endereço 0: Carrega valor 5
"SOMAR_MEM 1", # Endereço 1: Soma com valor no endereço 1 dos dados
"SALVAR_MEM 1" # Endereço 2: Tenta modificar... mas não consegue!
]
memória_dados = [
"20", # Endereço 0: Dados
"10" # Endereço 1: Mais dados
]
# A instrução SALVAR_MEM só pode modificar a memória de dados,
# nunca a memória de programa. O programa permanece intacto!
Resposta: Computadores modernos são um híbrido inteligente! No núcleo, são Von Neumann, mas usam caches separados que funcionam como Harvard.
Processadores modernos usam I-cache (cache de instruções) e D-cache (cache de dados) separados. Isso dá a velocidade do Harvard mantendo a flexibilidade do Von Neumann!