Come la MMU Traduce gli Indirizzi Logici in Indirizzi Fisici
Traduzione Indirizzi della Memory Management Unit (MMU)
La MMU abilita la memoria virtuale mappando gli indirizzi logici (virtuali) di ogni processo sui frame della RAM fisica.
Passo dopo Passo (Tabella a Pagine Multi-Livello stile x86)
- Suddivisione Indirizzo Logico (es. 32 bit, pagine da 4 KB):
- Indice Directory Pagine (10 bit) → seleziona PDE nella Page Directory (registro CR3).
- Indice Tabella Pagine (10 bit) → seleziona PTE nella Tabella Pagine.
- Offset Pagina (12 bit) → offset byte all'interno del frame da 4 KB.
- Ricerca Directory Pagine: la MMU legge la PDE. Se Present=0 → Page Fault (il SO carica la pagina dal disco).
- Ricerca Tabella Pagine: la MMU legge la PTE. Se Present=0 → Page Fault.
- Indirizzo Frame Fisico: la PTE contiene il Physical Page Number (PPN) (20 bit superiori).
- Combinazione: Indirizzo Fisico = (PPN << 12) | Offset Pagina.
- Cache TLB: la Translation Lookaside Buffer memorizza le mappature recenti (VPN → PPN) per saltare il page-walk in caso di hit (~99% hit rate).
Strutture Chiave
- CR3 (PDBR): indirizzo fisico della Directory Pagine del processo corrente.
- Flag PDE / PTE: Present, Read/Write, User/Supervisor, Write-Through, Cache-Disable, Accessed, Dirty, Global, NX (No-Execute).
- Handler Page Fault (SO): alloca un frame, aggiorna la PTE, riprende l'istruzione.
Estensioni
- PAE (36 bit): 3 livelli, pagine grandi da 2 MB/4 MB.
- x86-64 (4 livelli): PML4 → PDPT → PD → PT → pagina da 4 KB (virtuale 48 bit).
- ARMv8: simile a 4 livelli (TTBR0/1), granule da 4 KB/16 KB/64 KB.
Risultato: ogni processo vede uno spazio di indirizzamento contiguo da 0–4 GB (32 bit) o 0–256 TB (48 bit), isolato e più grande della RAM fisica.