Tabulka stránek
Tabulka stránek je v informatice označení pro datovou strukturu, kterou procesor při stránkování paměti používá pro překlad virtuálních adres na fyzické adresy. Zatímco procesorem vykonávané strojové instrukce používají virtuální adresy, při přístupu do elektronické paměti typu RAM je nutné použít skutečné fyzické adresy. Překlad adres z virtuálních na fyzické provádí v procesoru jednotka MMU. Tabulku stránek v paměti RAM, kterou je tento překlad řízen, vytváří jádro operačního systému.
Charakteristika
Při stránkování paměti je každému procesu vytvořen lineární virtuální adresní prostor, který začíná od adresy nula. Virtuální adresy jsou používány strojovými instrukcemi, avšak procesor při přístupu do paměti RAM musí použít skutečné fyzické adresy. Virtuální adresní prostor i fyzický prostor v RAM je rozdělen na stránky stejné délky (typicky 4 KiB). Pro překlad virtuálních adres na fyzické adresy je používána tabulka stránek, která je též uložena v paměti RAM (její umístění typicky specifikují speciální registry procesoru). Tabulku při překladu využívá jednotka procesoru, kterou označujeme jako MMU (anglicky memory management unit). Stránkování paměti odstraňuje nutnost relokace programu při jeho spuštění v prostředí víceúlohových systémů a odstraňuje též externí fragmentaci paměti a do určité míry i interní fragmentaci paměti. Tabulka stránek je využívána i pro další účely, jako je rozšíření virtuální paměti o místo na pevném disku, nastavení omezení pro přístup do paměti (jen pro čtení, i pro zápis) a podobně.
Proces překladu
Procesor obsahuje jednotku správy paměti (MMU), která ukládá naposledy použité mapování z tabulky stránek do cache zvané Translation Lookaside Buffer (TLB). Když je potřeba přeložit virtuální adresu na fyzickou, je TLB prohledána jako první. Pokud je nalezena shoda (TLB hit), fyzická adresa je vrácena a přístup do paměti může pokračovat. Pokud shoda není nalezena (tzv. TLB miss), je nutné vyhledat překlad adresy podle tabulky stránek a zjistit zda mapování existuje (Page Walk). Pokud mapování existuje, je zapsáno do TLB (hardwarové zpřístupnění paměti pomocí TLB) a strojová instrukce, která výpadek stránky způsobila, je znovu provedena. Další překlad je nalezen jako TLB hit a přístup do paměti bude pokračovat.
Výpadek stránky
Vyhledávání tabulky stránek může selhat ze dvou důvodů. První je, pokud nejsou k dispozici žádné překlady, které se zabývají touto adresou, což znamená, že se přistupuje do paměti na virtuální adresu, která je neplatná. K tomu obvykle dochází z důvodu chyb v programování a operační systém musí provést nějakou akci k řešení problému. V moderních operačních systémech se zašle signál segmentation fault na problematický program. Dále může vyhledávání tabulky stránek selhat, pokud stránka není ve fyzické paměti. To nastane v případě, že požadovaná stránka byla odebrána z fyzické paměti, aby se udělalo místo pro další stránky. V tomto případě je stránka swapována na sekundární lokální úložiště nacházející se na médiu, jako je pevný disk (toto sekundární lokální úložiště, nebo „záložní úložiště“ je často nazýváno jako „swap partition“, pokud se jedná o diskový oddíl nebo „swapfile“, nebo „stránkovací soubor“, pokud je to soubor). Když se tohle stane, tak stránky musí být z disku dány zpět do fyzické paměti. Když fyzická paměť není plná, tak se jedná se o jednoduchou operaci. Stránka je zapsána zpět do fyzické paměti, a tabulka stránek a TLB jsou aktualizovány a instrukčně restartovány. Stránkovací tabulky je třeba aktualizovat, aby byly označeny stránky, které byly dříve ve fyzické paměti a již tam nejsou. A dále označit stránky, které byly na disku a jsou nyní ve fyzické paměti. TLB je třeba také aktualizovat, včetně odstranění swapovacího souboru stránky.
Data tabulky stránek
Nejjednodušší systémy tabulek stránek často udržují rámec tabulky a stránku tabulky. Rámec tabulky obsahuje informace o tom, které rámce jsou mapovány. V pokročilejších systémech může rámcová tabulka obsahovat informace o adresním prostoru, který řeší stránky, statistické informace, nebo jiné informace. Stránkovací tabulka obsahuje mapování mezi virtuální adresou stránky a adresu fyzického rámce. Obsahuje také pomocné informace o stránce, jako present bit, dirty nebo modified bit, adresu místa nebo ID procesu. Sekundární ukládání, jako je ukládání na pevný disk, lze použít pro zvýšení fyzické paměti. Stránky mohou být stránkovány z fyzické paměti a pevného disku. Present bit nám ukazuje, jaké stránky jsou v současné době ve fyzické paměti, nebo na disku a ukazuje jak se chovají tyto různé stránky. Dirty bit umožňuje optimalizaci výkonu. Stránka na disku, která je stránkována do fyzické paměti je přečtená a následně stránkování není potřeba zapisovat zpět na disk, protože se stránka nezměnila. Nicméně, pokud stránka byla napsána až po jeho stránkování, bude nastaven dirty bit, což znamená, že stránka musí být zapsána zpět do záložního úložiště. Tato strategie vyžaduje, aby záložní úložiště ponechalo kopii stránky poté, co se stránkovalo do paměti. Není-li dirty bit použit, musí být záložní úložiště tak velké, jako okamžitá celková velikost všech odstránkovaných stránek v jakémkoliv momentě. Při použití dirty bitu budou vždy existovat některé stránky v obou fyzických pamětech a záložním úložišti. Adresový prostor nebo ID informace procesu jsou nezbytné k tomu, aby management virtuální paměti systému věděl, jaké stránky spojit s jakým procesem. Dva procesy mohou používat dvě stejné virtuální adresy pro různé účely. Stránkovací tabulky musí pro dva procesy podporovat různé virtuální paměťové mapování. To lze provést pomocí přiřazení dvou odlišných identifikátorů adresových map procesu, nebo pomocí ID procesů. Alternativou k označování položek záznamů tabulky stránek, je proces jedinečných identifikátorů. Ten může v tabulce stránek obsadit jinou virtuální paměť stránek pro každý proces tak, aby se v tabulce stránek stal součástí kontextu procesu.
Související články
Literatura
- Andrew S. Tanenbaum, Modern Operating Systems, ISBN 0-13-031358-0
- A. Silberschatz, P. B. Galvin, G. Gagne, Operating System Concepts, ISBN 0-471-69466-5
- CNE Virtual Memory Tutorial, Center for the New Engineer George Mason University, Page Tables, https://web.archive.org/web/20111022012609/http://cs.gmu.edu/cne/modules/vm/purple/ptable.html
- Art of Assembler, 6.6 Virtual Memory, Protection, and Paging, https://web.archive.org/web/20120218231434/http://webster.cs.ucr.edu/AoA/Windows/HTML/MemoryArchitecturea3.html
- Intel 64 and IA-32 Architectures Software Developer's Manuals, http://www.intel.com/products/processor/manuals/index.htm
- AMD64 Architecture Software Developer's Manual, http://www.amd.com/us-en/Processors/DevelopWithAMD/0,,30_2252_875_7044,00.html