Uvedení autoři, není-li uvedeno jinak, jsou autory tohoto výukového materiálu a všech jeho částí. Tento projekt je spolufinancován ESF a státním rozpočtem ČR. Název SŠ:SOU Uherský Brod Autoři:Ing. Radim Bublík Název prezentace: (DUMu) Správa paměti III. Tematická oblast:Operační systémy Ročník: 1. ročník oboru Mechanik opravář motorových vozidel Číslo projektu:CZ.1.07/1.5.00/ Datum vzniku:
Záměrem této sady výukových materiálů s názvem Operační systémy je poskytnout žákům potřebné informace o logické struktuře a fundamentálních principech fungování moderních operačních systémů, s nimiž (nebo jejich obdobami) se budou velmi pravděpodobně setkávat po celý svůj život. Jednotlivé DUMy (prezentace a pracovní listy) v této sadě pokrývají vybrané tematické oblasti, které jsou probírány v předmětu Informační a komunikační technologie na naší SŠ. Tato prezentace je konkrétně zaměřena na tematický celek Správa paměti.
Jednalo se o jistou optimalizaci předešlé metody: nyní se velikost přiděleného bloku určuje až při žádosti procesu o paměť. Počet a délka bloků se zde neustále mění a tedy nelze již tyto informace udržovat v jednoduché tabulce. Místo tohoto řešení je zde udržován dynamický spojový seznam (viz schéma dále), který užívá hlavičky bloků k uložení režijních informací (typicky informace o vlastníkovi bloku a adresa počátku následujícího bloku). Paměť vyhrazená pro hlavičku bloku není procesu přístupná (ani o ní neví). pokud proces požádá o přístup do “své” paměti, k jeho adresovému prostoru se dostaneme tak, že od prvního bloku postupujeme po ukazatelích na následující bloky a postupně kontrolujeme informace v hlavičkách, až nalezneme blok, který hledáme. Stejně postupujeme i v případě, kdy hledáme volný blok pro přidělení nově spuštěnému procesu. Při uvolňování bloku se buď jen změní informace o vlastníkovi (je-li obklopen využívanými bloky) a nebo se spojí s volnými bloky, které jej obklopují. [1]
Výhody: všechny výhody předešlé metody (i když správa paměti je o něco náročnější a vyhledávání bloku pomalejší) částečně odstraňuje nevýhody předchozí metody Nevýhody: počet procesů, které lze spustit, je limitován požadavky již spuštěných procesů pokud je paměť fragmentována, je maximální velikost požadavku na paměť limitována velikostí největšího volného bloku určitá pravděpodobnost fragmentace [1]
Každému procesu je přiřazeno několik (různě dlouhých) bloků paměti, segmentů. Pokud je to třeba (a je v daném směru volná paměť), lze segmenty prodlužovat. Každý segment obvykle mívá určitý účel, např. segment pro kód procesu (code segment), datový segment (data segment, jeden nebo více - segment pro proměnné s dynamickou délkou se obvykle nazývá halda), zásobníkový segment (stack segment, obsazuje se od nejvyšších adres k nejnižším), překryvný segment (overlay segment, např. pro dynamické knihovny). Některé segmenty jsou plně konstantní (code segment např.), jiné mají konstantní délku, ale proměnný obsah (zásobník). To lze zohlednit při umisťování segmentů v paměti a řešení fragmentace. Procesy, které jsou instancemi téhož programu, mohou sdílet plně konstantní segmenty (pokud to OS umožňuje). [1]
Procesy používají relativní adresy, adresy začátku jednotlivých segmentů jsou uloženy v segmentových registrech procesoru (tedy je to opět HW závislé řešení - každý procesor má jiné registry). Absolutní adresa je pak vypočtena pomocí obsahu segmentových registrů. Adresa objektu z hlediska procesu má tedy dvě části: segment (určení, ve kterém segmentu se nachází) offset (relativní adresa v rámci segmentu, první Byte v segmentu má offset = 0) Případné přesouvání segmentu nezpůsobí procesu problém s adresami. Je nutné zajišťovat mapování relativní adresy v segmentu na absolutní adresu. Je-li implementován multitasking, je nutné při “výměně” procesů na procesoru uložit obsah segmentových registrů odstavovaného procesu a při znovupřidělení procesoru tomuto procesu znovu tyto hodnoty do registru načíst. [1]
Výhody: velikost segmentů může být různá, podle potřeby procesu segmenty je možné prodlužovat a přesouvat pokud to správce paměti umožní, některé segmenty lze sdílet Nevýhody: nutnost HW podpory (segmentové registry) ochrana paměti je komplikovanější (segmenty mají proměnnou délku) paměť, kterou lze dalšímu procesu přidělit, je omezena velikostí největšího souvislého bloku volné paměti určitá pravděpodobnost fragmentace, lze ji řešit přesouváním segmentů [1]
Tato metoda rozlišuje fyzickou adresu objektu v paměti (to je absolutní adresa objektu) a logickou adresu tohoto objektu (s tou pracují procesy). Paměťový prostor je rozdělen na stejně dlouhé úseky: stránky, pokud možno spíše kratší (obvykle 1kB nebo více), procesu je přiděleno tolik úseků, kolik potřebuje. Procesu se jeho adresový prostor jeví jako spojitý, třebaže fyzicky spojitý být nemusí, používá z jeho hlediska “absolutní adresy”, které jsou ve skutečnosti pouze logickými adresami (od nuly) nebo se jako v případě segmentace paměti skládají ze dvou částí - čísla stránky a relativní adresy uvnitř stránky. Máme zde konstantní počet stránek (paměť je opět rozdělena již při startu OS) a navíc jsou všechny stejně dlouhé, tedy opět můžeme evidenci stránek vést ve dvou jednoduchých tabulkách (evidence procesů a obsazení paměti, viz dále). Při jakémkoliv přístupu do paměti správce paměti provádí překlad adres: číslo stránky * délka stránky + offset [1]
[1]
Výhody: proces může dostat tolik stránek, kolik potřebuje (pokud jsou volné), stránky nemusí na sebe navazovat nejsou problémy s fragmentací Nevýhody: fragmentace uvnitř stránek (proces nemusí potřebovat celou poslední stránku) omezení daná velikostí fyzického adresovacího prostoru [1]
[1] VAVREČKOVÁ, Šárka. SLEZSKÁ UNIVERZITA V OPAVE. Operační systémy: Přednášky [online]. 2006, [cit ]. Dostupné z: