25.1.2014
IOSYS_2013: Správa paměti, metody alokace paměti, virtualizace paměti
Operační systémy Tomáš Hudec 9 Správa paměti, metody alokace paměti, virtualizace paměti Obsah: 9.1
Techniky přidělování paměti, 9.1.1 Pevné dělení paměti, 9.1.1.1 Stejně velké oblasti, 9.1.1.2 Různě velké oblasti, 9.1.2 Dynamické dělení paměti, 9.1.2.1 Umisťovací algoritmy,
9.2 9.3
Virtualizace paměti, Opakování.
Proces může běžet pouze v případě, že má přidělenu operační paměť. Každý operační systém proto obsahuje modul správy paměti. Tento modul zajišťuje přidělování a ochranu paměti. Další důležitou otázkou je adresování. Existují různé strategie přidělování paměti. Část operační paměti (RAM – Random Access Memory) je obsazena operačním systémem (kód, datové struktury) nebo je jím využívána (vyrovnávací paměť, buffery). Zbytek je přidělován procesům. Nejstarší způsob správy paměti je přidělení veškeré paměti nevyužité operačním systémem právě běžícímu procesu. V každém okamžiku je tedy v paměti nejvýše jeden proces. Tato strategie byla používána v nejstarších operačních systémech (dávkové systémy) a později znovu v prvních osobních počítačích (CP/M, ISIS II, DOS). Moderní operační systém musí umět spouštět více procesů současně, a tedy přidělovat jim paměť. To zahrnuje speciální požadavky na systém správy paměti, jakož i na hardwarovou podporu. Požadována je podpora: relokace paměti – možnost umístění paměti procesu na libovolné (fyzické) adresy, ochrana paměti – procesu je dovoleno měnit a číst pouze jemu přidělenou paměť, možnost sdílení paměti mezi procesy. Podpora relokace je důležitá, protože programátor nemůže předem vědět, na které adresy je program do paměti zaveden. Program tedy nesmí pracovat s absolutními adresami fyzické operační paměti – musí používat adresy logické, které se za běhu převedou na skutečné fyzické adresy. Proces může být během provádění odložen na sekundární paměť (swap) a při navrácení nemusí být původní adresní rozsah procesu volný. Pak je třeba proces také relokovat (zavést na jiné fyzické adresy). Další důležitou vlastností paměti je podpora její ochrany. Aby operační systém mohl účinně izolovat procesy, musí hardware podporovat ochranu paměti. Kontrola přístupu musí být prováděna v době běhu procesu, nelze ji provádět podle programu (kódu procesu). Rozlišují se typicky tři oprávnění: čtení, zápis a provádění. Některé procesy mohou potřebovat paměť sdílet, neboť výměna dat pomocí operační paměti je efektivnější než používání souborů nebo jiných mechanismů výměny dat. Podpora sdílení paměti se hodí také pro systémové knihovny, které používá současně více procesů – stačí, aby v paměti byly zavedeny pouze jednou. Výhodná je podpora sdílení také v případě běhu více procesů provádějících stejný program, např. více instancí editoru či webového prohlížeče. Podpora sdílení paměti vede k výrazné úspoře paměti a v důsledku k méně častému odkládání paměti na sekundární médium (swap). Při nedostatku fyzické operační paměti lze použít techniky, které umožní běh procesů, které by se jinak do operační paměti již nevešly. Mezi tyto techniky patří: překrývání (overlaying) a odkládání (swapping). Při překrývání se využívá toho, že ne všechny moduly programu jsou vyžadovány současně. Jakmile skončí využívání jednoho
http://fei-learn.upceucebny.cz/mod/page/view.php?id=5282
1/6
25.1.2014
IOSYS_2013: Správa paměti, metody alokace paměti, virtualizace paměti
modulu a je vyžadován modul jiný, první se z paměti uvolní a na jeho místo se nahraje druhý. Tímto způsobem lze provádět i takové procesy, které by se celé do operační paměti nevešly. Metoda překrývání paměti není transparentní pro programátora (programátor musí s technikou překrývání počítat při vytváření programu) a je nutné, aby překrývané moduly byly na sobě nezávislé. Naproti tomu odkládání paměti na disk (swapping) je pro programátora transparentní, řeší se až za běhu operačním systémem. Je li třeba uvolnit více paměti, odloží se některé (obvykle blokované) procesy na levnější (a pomalejší) sekundární paměť – swap). Pokročilejší techniky umožňují odložit i pouze část paměti procesu.
9.1 Techniky přidělování paměti V předchozím textu byla zmíněna základní technika alokace paměti – přidělování celé dostupné paměti běžícímu procesu. Ta je samozřejmě neefektivní, protože neumožňuje plně provádět více úloh současně (multitasking) a v důsledku tedy nemůže být systém ani víceuživatelský. Mezi techniky přidělování paměti patří: pevné dělení paměti (fixed partitioning) se stejně velikými bloky, s různě velkými bloky, dynamické dělení paměti (dynamic allocation), stránkování (paging) a segmentace (segmentation).
9.1.1 Pevné dělení paměti Dostupná paměť je rozdělena do oblastí (partitions) s pevnými hranicemi. Tyto oblasti mohou být buď všechny stejné velikosti nebo mohou být nastaveny různě velké.
9.1.1.1 Stejně velké oblasti Proces je zaveden do libovolné volné oblasti. Jsouli všechny oblasti obsazené, lze některý proces odložit na disk (swap out). Nevejdeli se proces do oblasti, musí programátor použít techniku překrývání (overlays). Jakýkoli malý proces vždy zabere celou oblast a vzniká tak vnitřní fragmentace (internal fragmentation) – proces nevyužije veškerou přidělenou paměť. To je samozřejmě neefektivní. Pro zmírnění tohoto nedostatku lze paměť rozdělit na různě velké oblasti.
9.1.1.2 Různě velké oblasti Paměť rozdělená na různě velké oblasti umožňuje zmírnit vnitřní fragmentaci. Při umisťování procesů do takto dělené paměti máme v zásadě dvě možnosti. Procesy čekající na přidělení paměti tvoří: 1. samostatnou frontu pro každou velikost oblasti, 2. jedinou frontu. Existujeli více front, proces se zařadí do fronty tak, aby se minimalizovala vnitřní fragmentace. Vybere se tedy fronta pro takovou nejmenší velikost, do které se proces vejde. Nedostatkem tohoto způsobu je, že mohou být blokovány procesy, které by mohly běžet ve větší volné oblasti. Jeli v systému jediná fronta, přidělí se procesu vždy nejmenší volná oblast, do které se proces vejde (bestfit). Tento způsob je rychlejší, ale za cenu větší vnitřní fragmentace.
http://fei-learn.upceucebny.cz/mod/page/view.php?id=5282
2/6
25.1.2014
IOSYS_2013: Správa paměti, metody alokace paměti, virtualizace paměti
Pevné dělení paměti: stejná (vlevo) a různá (vpravo) velikost bloků
9.1.2 Dynamické dělení paměti Volná paměť není pevně rozdělena. Procesu se při startu přidělí tolik paměti, kolik potřebuje. Tím je odstraněna vnitřní fragmentace. Použito v IBM OS‑MVT (Multitasking with Variable number of Tasks). Při ukončení procesu vznikají v paměti díry (holes). Do takové oblasti lze umístit jen proces, který se tam ještě vejde. Podaříli se to, po umístění procesu obvykle zůstane mnohem menší díra, která je ještě obtížněji využitelná. Tento jev se označuje pojmem vnější fragmentace (external fragmentation). Pokud má vzniknout nový proces s takovými paměťovými nároky, že neexistuje souvislý volný blok paměti příslušné (nebo větší) velikosti, pak takový proces nelze do paměti zavést, a to i přesto, že součet velikostí volných bloků je větší než paměťové nároky procesu. Následující obrázky zobrazují situaci po alokaci paměti třem procesům, uvolnění paměti procesu 2, alokaci paměti procesu 4, uvolnění paměti procesu 1 a alokaci paměti procesu 5.
Dynamické dělení paměti: uvolnění paměti a následná alokace
http://fei-learn.upceucebny.cz/mod/page/view.php?id=5282
3/6
25.1.2014
IOSYS_2013: Správa paměti, metody alokace paměti, virtualizace paměti
Dynamické dělení paměti: vznik vnější fragmentace
Vnější fragmentace lze odstranit defragmentací – relokací pamětí procesů tak, aby vznikla souvislá volná oblast – setřesení (compaction). Setřesení lze použít pouze za předpokladu podpory relokace paměti za běhu.
Dynamické dělení paměti: odstranění vnější fragmentace setřesením
9.1.2.1 Umisťovací algoritmy Pro alokaci paměťové oblasti pro proces lze použít následující čtyři základní algoritmy. Umisťovací algoritmus best‑fit Algoritmus best‑fit vybírá takovou nejmenší volnou oblast, do které se proces ještě vejde. Cílem je minimalizovat (vnější) fragmentaci. Důsledkem je však rychlé přibývání malých fragmentů, které lze jen velmi obtížně využít – nutnost častého provádění setřesení. Díky nutnosti prohledávat celou paměť (hledání nejmenšího volného bloku) je tato metoda nejméně výkonná. Umisťovací algoritmus worst‑fit Algoritmus worst‑fit vybírá největší volnou oblast, do které je proces následně umístěn. Má tendenci dělit velké oblasti paměti na menší, což v důsledku vede k nemožnosti přidělení paměti procesu s velkou paměťovou náročností. Tato metoda alokace má nejhorší využití paměti (lowest memory utilization). Jelikož je třeba stejně jako u algoritmu best‑fit prohledat celou paměť, může se algoritmus modifikovat na variantu exact‑or‑worst‑fit, kdy se proces přednostně umístí do přesně vyhovující oblasti, je‑li taková nalezena. Umisťovací algoritmus first‑fit Algoritmus first‑fit hledá první vyhovující oblast, do které se proces vejde. Paměť je prohledávána vždy od začátku. Protože není potřeba prohledávat celou paměť, je tato metoda rychlejší než předchozí. Prohledávání zpomaluje výskyt velkého počtu obsazených oblastí na začátku paměti, tato část paměti se vždy zbytečně prohledává. Vylepšením v tomto ohledu je následující
http://fei-learn.upceucebny.cz/mod/page/view.php?id=5282
4/6
25.1.2014
IOSYS_2013: Správa paměti, metody alokace paměti, virtualizace paměti
algoritmus. Umisťovací algoritmus next‑fit Algoritmus next‑fit stejně jako first‑fit vybírá první volnou oblast, do které se proces vejde, ale paměť se prohledává vždy od oblasti, do které se naposledy umisťovalo. Je‑li po umístění procesu do volné oblasti zbytek oblasti ještě dostatečně velký pro další proces, umístí tento sem. Algoritmus má tendenci umisťovat častěji ke konci paměti, neboť je tam obvykle nejvíce volného místa. Na rozdíl od first‑fit má větší tendenci dělit velké oblasti paměti na menší. Jedná se o nejrychlejší metodu.
Dynamické dělení paměti: porovnání umisťovacích algoritmů a stav po setřesení
9.2 Virtualizace paměti Velká část paměti procesu nemusí být trvale využívána. Dle principu lokality odkazů má proces tendenci v nejbližších okamžicích přistupovat do stejné paměťové oblasti, kam přistupoval nyní. To se týká dat (proměnné ve stejné datové části) i kódu (zejména při provádění cyklů a stejných podprogramů). Část paměti procesu se tedy může odložit na disk. Rozdělí‑li se adresový prostor procesu vhodně na části, stačí, aby pouze některé z nich byly ve fyzické operační paměti. Proces může běžet, i když nemá ve fyzické operační paměti celý svůj adresový prostor, který tak může být i větší než je dostupná paměť. Lze tak provádět více procesů současně a systém bude efektivnější. Díky principu lokality odkazů lze obvykle odvodit, kterou část paměti bude proces v nejbližší budoucnosti používat s nejvyšší pravděpodobností, a lze tedy dopředu načíst do operační paměti jen příslušné části procesu (z okolí právě využívaných oblastí). Procesor je obvykle schopen adresovat větší množství paměti, než je skutečně instalováno. Adresový prostor lze rozšířit tak, aby zahrnoval kromě skutečné fyzické paměti i část sekundární paměti (disku). Získáváme tak virtuální paměť. Část paměti procesu, která je držena ve fyzické operační paměti, se označuje pojmem resident set. Sekundární paměť využívaná pro odkládání (dočasně) nepoužívaných částí adresových prostorů procesů se nazývá swap. Přistoupí‑li proces k paměťovému místu (data, kód), které není ve fyzické operační paměti, generuje se přerušení. Operační systém proces zařadí mezi blokované, dokud nenahraje příslušnou část jeho adresového prostoru zpět do fyzické operační paměti. Po dokončení čtení je generováno přerušení a proces je následně zařazen opět mezi připravené. Při špatné organizaci odkládání částí paměti procesu na disk, může nastat tzv. thrashing. To je situace, kdy část paměti procesu je odložena na disk těsně před tím, než ji proces potřebuje. Tuto část paměti je pak třeba následně nahrát zpět do fyzické operační paměti. Proces tak zbytečně čeká v blokovaném stavu. Thrashing může být následkem špatné organizace operační paměti, nedostatku operační paměti, ale také neoptimalizovaného překladu programu kompilátorem, který nedostatečně dodržuje princip lokality odkazů. Aby se dala virtuální paměť efektivně spravovat, je nutná hardwarová podpora. Procesor musí umět pracovat s logickou (virtuální)
http://fei-learn.upceucebny.cz/mod/page/view.php?id=5282
5/6
25.1.2014
IOSYS_2013: Správa paměti, metody alokace paměti, virtualizace paměti
adresou, kterou předává paměťové jednotce – MMU (Memory Management Unit) –, která převádí virtuální adresu na adresu skutečnou. Mezi dvě hlavní virtualizační metody patří stránkování a segmentace.
9.3 Opakování 1. 2. 3. 4. 5. 6. 7.
Jmenujte výhody a nevýhody statického dělení paměti. Popište možné způsoby alokace paměti při použití statického dělení s různě velkými bloky. Popište metodu dynamické alokace paměti. Uveďte, jak se dá odstranit vnější fragmentace. Popište algoritmus first‑fit (best‑fit, worst‑fit, next‑fit). Uveďte důvod, proč může proces běžet, i když nemá veškerý svůj alokovaný adresový prostor v operační paměti. Definujte pojmy „relokace“, „virtuální paměť“, „resident set“, „swap“, „overlaying“, „thrashing“. Naposledy změněno: Pondělí, 7. říjen 2013, 15.27
http://fei-learn.upceucebny.cz/mod/page/view.php?id=5282
6/6