Translation Lookaside Buffer

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Translation Lookaside Buffer (zkratka TLB) je v informatice speciální hardwarová cache v procesoru, přesněji jeho MMU, která má za úkol urychlit a v některých architekturách vůbec umožnit překlad virtuálních adres na fyzické. TLB obsahuje taková mapování, která byla nedávno použita a u kterých je (tedy) předpoklad použití v bezprostřední budoucnosti. A pokud architektura nepodporuje zároveň i jiný hardwarový způsob překladu virtuálních adres, musí také obsahovat mapování nezbytně nutná pro běh operačního systému, typicky kód handlerů přerušení a data nutná pro jejich funkci.

Charakteristika[editovat | editovat zdroj]

Hardwarově je obvykle TLB implementována jako obsahem adresovatelná paměť (CAM, jinak též asociativní paměť). Vyhledávací klíč této CAM je prefix virtuální adresy odpovídající velikostem adresového prostoru a stránky (pro plně 32bitový virtuální adresový prostor a 4kiB stránku je to prvních 20 bitů), případně doplněný o identifikátor adresního prostoru (v premptivním multitaskingu tak není nutné při přepnutí kontextu zahodit celý obsah TLB), a výsledkem vyhledávaní je fyzická adresa začátku mapovaného rámce. K ní se pak interně v MMU přičte zbytek virtuální adresy jako offset, čímž vznikne fyzická adresa požadovaného místa v paměti. Protože vyhledávání v této paměti je realizováno přímo na úrovni logických obvodů, je operace velmi rychlá.

Pokud se mapování v TLB nachází, je výsledný stav nazýván TLB hit a algoritmus hledání fyzické adresy okamžitě vrací mapovanou hodnotu, která je bez nutnosti zásahu dalších komponent použita pro adresování na sběrnici. Pokud požadovaná adresa v TLB uložena není, jde o tzv. TLB miss a překlad adresy pokračuje prohledáním stránkovací tabulky (tzv. page walk) nebo jiné paměťové struktury, což je v porovnání porovnání s rychlostí TLB vždy pomalý postup. A to díku faktu, že tato akce zpravidla vyžaduje čtení z několika míst v paměti (typicky z víceúrovňové stránkovací tabulky). Poté, co je fyzická adresa takto získána, je mapování virtuální adresy na fyzickou uloženo do TLB. To při příštím přístupu ke stejné stránce urychlí překlad adresy. Velikost TLB je však díky její hardwarové složitosti a tudíž i ceně omezená a déle nepoužívané záznamy jsou přepisovány novějšími.

Prakticky všechny dnešní procesory obsahují TLB. U architektury IA-32 nebo x86-64 šetří „pouze“ hardwarové prohledávání víceúrovňové struktury tabulek v paměti. V okamžiku, kdy zde dojde k TLB miss, procesor sám, bez zásahu opračního systému, provede page walk, pokusí se najít správné mapování a provede update TLB. V některých jiných architekturách (např. MIPS) je hardwarově implementován pouze TLB a page walk pak musí být implementován softwarově v jádře operačního systému. V případě TLB miss zde tedy dojde k vyvolání výjimky a správné mapování musí nalézt příslušný handler přerušení, provést opravu TLB a restartovat instrukci, která výjimku vyvolala. Díky tomu je každý TLB miss na těchto architekturách velmi drahou operací.

Z předchozího popisu vyplývá, že rychlost překladu adres a tím i běhu programu je velmi závislá na tom, jak často dojde k TLB hitu. Kvůli tomu jsou prováděny optimalizace při překladu programu, aby se zvýšila jeho lokalita (ve smyslu opakované použití stejné paměti).