Tradução de Endereços pela Unidade de Gerenciamento de Memória (MMU)
A MMU habilita memória virtual mapeando endereços lógicos (virtuais) de cada processo para frames de RAM físicos.
Passo a Passo (Estilo x86 Tabela de Páginas Multi-nível)
- Divisão do Endereço Lógico (ex.: 32-bit, páginas 4 KB):
- Índice do Diretório de Páginas (10 bits) → seleciona PDE no Diretório de Páginas (registrador CR3).
- Índice da Tabela de Páginas (10 bits) → seleciona PTE na Tabela de Páginas.
- Offset da Página (12 bits) → offset de byte dentro do frame de 4 KB.
- Busca no Diretório de Páginas: MMU lê PDE. Se Present=0 → Page Fault (SO carrega página do disco).
- Busca na Tabela de Páginas: MMU lê PTE. Se Present=0 → Page Fault.
- Endereço do Frame Físico: PTE contém Número de Página Física (PPN) (20 bits superiores).
- Combinação: Endereço Físico = (PPN << 12) | Offset da Página.
- Cache TLB: Translation Lookaside Buffer cacheia mapeamentos recentes (VPN → PPN) para pular page-walk em hits (~99% taxa de acerto).
Estruturas-Chave
- CR3 (PDBR): Endereço físico do Diretório de Páginas do processo atual.
- Flags PDE / PTE: Present, Read/Write, User/Supervisor, Write-Through, Cache-Disable, Accessed, Dirty, Global, NX (No-Execute).
- Manipulador de Page Fault (SO): Aloca frame, atualiza PTE, retoma instrução.
Extensões
- PAE (36-bit): 3 níveis, páginas grandes 2 MB/4 MB.
- x86-64 (4 níveis): PML4 → PDPT → PD → PT → página 4 KB (virtual 48-bit).
- ARMv8: Similar 4 níveis (TTBR0/1), grânulos 4 KB/16 KB/64 KB.
Resultado: Cada processo vê espaço de endereços contíguo 0–4 GB (32-bit) ou 0–256 TB (48-bit), isolado e maior que RAM física.