Téma 8 Virtuální paměť Obsah. Principy virtuální paměti. Stránkování na žádost. Politika náhrad stránek a algoritmy výběru oběti. Algoritmus LRU a jeho aproximace. Přidělování prostoru procesům, problém výprasku 6. Pracovní množiny 7. Otázka velikosti stránek ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť
Principy virtuální paměti Virtuální paměť Separace LAP a FAP Ve FAP se nacházejí pouze potřebné části programů a dat LAP může být větší než FAP Adresní prostory lze sdílet Lze efektivněji vytvářet procesy Častá synonyma virtuální paměť logická paměť, LAP reálná paměť fyzická paměť, FAP ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť
Techniky stránkování Techniky implementace stránkování na žádost (Demand Paging), segmentace na žádost (Demand Segmentation) Líné metody, nedělá nic dopředu stránkování při spuštění Program je celý vložen do paměti při spuštění předstránkování (Prepaging) Nahrává stránku, která bude pravděpodobně brzy použita přednahrání (Swap prefetch) Při výpadku stránky nahraj i sousední stránky čištění (Pre-cleaning) Změněné rámce jsou uloženy na disk v době, kdy systém není vytížen ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť
Virtuální paměti je větší než reálná... ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť
Procesy ve virtuální paměti Při startu procesu zavede OS do FAP pouze tu část programu (LAP) kam se iniciálně předává řízení Pak dochází k dynamickým výměnám částí LAP ve FAP po stránkách či po segmentech na žádost, tj. až když je jejich obsah referencován Pro překlad LA FA Tabulkou stránek (PT) nebo tabulkou segmentů (ST) Každá položka v PT/ST obsahuje příznak indikující přítomnost příslušné stránky (segmentu) ve FAP příznak valid/invalid Sadu stránek procesu, které jsou ve FAP nazýváme rezidentní množinou (resident set) Odkaz mimo rezidentní množinu způsobuje přerušení výpadkem stránky/segmentu (page /segment fault ) Proces, jemuž chybí stránka, označí OS jako pozastavený OS spustí I/O operace k zavedení chybějící stránky do FAP (možná bude muset napřed uvolnit některý rámec, viz politika nahrazování dále) Během I/O přenosu běží jiné procesy; po zavedení stránky do paměti se aktualizuje tabulka stránek, náš proces je označen jako připravený a počká si na CPU, aby mohl pokračovat ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť
Logická paměť procesů Obvyklá skladba logické paměti jednoho procesu Sdílení virtuální paměti Zásobník Zásobník Zásobník Halda (heap) Halda (heap) Data Halda (heap) Sdílená knihovna Data Sdílené stránky Sdílená knihovna Data Kód Kód Kód ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť 6
Princip lokality Odkazy na instrukce programu a data tvořívají shluky Vzniká časová lokalita a prostorová lokalita Provádění programu je s výjimkou skoků a volání podprogramů sekvenční Programy mají tendenci zůstávat po jistou dobu v rámci nejvýše několika procedur Většina iterativních postupů představuje malý počet často opakovaných instrukcí, Často zpracovávanou strukturou je pole dat nebo posloupnost záznamů, které se nacházejí v sousedních paměťových lokacích Lze pouze dělat odhady o částech programu/dat, která budou potřebná v nejbližší budoucnosti Hlavní paměť se může zaplnit V takovém případě, něco umístit do FAP znamená, že nejdříve musíme něco z FAP odložit ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť 7
Stránkování na žádost Kdy stránku zavádět? (Fetch policy) Při překladu LA FA se zjistí, že stránka není ve FAP (bit Valid/Invalid v položce PT) Pokud je invalid, generuje se přerušení typu výpadek stránky Při inicializaci procesu jsou všechny bity nastaveny na invalid Základní politika: Vlastní stránkování na žádost (Demand paging) Stránka se zavádí jako důsledek přerušení typu výpadek stránky Výhoda: Málo I/O operací Nevýhoda: Na počátku běhu procesu se tak tvoří série výpadků stránek a proces se pomalu rozbíhá ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť 8
Stránkování na žádost vylepšení Předstránkování (Pre-paging) Sousední stránky LAP obvykle sousedí i na sekundární paměti, a tak je jich zavádění poměrně rychlé bez velkých přejezdů diskových hlaviček Platí princip časové lokality proces bude pravděpodobně brzy odkazovat blízkou stránku v LAP Zavádí se proto najednou více stránek Vhodné zejména při inicializaci procesu Výhoda: Menší počet výpadků stránek Nevýhoda: Často se zavádějí i nepotřebné stránky Čištění (Pre-cleaning) Pokud má počítač volnou kapacitu na I/O operace, lze spustit proces kopírování změněných stránek na disk Výhoda: uvolnění stránky je rychlé, pouze nahrání nové stránky Nevýhoda: Může se jednat o zbytečnou práci, stránka se ještě může změnit ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť 9
v/i (Valid/Invalid) bit v tabulce stránek (PT) Stránka 0 Stránka Stránka Stránka Stránka Stránka Logická paměť Čísla rámců 0 6 7 0 9 0 0 v v v i v v i i Tabulka stránek v/i bity 0 6 7 8 9 Stránka 0 Stránka Stránka Stránka Stránka. n ABOSS (J. Lažanský) verze: Podzim 00 Fyzická paměť Virtuální paměť 0
Stránkování Politika nahrazování Co činit, pokud není volný rámec ve FAP Např. v okamžiku zvýšení stupně paralelismu (nový proces) Musí se vyhledat vhodná stránka pro náhradu (tzv. oběť) Politika nahrazování (Replacement Policy) někdy též politika výběru oběti Kterou stránku obětovat a vyhodit z FAP? Kritérium optimality algoritmu: minimalizace počtu (či frekvence) výpadků stránek Určení oběti: Politika nahrazování říká, jak řešit problémy typu Kolik rámců procesu přidělit? Kde hledat oběti? Jen mezi stránkami procesu, kterému stránka vypadla nebo lze vybrat oběť i mezi stránkami patřícími ostatním procesům? Některé stránky nelze obětovat Některé stránky jsou zamčené, tj. neodložitelné, typicky V/V vyrovnávací paměti, řídicí struktury OS,... Je-li to třeba, musí se rámec vypsat na disk ( swap out ) Nutné, pokud byla stránka od svého předchozího swap in modifikována. K tomu účelu je v řádku PT tzv. dirty (modified) bit, který je automaticky ABOSS (J. Lažanský) verze: Podzim 00 (hardwarově) nastavován při zápisu do stránky (rámce). Virtuální paměť
Algoritmy výběru oběti Požadujeme minimální frekvenci výpadků stránek Volba vhodného algoritmu Algoritmus se vyhodnocuje tak, že se pro zadanou posloupnost referencí na stránky (tzv. řetězec referencí) se modeluje a počítá množství výpadků stránek při daném počtu rámců Pro naše ukázky použijeme řetězec referencí,,,,,,,,,,, Očekávané chování: kvalitativní graf Počet výpadků stránky 0 8 6 0 ABOSS (J. Lažanský) verze: Podzim 00 8 6 0 0 6 Počet rámců Virtuální paměť
Virtuální paměť ABOSS (J. Lažanský) verze: Podzim 00 Algoritmus First-In-First-Out (FIFO) rámce (ve FAP mohou být až stránky) rámce (ve FAP mohou být až stránky) Beladyho anomálie (oproti očekávání: více rámců více výpadků) FIFO jednoduché, avšak neefektivní I staré stránky se používají často 9 výpadků Reference: Výpadky tučně Obsahy rámců Číslo rámce 0 výpadků Reference: Výpadky tučně Obsahy rámců Číslo rámce
Optimální algoritmus Oběť stránka, která bude odkazována ze všech nejpozději (tj. po nejdelší dobu se do ní odkaz nepovede) Budoucnost však neznáme lze jen přibližně predikovat Lze užít jen jako porovnávací standard pro ostatní algoritmy Příklad: rámce Díky zadanému řetězci referencí známe budoucnost Reference: Číslo rámce Obsahy rámců 6 výpadků (Lepšího výsledku dosáhnout nelze) ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť
Algoritmus LRU (Least Recently Used) Predikce založená na nedávné historii Předpoklad: Stránka, která nebylo dlouho odkazována, nebude odkazována ani v blízké budoucnosti Oběť stránka, která nejdelší dobu nebyla odkazována LRU se považuje za nejlepší aproximaci optimálního algoritmu Příklad: rámce Reference: Číslo rámce Obsahy rámců Výpadky tučně 8 výpadků FIFO 0 výpadků; optimální algoritmus 6 výpadků ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť
Algoritmus LRU implementace Řízení hodinami Ke každé stránce (rámci) je hardwarově připojen jeden časovací registr, do nějž se při přístupu do stránky okopírují systémové hodiny. Při hledání oběti se použije stránka s nejstarším časovým údajem Přesné, ale náročné jak hardwarově tak i softwarově prohledávání časovacích registrů Zásobníková implementace Používá se obousměrně vázaný zásobník čísel referencovaných stránek Při referenci přesune číslo stránky na vrchol zásobníku Při určování oběti se nemusí prohledávat, oběť je na dně zásobníku Přesun na vrchol zásobníku je velmi náročný a hardwarově obtížně řešitelný, softwarové řešení nepřichází v úvahu Nutno dělat při každém přístupu do paměti! ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť 6
Aproximace algoritmu LRU Příznak přístupu (Access bit, reference bit) a-bit Spojen s každou stránkou, po swap-in = 0, při referenci rámce hardwarově nastavován na Jako oběť se volí stránka s a = 0 (existuje-li). Algoritmus druhá šance Používá a-bit, FIFO seznam zavedených stránek a tzv. mechanismus hodinové ručičky Každá reference rámce přidá život Každé ukázání hodinové ručičky způsobí, že rámec ztratí jeden život Obětí se stane stránka, na niž ukáže hodinová ručička a rámec nemá žádný život, který by mohl ztratit Fakticky FIFO, avšak z výběru oběti se vynechává stránka aspoň jednou referencovaná od posledního výpadku ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť 7
H/ A/0 Algoritmus Druhá šance B/ Při výpadku stránky se zkoumá rámec, na nějž ukazuje ručička. Akce závisí na hodnotě a-bitu: a=0: vezmi tuto stránku jako oběť G/ F/0 D/0 C/ a=: vynuluj a, ponechej stránku v paměti a posuň ručičku o pozici dále na další stránku aplikuj tatáž pravidla E/ Numerické simulace chování tohoto algoritmu ukazuje, že je velmi blízký opravdovému LRU ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť 8
Modifikace aproximovaného LRU Modifikovaná druhá šance NRU not recently used Používá vedle a-bitu i bit modifikace stránky (dirty bit, d-bit) Časovač pravidelně maže a-bit, proto je možná stránka s nastaveným d-bitem a nulovým a-bitem Pořadí výběru (da): 00, 0, 0, Priorita d-bitu šetří nutnost výpisu modifikované stránky na disk Stárnutí (aging) a-bit je v rámci zvoleného časového okna pravidelně ukládán a staré hodnoty a-bitu jsou posouvány Časové okno omezeno HW architekturou Pokud je historie přístupu ke stránce {0,0,,0,}, pak to odpovídá číslu (000) Nejmenší hodnota značí stránku, která byla použita nejpozději ve snímaném časovém okně ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť 9
Čítací algoritmy Čítač referencí Ke každému rámci je přiřazen čítač Při swap-in se nuluje S každou referencí rámce se obsah čítače inkrementuje Algoritmus LFU (Least Frequently Used) obětí je stránka s nejmenší hodnotou čítače (nejméně často odkazovaná stránka) Algoritmus MFU (Most Frequently Used) obětí je stránka s největší hodnotou čítače Zdánlivě podivné, avšak myšlenka je taková, že stránka s nejmenším čítačem byla pravděpodobně právě zavedena do paměti (v souvislosti s pre-pagingem ) a ještě nestačila být referencována ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť 0
Přidělování rámců procesům Lokální nahrazování Proces má pevný počet rámců a stránka se nahrazuje z jeho množiny rámců Globální nahrazování Proces může použít libovolný rámec paměti Principy přidělování Pevné přidělování Procesu je přidělen pevný počet rámců (buď zcela fixně, nebo úměrně velikosti jeho LAP) Prioritní přidělování Procesy s vyšší prioritou dostanou větší počet rámců, aby běžely rychleji Způsobí-li proces výpadek, je mu přidělen rámec dosud patřící procesu s nižší prioritou ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť
Přidělování rámců procesům () Obvyklé politiky Pevný počet rámců Podhodnocení potřebného počtu rámců způsobí velkou frekvenci výpadků Nadhodnocení má za následek snížení stupně paralelismu Proměnný počet rámců přidělovaných globálně (tj. z rámců dosud patřících libovolnému procesu) Snadná a klasická implementace, užíváno mnoha OS (UNIXy) Nebezpečí výprasku (thrashing) mnoho procesů s malým počtem přidělených rámců mnoho výpadků Proměnný počet rámců přidělovaných lokálně (tj. z rámců patřících procesu, který způsobil výpadek) Tzv. pracovní množiny (working sets) průběžně se zjišťuje posloupnost odkazů na stránky a na základě této historie se určuje způsob výběru obětí Velmi vhodná technika, jen je třeba průběžně sledovat paměťové potřeby jednotlivých procesů a přidělovat jim odpovídající počet rámců ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť
Problém výprasku, Thrashing Jestliže proces nemá v paměti dost stránek, generuje výpadky stránek velmi často nízké využití CPU OS má dojem, že může zvýšit stupeň multiprogramování, protože se stále se čeká na dokončení V/V operací (odkládání a zavádění stránek) Tak se dostávají do systému další procesy a situace se zhoršuje Thrashing počítač nedělá nic jiného než výměny stránek Využití CPU ABOSS (J. Lažanský) verze: Podzim 00 Stupeň multiprogramování Virtuální paměť
Jak reálně řídit virtuální paměť? Kolik rámců dávat procesu k jeho běhu? Model pracovní množiny procesu P i (working set) WS i Množina stránek, kterou proces referencoval při posledních n přístupech do paměti (n ~ 0.000 tzv. okno pracovní množiny) WS i se v čase mění Pracovní množina je aproximace prostorové lokality procesu Jak to ale určovat? Při každém přerušení od časovače lze např. sledovat a-bity stránek procesu, nulovat je a pamatovat si jejich předchozí hodnoty. Jestliže a-bit bude nastaven, byla stránka od posledního hodinového tiku referencována a patří do WS i Časově náročné, může interferovat s algoritmem volby oběti stránky, avšak účelné a často používané Pokud suma všech WS i (počítaná přes všechny procesy) převýší kapacitu dostupné fyzické paměti, vzniká výprask (thrashing) Ochrana před vznikem výprasku např. jeden proces se pozastaví ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť
Model pracovní množiny (working set) Implementace (aproximace) Pomocí časovače a a-bitů jednotlivých stránek Např. pro n=0 000: Časovač přerušuje každých.000 časových jednotek O každé stránce se v paměti evidují bity Při přerušení se okopírují a-bity do evidenční tabulky a a-bit 0 Je-li aspoň jeden bit v položce evidenční tabulky =, stránka je ve WS Možné zpřesnění: O každé stránce 0 bitů, přerušení každých 000 časových jednotek Větší režie paměti, častější úprava evidenční tabulky ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť
Velké stránky Malý počet výpadků Velká vnitřní fragmentace Pokud délka stránky je větší než délka programu, vše je ve FAP a není potřeba žádná virtualizace ABOSS (J. Lažanský) verze: Podzim 00 Otázka velikosti stránek Malé stránky Velký počet malých stránek Stránka se často najde v paměti málo výpadků Čím menší stránky, tím je Frekvence výpadků stánek Mnoho malých stránek ve FAP Méně stánek, avšak mnohé obsahují nepotřebná data Velikost stránky menší vnitřní fragmentace, avšak klesá efektivita diskových operací při výměnách stránek (mnoho přenosů malých bloků) stránek více a roste potřebná velikost tabulky stránek a s tím spojená náročnost vyhledání vhodné oběti při výpadku stránky Veliká tabulka stránek (PT) PT trvale (neodložitelně) ve FAP zabírá mnoho místa a zmenšuje efektivně využitelnou paměť Umístění PT ve virtuální paměti způsobuje až dvojnásobný počet výpadků stránek (samotný přístup do PT může způsobit výpadek!) Celý proces v jedné stránce P Virtuální paměť 6
Způsob programování a výpadky Technika programování aplikací může významně ovlivnit efektivitu double data[][]; Předpokládáme, že double zabírá 8 bytů Každý řádek pole zabírá KB a je uložen v jedné stránce velké KB Postup : for (j = 0; j <; j++) for (i = 0; i < ; i++) data[i][j] = i*j; Potenciálně až x = 6 výpadků Postup : for (i = 0; i <; i++) for (j = 0; j < ; j++) data[i][j] = i*j; Jen potenciálních výpadků Je tedy dobré vědět, jak se data ukládají v paměti a účelně k nim přistupovat ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť 7
Stránkování ve Windows XP Stránkování na žádost s použitím,,prepaging do paměti se zavádí chybějící stránka a stránky okolní Používá se technika pracovních množin (WS) Z měření WS se určuje minimální počet stránek, které musí mít proces ve FAP Klesne-li objem volné paměti v systému pod jistý práh, automaticky se přehodnotí WS s cílem obnovit dostatečný objem volné paměti Z FAP se odstraňují stránky procesům, které mají v hlavní paměti více než minimum určené metodou WS Přesto se v praxi setkáváme u Windows XP s nedostatkem paměti výpraskem Doporučené minimum fyzické paměti 8 MB Reálně použitelné minimum 8 MB ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť 8
Dotazy ABOSS (J. Lažanský) verze: Podzim 00 Virtuální paměť 9