Stránkování
Z Wikipedie, otevřené encyklopedie
Stránkování je technika adresace operační paměti, která umožňuje zobrazit virtuální paměťový prostor (tzv. virtuální paměť) do fyzického adresového prostoru operační paměti. Mapování paměťového prostoru se provádí po stránkách, stránky mají zpravidla stejnou velikost (např. 4kB). Alternativou ke stránkování je segmentace.
Obsah |
[editovat] Princip činnosti
Stránkování vyžaduje hardwarovou podporu, dnes přímo v procesoru, dříve i v nezávislém hardware. Tento hardware převádí mezi adresovými prostory s pomocí tabulky nebo složitější struktury, nejčastěji umístěné v paměti. Kromě adres obsahuje tabulka obvykle příznaky patřící k danému mapování, přinejmenším platnost daného záznamu.
K podpoře obvykle patří i mechanismus ošetření výjimečných stavů překladu: pokus o přístup k neplatné adrese paměti nebo narušení ochrany (např. pokus o zápis na adresu označenou jako jen pro čtení) je signalizován procesoru (nejčastěji jako přerušení), aby mohl být vyvolán obslužný program, který výjimečný stav vyřeší.
[editovat] Výhody stránkování
- sdílení částí fyzické paměti více procesy, např. paměti ROM a reentrantní části procesu (např. knihovny)
- oddělení adresových prostorů procesů (více bezpečnosti)
- zvýšení virtuální kapacity paměti odkládáním stránek na vnější paměť (disk)
- možnost odstraňování fragmentace alokované paměti
- není nutné provádět při startu programu relokaci - přinejmenším část programu může být na pevných virtuálních adresách
[editovat] Virtuální paměť
Virtuální paměť umožňuje rozšířit operační paměť o místo ve vnější paměti (obvykle na pevném disku), kam jsou odkládány právě nepoužívané stránky paměti. Tím dojde k uvolnění operační paměti RAM a zároveň k jejímu lacinému zvětšení.
Při použití virtuální paměti je rozšířena obsluha události přístupu na neplatnou adresu (takzvaný výpadek stránky) a příznak neplatnosti záznamu je doplněn o informaci, kde ve vnější paměti se stránka nachází (tato informace může být přímo v tabulce nebo v jiné struktuře). Když se strojová instrukce prováděná procesorem pokusí přistoupit na adresu, která není umístěna v paměti, obsluha výpadku stránky se podívá, zda požadovaná stránka není na disku, a pokud ano zajistí modul správy paměti operačního systému její zavedení do RAM a pokračování přerušeného procesu opětovným provedením strojové instrukce, která výpadek stránky způsobila.
- Podrobnější informace naleznete v článku Virtuální paměť.
[editovat] Nevýhody stránkování
- režie může prodloužit dobu přístupu ke stránce i v případě, že se nachází v paměti (přístup ke stránce odložené na vnější paměť bude pomalý vždy). Tento problém se řeší hardwarovou podporou stránkování s využitím asociativní cache, na i386 zvané TLB (Translation Lookaside Buffer), ve které jsou uchovány poslední používané lineární adresy a k nim odpovídající adresy fyzické.
[editovat] Stránkování na i386
Na procesoru architektury i386 je stránkování volitelná část hardwarového překladu adresy. Pokud je zapnuta, provádí se po segmentaci, tedy virtuální adresa (používaná v programu) se segmentací překládá na lineární adresu, která se stránkováním překládá na fyzickou adresu.
Stránkování se zapíná nastavením příslušného bitu v registru CR0.
Základní velikost stránky je 4KB. Kromě toho je možné používat stránky o velikosti 4MB, resp. 2MB po zapnutí PAE - physical adress extension, rozšíření fyzické paměti, přístupného od Pentia Pro. Stránkování spočívá v rozdělení 32-bitové lieární adresy na 3 části:
- offset ve stránce - 12 bitů
- index do tabulky stránek - 10 bitů, 9 při zapnutém PAE
- index do stránkovacího adresáře (záznam ukazuje na stránkovou tabulku) - 10 bitů, 9 při PAE
- (jen při PAE) - index do tabulky ukazatelů stránkových adresářů - 2 bity
Ukazatel na stránkovací adresář (ukazatele stránkových adresářů při PAE) je v registru CR3.
Každá stránka obsahuje příznak valid. Ten určuje zda je daná stránka skutečně ve fyzické paměti, nebo ne. Mezi další příznaky patří R/W (pouze pro čtení/pro čtení i zápis) a S/U (pouze pro operační systém/i pro aplikace). Pokud se program snaží přistoupit na stránku v rozporu s těmito příznaky (tj. jakýkoliv přístup na nevalidní stránku, zápis do stránky pouze pro čtení, přístup do stránky vyhrazené pro operační systém z aplikační úrovně procesoru), dojde k výjimce (interní přerušení procesoru) zvané výpadek stránky (anglicky page fault). V případě, že je daná stránka na disku (viz virtuální paměť), obslužný program přerušení ji najde a zavede ji do paměti.
Lineární adresový prostor každého procesu je 4GB, ale obvykle je většina tohoto prostoru prázdná. Pouze menší část obsahuje skutečné stránky paměti nebo alespoň informace odkud danou stránku načíst (např. ze swapu na disku).
[editovat] Přepínání paměťových bank
Přepínání paměťových bank je starší technika umožňující za podpory hardware mapovat do paměťového prostoru více paměťových rámců. To umožňuje při omezeném paměťovém prostoru využít více paměti. Příkladem je EMS (rozšířené paměť) na počítačích IBM PC/XT a PC/AT kompatibilních, která je realizovaná přídavnou paměťovou kartou nebo emulátorem rozšířené paměti EMM386 na počítačích s procesorem i386 a vyšší. U starších 8bitových počítačů se tato technika také využívala, do paměťového prostoru 64kB se pomocí této techniky mapovala až několikanásobně větší paměť než je paměťový rozsah procesoru (viz Didaktik Gama a ZX Spectrum 128+).
Hlavní rozdíl mezi stránkováním a přepínáním paměťových bank (na většině počítačových systémů) spočívá v tom, že stránkování je pro aplikační procesy transparentní (neviditelné) - obsluhu stránkování zajišťuje většinou operační systém na rozdíl od přepínání paměťových bank, kde si přepnutí bank zajišťuje sama aplikace - většinou voláním funkcí API anebo u jednodušších systémů zápisem hodnoty na výstupní bránu (port).

