Operační systémy Přednášky pro výuku předmětu Operační systémy Ing. Antonín Vaněk, CSc. DFJP, Univerzita Pardubice září 2003
Kapitola 8 Správa paměti
rozdělení paměti pro použití více procesy a dohled nad jejím používáním paměť je nutné alokovat efektivně, aby mohlo být spuštěno co nejvíce procesů procesy musí mít přístup pouze do té části paměti, která jim byla přidělena
Požadavky na správu paměti Relokace (přemístění) programu programátor neví, ve které oblasti operační paměti bude program umístěn při provádění provádění programu může být pozastaveno, program odložen na disk a pak vrácen do jiné oblasti operační paměti paměťové odkazy v programu musí být převedeny z logických adres (uváděných v kódu programu) na aktuální adresy fyzické operační paměti
Požadavky na správu paměti Ochrana proces nesmí být schopen pracovat s paměťovými místy jiného procesu bez povolení kontrolu nelze provést v kódu programu program může být přemisťován kontrola musí probíhat během provádění programu!
Požadavky na správu paměti Sdílení někdy je nutné dovolit více procesům přístup ke stejné (společné) oblasti paměti je výhodné, jestliže procesy provádějící tentýž program používají tutéž kopii programu v paměti výrazná úspora paměti méně časté odkládání na disk
Požadavky na správu paměti Logická organizace programy jsou psány modulárně jednotlivé moduly vyžadují rozdílný stupeň ochrany read-only, execute-only moduly lze sdílet dynamicky spojované knihovny
Požadavky na správu paměti Fyzická organizace oblast paměti, která je k dispozici, nemusí pro program a data stačit technika překrývání (overlaying) umožňuje, aby různé moduly programu používaly stejnou oblast paměti sekundární paměť (disková) je levnější, má mnohem větší kapacitu a je trvalá její obsah zůstane zachován i po vypnutí napájení (energeticky nezávislá)
Pevné dělení (Fixed Partitioning) dostupná paměť je rozdělena na oddíly (partitions) s pevnými hranicemi oddíly mohou být stejně velké různě velké
Pevné dělení se stejně velkými oddíly všechny oddíly jsou stejně velké jakýkoliv proces, vyžadující oblast paměti menší nebo rovnou velikosti oddílu, lze zavést do kteréhokoliv volného oddílu když jsou obsazeny všechny oddíly, může OS některé oddíly uvolnit odložením procesu (swap out) na disk pokud se program nevejde do jednoho oddílu, musí programátor použít překrývání (overlays)
jakkoliv krátký program obsadí celý paměťový oddíl operační paměť nelze využívat efektivně tomuto jevu se říká vnitřní fragmentace (internal fragmentation) 8 M Operating System Pevné dělení se stejně velkými oddíly
oddíly mají různou velikost redukuje problémy s pevnou velikostí oddílů ale neodstraňuje je úplně... Operating System 8 M 12 M 8 M 6 M 4 M 2 M Pevné dělení se různě velkými oddíly
Umísťovací algoritmus Oddíly pevné velikosti protože jsou všechny oddíly stejně velké, lze použít kterýkoliv volný oddíl Oddíly rozdílné velikosti procesům se přiděluje paměť tak, aby se minimalizovala vnitřní fragmentace procesu se přiděluje nejmenší oddíl, do kterého se proces ještě vejde procesy čekající na přidělení paměti tvoří frontu (nebo více front)
Samostatná fronta pro každý oddíl New Processes Operating System proces lze zavést do paměti pouze když je příslušný oddíl volný zbytečně blokuje procesy, které by se mohly provádět ve větších, právě volných oddílech
Společná fronta procesů čekajících na paměť při zavádění procesu do paměti, je použit nejmenší volný oddíl, do kterého se proces ještě vejde ale nemusí to být nejmenší použitelný oddíl rychlejší, ale za cenu větší vnitřní fragmentace Operating System New Processes
Dynamické dělení proměnný počet i velikost oddílů procesu je přiděleno přesně tolik paměti, kolik potřebuje při ukončení nebo odložení procesu vznikají v paměti díry (Holes) uvolněnou oblast lze použít pouze pro proces, který potřebuje stejný nebo menší objem paměti při použití procesem s menšími požadavky na paměť představuje zbytek nepoužité paměti opět díru menší než původní a proto obtížněji využitelnou tomuto jevu říkáme vnější fragmentace (external fragmentation) lze odstranit defragmentací sražením všech oblastí obsazených procesy těsně k sobě, aby opět vznikla souvislá oblast volné paměti
Příklad dynamického dělení OS 128 K 896 K Process K 576 K Process K Process K 352 K 128 K OS
Příklad dynamického dělení OS Process K Hole Process K 288 K 64 K Process K Process K 288 K 64 K Process K Process 3288 K 64 K 128 K 96 K Process 2 Hole OS Process K
Operating System 320 K Process 3288 K 64 K Process K 96 K Operating System Process 3288 K 64 K Process K 96 K Process 2224 k 96 K Příklad dynamického dělení
OS musí rozhodnout, který volný blok přidělí procesu algoritmus nejlépe padnoucí (Best-fit) vyber blok, jehož velikost je nejblíže požadavku stejný nebo nejbližší větší nejméně výkonná metoda dosahuje se nejmenší možná fragmentace, protože je vždy použit nejmenší vyhovující blok fragmenty jsou malé, ale rychle přibývají, proto se musí často provádět setřesení (compaction) obsazené paměti Umísťovací algoritmus
algoritmus první padnoucí (First-fit) paměť se prohledává od začátku a procesu se přidělí první volný blok, který vyhovuje požadavku rychlejší než best-fit prohledávání zpomaluje výskyt velkého počtu obsazených bloků (bez děr) na začátku paměti tato oblast ze pokaždé zbytečně prohledává
algoritmus další padnoucí (Next-fit) paměť se prohledává od místa, kam se naposledy umísťovalo, a procesu se přidělí první volný blok, který vyhovuje požadavku nejčastěji umísťuje na konci paměti, kde je obvykle nejvíce volného místa má tendenci dělit velké bloky paměti na menší dokud je zbytek bloku dostatečně velký, umísťuje další proces hned za předchozí velký blok volné paměti na konci lze získat setřesením paměti Umísťovací algoritmus
Porovnání umísťovacích algoritmů After Compaction 216K Requsted block size = 16K Last allocated block (14K) 8K 12K 6K 8K 14K 6K 2K 20K Next Fit Best Fit First Fit After placement Free block Allocated block Before placement 8K 12K 22K 18K 6K 8K 14K 36K
Relokace (přemísťování) aktuální umístění programu v paměti je určeno při zavedení programu proces může být umístěn v různých oddílech a proto se mohu absolutní adresy během provádění měnit když se novému procesu nebo procesu odloženému na disk přiděluje paměť když se provede setřesení (compaction) paměti
Typy adres Logická adresa odkaz na paměťové místo nezávislý na aktuálním přidělení paměti k získání fyzické adresy je nutný překlad (translation) Relativní adresa adresa vyjádřená jako relativní pozice vzhledem k nějakému známému místu Fyzická adresa absolutní nebo aktuální adresa absolutní adresa umožňuje trvale přístup k určitému místu fyzické paměti aktuální adresa umožňuje přístup k určitému místu fyzické paměti pouze po dobu platnosti přiřazení
HW podpora relokace Process image in main memory Absolute address Process Control Block Program Data Stack Base Register Bounds Register Relative address Interrupt to operating system Addrer Comparator Process image in main memory Absolute address Process Control Block Program Data Stack Base Register Bounds Register Relative address Interrupt to operating system Adder Comparator vypočtená absolutní adresa nesmí ležet mimo tuto oblast ! pokud leží mimo, vyvolá se přerušením OS
Registry používané během provádění Bázový registr (Base register) počáteční adresa paměti alokované procesu Mezní registr (Bounds register) koncová adresa paměti alokované procesu obsah registrů nastavuje OS při zavádění procesu do paměti při spuštění nového procesu při obnovení odloženého procesu
Registry používané během provádění při výpočtu absolutní adresy se obsah bázového registru přičte k relativní adrese výsledek výpočtu (absolutní adresa) se v komparátoru porovná s obsahem mezního registru pokud absolutní adresa leží mimo meze, generuje se přerušení je to nepřípustná adresa a operační systém musí na tuto situaci reagovat
Stránkování (Paging) paměť se rozdělí na malé části stejné velikosti – rámce (frames) logická paměťová oblast procesu se rozdělí na stejně velké části jako paměť - stránky (pages) operační systém udržuje pro každý proces tabulku přiřazení stránek a rámců tabulka obsahuje údaje o umístění rámce v paměti pro každou stránku procesu adresa paměti se skládá z čísla stránky a ofsetu na stránce ofset = relativní adresa vzhledem k začátku stránky)
Frame A.0 A.1 A.2 A A.0 A.1 A.2 A.3 B.0 B.1 B.2 Frame Stránkování (Paging)
A.0 A.1 A.2 A.3 B.0 B.1 B.2 C.0 C.1 C.2 C A.0 A.1 A.2 A.3 C.0 C.1 C.2 C A.0 A.1 A.2 A.3 C.0 C.1 C.2 C.3 D.0 D.1 D.2 D.3 D.4 Stránkování (Paging)
Příklad stránkovacích tabulek Process A Process B Process C Process D Free Frame List 13 14
Segmentace všechny segmenty všech programů nemusí mít stejnou délku maximální délka segmentu je omezená adresa se skládá ze dvou částí – čísla segmentu a ofsetu protože segmenty nemají stejnou délku, podobá se segmentace dynamickému dělení paměti