Arquitetura de computadores¶
Neste capítulo
Cadeia de dependências¶
lógica digital e estado armazenado
↓
datapath e controle
↓
estado visível pela ISA
↓
pipeline e tratamento de hazards
↓
prediction, speculation e retirement
↓
machine-code encoding
↓
registradores, flags e addressing x86-64
↓
privilégio e proteção
↓
organização de DRAM e memory controller
↓
cache hierarchy
↓
coerência e memory ordering
↓
MMIO / DMA / buses
↓
PCI Express
↓
descrição ACPI
↓
boot e kernel
Arquitetura e microarquitetura¶
A ISA define estado e transições observáveis por software. A microarquitetura define uma estratégia de implementação dessas transições.
O currículo separa:
- datapath da CPU e ISA;
- organização de pipeline;
- hazards e forwarding;
- branch prediction e speculation;
- register renaming, execução out-of-order e retirement.
O ChrisCPU atual modela semântica arquitetural, não um pipeline físico especulativo.
Camada de código de máquina¶
A sequência seguinte define o contrato binário exigido por assemblers, compilers, emulators e kernel:
- código de máquina;
- aliases de registradores e flags x86-64;
- instruction encoding e addressing modes;
- memória e privilégio;
- transições controladas entre níveis de privilégio.
Camada do sistema de memória¶
A sequência distingue:
- organização física de DRAM e política do memory controller;
- cache hierarchy;
- cache coherence;
- atomics e memory ordering.
Célula DRAM, posição de memória arquitetural, cache line e virtual page são abstrações distintas.
Camada de plataforma¶
A interação com dispositivos segue:
- buses, port I/O, MMIO e DMA;
- PCI e PCI Express;
- descrição de plataforma ACPI.
Esses tópicos estabelecem os pré-requisitos de plataforma para boot, routing de interrupts, storage, graphics e networking.
Fronteiras de evidência¶
Mecanismos de processadores físicos são documentados a partir de especificações de arquitetura/vendor e teoria de arquitetura de computadores.
O source do ChrisCPU comprova somente o comportamento implementado pelo emulator. O comportamento da CPU hospedeira não é atribuído ao modelo guest sem implementação explícita.