Tabulka stránek je datová struktura používaná systémem virtuální paměti v operačním systému počítače k uložení mapování mezi virtuální adresou a fyzickou adresou . Virtuální adresy jsou používány běžícím procesem , zatímco fyzické adresy jsou používány hardwarem , přesněji řečeno podsystémem RAM . Tabulka stránek je klíčovou součástí překladu virtuálních adres , která je vyžadována pro přístup k datům v paměti.
V operačních systémech, které využívají virtuální paměť, vzniká iluze, že jakýkoli proces má přístup k lineární paměti o stejné velikosti, jako je adresní prostor procesu [1] . Fyzicky je paměť každého procesu rozdělena na stránky (v systému se stránkováním ) nebo segmenty (v systému se segmentovanou virtuální pamětí), které mohou být rozptýleny v různých oblastech fyzické paměti nebo mohou být přesunuty do jiného úložiště, obvykle na pevný disk nebo jednotku SSD .
Moderní procesory používají koncepty fyzické paměti a virtuální paměti : běžící procesy používají virtuální adresy a když instrukce požaduje přístup do paměti, procesor přeloží virtuální adresu na fyzickou adresu pomocí asociativní překladové vyrovnávací paměti (TLB) a/nebo tabulky stránek.
Když proces přistupuje k datům v paměti, musí operační systém mapovat virtuální adresu používanou procesem na adresu fyzické paměti, kde jsou data uložena. V tabulce stránek procesu ukládá operační systém mapování virtuálních adres na fyzické adresy. Každý záznam tabulky se také nazývá "záznam tabulky stránek" (PTE) [2] .
Jednotka správy paměti (MMU) CPU uchovává mezipaměť naposledy použitých mapování z tabulky stránek operačního systému. To se nazývá překladová asociační vyrovnávací paměť ( TLB ), což je asociační mezipaměť.
Když je třeba převést virtuální adresu na fyzickou adresu, nejprve se vyhledá TLB. Pokud je nalezena shoda (tzv. „ TLB hit “ ), vrátí se fyzická adresa a přístup do paměti může pokračovat. Pokud však neexistuje žádná shoda (nazývaná „ chyba TLB “), pak buď modul správy paměti nebo obslužný program chyb TLB operačního systému vyhledá shodu adresy v tabulce stránek, aby zjistil, zda existuje shoda (tzv . " ). Pokud mapování existuje, je zapsáno zpět do TLB (to se musí provést, protože hardware přistupuje k paměti přes TLB v systému virtuální paměti) a aktuální instrukce je restartována (což se může také stát paralelně).
Vyhledávání v tabulce stránek může selhat ze dvou důvodů:
Když fyzická paměť není plná, jedná se o jednoduchou operaci: stránka se zapíše zpět do fyzické paměti, tabulka stránek a TLB se aktualizují a instrukce se restartuje. Když je však fyzická paměť plná, musí být jedna nebo více stránek ve fyzické paměti odstráněno, aby se uvolnilo místo pro požadovanou stránku. Tabulku stránek je třeba aktualizovat tak, aby 1) všimněte si, že stránky, které byly dříve ve fyzické paměti, tam již nejsou, a 2) všimněte si, že stránka, která byla na disku, je nyní ve fyzické paměti. Musíte také aktualizovat TLB, včetně odstranění nenačtené stránky z něj a restartování instrukce.
Nejjednodušší systémy tabulek stránek často používají tabulku rámců a tabulku stránek. Tabulka rámců obsahuje informace o tom, které rámce jsou zobrazeny. V pokročilejších systémech může tabulka rámců obsahovat také informace o tom, do kterého adresního prostoru stránka patří, statistické informace nebo jiné referenční informace.
Tabulka stránek obsahuje mapování mezi adresou virtuální stránky a adresou fyzického rámce. K dispozici jsou také doplňkové informace o stránce, jako je například aktuální bit, špinavý nebo upravený bit, adresní prostor nebo ID procesu.
Sekundární úložiště, jako je pevný disk, lze použít ke zvýšení fyzické paměti. Stránky lze stránkovat z fyzické paměti a disku. Aktuální bit může indikovat, které stránky jsou aktuálně ve fyzické paměti nebo na disku, a může indikovat, jak zacházet s těmito různými stránkami, tj. zda načíst stránku z disku a zda stránkovat jinou stránku ve fyzické paměti.
Špinavý bit umožňuje optimalizovat výkon. Stránka na disku, která je stránkována do fyzické paměti, poté přečtena a následně znovu stránkována, nemusí být zapsána zpět na disk, protože se stránka nezměnila. Pokud však byla stránka zapsána poté, co byla vyměněna, bude nastaven její nečistý bit, což znamená, že stránka by měla být zapsána zpět do záložního úložiště. Tato strategie vyžaduje, aby si záložní úložiště ponechalo kopii stránky poté, co byla přesunuta do paměti. Když není použit nečistý bit, měla by se záloha rovnat pouze okamžité celkové velikosti všech stránek, které byly v daném okamžiku odstráněny. Při použití nečistého bitu budou některé stránky vždy existovat ve fyzické paměti i v záložním úložišti.
Operační systémy, které nejsou operačními systémy s jedním adresním prostorem, potřebují adresní prostor nebo informace o ID procesu, aby systém správy virtuální paměti věděl, které stránky jsou přidruženy ke kterému procesu. Dva procesy mohou používat dvě identické virtuální adresy pro různé účely. Tabulka stránek musí poskytovat různá mapování virtuální paměti pro dva procesy. To lze provést přiřazením různých ID map adres dvěma procesům nebo pomocí ID procesů. Přidružení ID procesů ke stránkám virtuální paměti může také pomoci při výběru stránek, které se mají na stránce zobrazit, protože stránky spojené s neaktivními procesy, zejména procesy, jejichž hlavní kódová stránka byla vyměněna, je méně pravděpodobné, že budou potřeba okamžitě než stránky vlastněné aktivními procesy.
Jako alternativa k označování položek tabulky stránek jedinečnými ID procesů může samotná tabulka stránek zabírat různé stránky virtuální paměti pro každý proces, takže tabulka stránek se stává součástí kontextu procesu. V takové implementaci lze tabulku stránek procesu odstránit, kdykoli proces již není v paměti.
Adresa použitá ve strojovém kódu, tj. hodnota ukazatele, se nazývá "virtuální adresa".
Adresa, kterou procesor umístí na sběrnici, se nazývá „lineární adresa“ (která se později převede na fyzickou adresu).
Záznam v tabulce stránek obvykle obsahuje následující informace:
Počet záznamů v jedné tabulce je omezený a závisí na velikosti záznamu a velikosti stránky. Používá se víceúrovňová organizace tabulek, často 2 nebo 3 úrovně, někdy 4 úrovně (pro 64bitové architektury).
V případě 2 úrovní se používá "katalog" stránek, který uchovává záznamy směřující na fyzické adresy tabulek stránek. Tabulky obsahují záznamy, které ukazují na stránky dat.
Při použití 3úrovňové organizace je přidán nadadresář, který obsahuje položky, které ukazují na více adresářů.
Horní bity virtuální adresy označují číslo záznamu v adresáři, prostřední číslo záznamu v tabulce, spodní bity (adresa uvnitř stránky) jdou na fyzickou adresu bez překladu.
Formát záznamů tabulek, jejich velikost, velikost stránky a organizace tabulek závisí na typu procesoru a někdy také na jeho režimu provozu.
Historicky x86 používal 32bitové PTE, 32bitové virtuální adresy, 4KB stránky, 1024 záznamů tabulek, dvouúrovňové tabulky. Horních 10 bitů virtuální adresy je číslo záznamu v adresáři, dalších 10 je číslo záznamu v tabulce, spodních 12 je adresa v rámci stránky.
Počínaje Pentiem Pro podporuje procesor 4 MB stránek. Aby však systém a na něm spuštěné programy mohly používat stránky této velikosti, musí být správně povolena technologie stránek o velikosti 4 MB (obrovské stránky) a aplikace musí být konfigurována tak, aby stránky této velikosti používala.
Procesor x86 v režimu PAE (Physical Address Extension) a v režimu x86_64 (dlouhý režim) používá 64bitové PTE (z nichž se ve skutečnosti nepoužívají všechny bity fyzické adresy, od 36 v PAE po 48 u některých x86_64), 32bitové virtuální adresy, stránky o velikosti 4 kB, 512 položek v tabulkách, tříúrovňové tabulky se čtyřmi adresáři a čtyřmi položkami nadadresáře. Horní 2 bity virtuální adresy jsou číslo záznamu v nadadresáři, dalších 9 bitů je v adresáři, dalších 9 bitů je v tabulce. Fyzická adresa adresáře nebo nadadresáře je načtena do jednoho z řídicích registrů procesoru .
Při použití PAE se použijí 2 MB stránky místo 4 MB velkých stránek. Viz také PSE .
Na architektuře x86_64 je možné použít stránky o velikosti 4 kilobajty (4096 bajtů), 2 megabajty a (u některých AMD64) 1 gigabajty.
Pokud nelze přístup do paměti přeložit přes TLB, pak mikrokód procesoru přistoupí k tabulkám stránek a pokusí se načíst PTE odtud do TLB. Pokud problémy přetrvávají i po takovém pokusu, procesor provede speciální přerušení nazývané „ chyba stránky “ (chyba stránky). Obslužná rutina tohoto přerušení se nachází v podsystému virtuální paměti jádra OS.
Některé procesory (MIPS) nemají mikrokód pro přístup k tabulce a generují chybu stránky ihned po neúspěšném vyhledávání v TLB, přístup k tabulce a její interpretace je již přiřazena obslužné rutině poruchy stránky. Tím se odstraní požadavek, aby tabulky stránek odpovídaly pevně zakódovanému formátu na úrovni hardwaru.
Příčiny selhání stránky ( chyba stránky ):
Obsluha chyb jádra může načíst požadovanou stránku ze souboru nebo z odkládací oblasti (viz swapování ), může vytvořit kopii stránky pouze pro čtení, která je k dispozici pro zápis, nebo může vyvolat výjimku (podle UNIXu - signál SIGSEGV ) v tomto procesu.
Každý proces má svou vlastní sadu tabulek stránek. Registr adresáře stránek se znovu načte při každém přepnutí kontextu procesu . Je také nutné resetovat část TLB, která se na tento proces vztahuje.
Ve většině případů je jádro operačního systému umístěno ve stejném adresním prostoru jako procesy a jsou pro něj vyhrazeny horní 1-2 gigabajty z 32bitového adresního prostoru každého procesu. To se provádí, aby se zabránilo přepínání tabulek stránek při vstupu a výstupu z jádra. Stránky jádra jsou označeny jako nepřístupné pro kód uživatelského režimu.
Oblast paměti obsahující jádro je často identická pro všechny procesy, ale některé její podoblasti (například oblast jádra Windows obsahující grafický subsystém a ovladač videa) se mohou pro různé skupiny procesů (relací) lišit.
Protože paměť jádra je pro všechny procesy stejná, není třeba po přepnutí procesu znovu načítat odpovídající TLB. Pro tuto optimalizaci podporuje x86 příznak „global“ na PTE.
V bibliografických katalozích |
---|