Translation Lookaside Buffer

Da Wikipedia, l'enciclopedia libera.


Il Translation Lookaside Buffer (TLB) è un buffer, cioè una memoria tampone (o, nelle implementazioni più sofisticate, una cache nella CPU), che l'MMU (Memory Management Unit) usa per velocizzare la traduzione degli Indirizzi Virtuali. Il TLB possiede un numero fisso di elementi della Page Table, la quale viene usata per mappare gli Indirizzi Virtuali in Indirizzi Fisici. La Memoria virtuale è lo spazio visto da un processo che può essere più grande della memoria fisica (reale). Questo spazio è catalogato in pagine di dimensioni prefissate. Generalmente solo alcune pagine vengono caricate nella memoria fisica in zone dipendenti dalla politica di Page Replacement. La Page Table (generalmente caricata in memoria) tiene traccia di dove le pagine virtuali sono caricate nella memoria fisica. Il TLB è una cache della Page Table, cioè solamente un sottoinsieme del suo contenuto viene memorizzato.

Funzionamento[modifica | modifica wikitesto]

Il buffer è tipicamente una memoria di tipo associativo (Content addressable memory, CAM) nel quale la chiave di ricerca è l'indirizzo virtuale e il risultato della ricerca è un indirizzo reale o fisico (che spesso non sono la stessa cosa). Se la ricerca produce un risultato, il valore tradotto è presente nel CAM e il risultato viene utilizzato. Se non viene prodotto nessun risultato, la traduzione procede nella ricerca della page table, che richiede molti più cicli per essere completata, specialmente quando la tabella è mantenuta in una memoria esterna.

Varianti e ottimizzazioni[modifica | modifica wikitesto]

Gli elementi contenuti nel TLB fanno riferimento agli indirizzi di memoria fisica. Il TLB può risiedere tra la CPU e la cache o tra la cache e la memoria primaria. Nel primo caso, la cache è indirizzata utilizzando l'indirizzamento fisico, nel secondo caso l'indirizzamento virtuale. Se la cache è indirizzata virtualmente, le richieste sono inviate direttamente dalla CPU alla cache, la quale accede al TLB se necessario. Se la cache è fisicamente indirizzata, la CPU effettua una ricerca nel TLB per ogni operazione in memoria, e il risultante indirizzo fisico è inviato alla cache. Entrambe le soluzioni possiedono pregi e difetti. La cache indirizzata virtuale non richiede l'accesso al TLB ma deve essere, in ambiente multiprocessing, invalidata ad ogni context switch (cambiamento di processo).

Un'ottimizzazione comune per la cache a indirizzamento fisico consiste nell'effettuare la ricerca nel TLB in parallelo con l'accesso alla cache. I bit meno significativi di ogni indirizzo virtuale (per esempio, in un sistema a memoria virtuale con pagine di 4kB, i 12 bit meno significativi di un indirizzo virtuale) non cambiano nella traduzione dell'indirizzo virtuale-fisico. Per ogni accesso alla cache, vengono effettuate due operazioni: l'inserimento nella cache dei dati, e successivamente un confronto del tag della linea individuata nella cache. Se la cache è strutturata in modo da poter essere indicizzata usando solo i bit che non cambiano durante la traduzione, può effettuare la sua operazione di indicizzazione mentre il TLB traduce i bit più significativi dell'indirizzo. A questo punto, l'indirizzo tradotto passa dal TLB alla cache, che confronta il tag per determinare se l'accesso è stato effettuato (hit) o è stato mancato (miss).

Nel secondo caso, possono essere utilizzati due differenti schemi nelle architetture di calcolatori moderne. Con la gestione hardware del TLB, la stessa CPU scorre le page table per verificare se è presente una voce per il rispettivo indirizzo virtuale di memoria. Se presente, la voce viene memorizzata all'interno del TLB e viene rieffettuato l'accesso al TLB (questo può diventare complicato a seconda di quante volte viene restituito un miss del TLB). Se non c'è nessun riscontro nella page table, occorre un'eccezione di page fault, e il sistema operativo preleva il dato richiesto dalla memoria virtuale e lo trasferisce nella cache. Con la gestione software del TLB, un TLB miss genera un'eccezione e il sistema operativo deve effettuare la ricerca nelle page table e poi la traduzione via software. Il sistema operativo carica la traduzione nel TLB e riavvia il programma dall'istruzione che aveva causato il TLB miss.

Bibliografia[modifica | modifica wikitesto]

  • (EN) David A. Patterson e John L. Hennessy. Computer Architecture: A Quantitative Approach, 3ª edizione, Morgan Kaufmann, 2003.

Voci correlate[modifica | modifica wikitesto]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica