380 likes | 611 Views
Správa pamäte. Dva základné pohľady na pamäť. Fyzický adresový priestor (FAP) - je operačná pamäť fyzicky prítomná v počítači. Predstavujeme si ho ako lineárne pole adresovateľných jednotiek - bytov očíslovaných adresami od 0 po MAX
E N D
Dva základné pohľady na pamäť • Fyzický adresový priestor (FAP) - je operačná pamäť fyzicky prítomná v počítači. Predstavujeme si ho ako lineárne pole adresovateľných jednotiek - bytov očíslovaných adresami od 0 po MAX • Logický adresový priestor (LAP) - je pamäť ako abstrakcia, na ktorú sa jednotlivé programy (a tým aj procesy) odvolávajú pri adresácii.
MMU (memory management unit) • Jednotka pre ovládanie pamäte • Jej úlohou je namapovať logické adresy generované procesom na fyzické adresy zrozumiteľné hardvéru, keď sa CPU obracia prostredníctvom MMU k pamäti, a to pri: • načítavaní inštrukcie (fetch), • čítaní dát (load), • zapisovaní dát (store), • MMU nerobí rozdiely medzi dátami a inštrukciami
Generovanie adries • Adresy z hľadiska programu (procesu) sú v rôznych etapách spustenia programu reprezentované rôzne • V zdrojovom programe používame adresy symbolické ─ premenné alebo identifikátory • Pri preklade programu sa tieto adresy zmenia prekladačom na tzv. relokovateľné adresy ("14 bytov od začiatku modulu X", "17 bytov pod vrcholom zásobníka") • Počas behu programu máme logické adresy procesu (LAP) ─ jediná adresácia, ktorá je "zrozumiteľná" MMU, ktorý ju namapuje na FAP.
Pridelenie adries (address binding) • dátam a inštrukciám programu sa môžu prideliť adresy v troch fázach: • Počas prekladu - vzniká relatívný (relokovateľný) kód. Ojedinele sa používa aj absolútny kód, ktorý sa dá zaviesť len na pevne určenú adresu v op. pamäti. • Počas zavedenia programu do pamäti - adresy v kóde zadané relatívne sa pri zavedení programu modifikujú podľa umiestnenia programu v pamäti. • Počas behu programu - ak OS povoľuje premiestnenie adresového priestoru počas behu programu, adresy sa musia prepočítavať po každom premiestnení.
Dynamické zavedenie (loading) • Procedúra sa nenačíta do pamäte, pokiaľ to nie je nutné. Pri prvom volaní sa zavedie z relokovateľného formátu uloženého na disku. • Výhoda: zriedkavo volané procedúry sa vôbec nezavedú (typicky napr. ošetrenie exotických chýb). • Nevýhoda: časové zdržanie pri prvom volaní každej procedúry.
Dynamické zostavovanie (linking) • Zostavovací program (linker) kombinuje jednotlivé moduly programu a predpripravené knižnice a vytvára vykonateľný súbor. • Pri dynamickom zostavovaní sa tzv. dynamicky linkované knižnice nepridajú do vykonateľného súboru, pridá sa len akýsi "odkaz" hovoriaci "toto je volanie procedúry f() z knižnice X". Pri prvom volaní procedúry f sa vyhľadá knižnica X v systéme súborov a zavedie sa. • Výhody: menšie vykonateľné súbory, možnosť vylepšiť knižnicu (napr. opraviť drobné chyby) bez nutnosti zmeniť vykonateľné programy. • Nevýhoda: nutnosť verzionovať knižnice (veľké, nekompatibilné zmeny knižníc znemožňujú spoluprácu s programami kompilovanými so starou verziou knižnice). • Reprezentantom tohoto prístupu sú DLL v MS Windows a shared libraries v systémoch UNIX.
Prekrývanie (overlay) • Často štruktúra programu je taká, že určité časti kódu sa používajú len v určitých etapách behu programu. • Program je možné rozčleneniť na prekrývané moduly: určité spoločné časti sú zavedené vždy, iné sa zavádzajú a odstraňujú z pamäti podľa potreby. • Táto metóda nepotrebuje podporu od OS, len od prekladača (vie to napr. aj Borland Pascal).
Odkladanie na disk (swapping) • Proces, ktorý je v stave bežiaci, musí byť v pamäti. Na druhej strane ostatné procesy (čakajúce, pripravené) sa môžu dočasne odsunúť na disk a znovu sa zaviesť až vtedy, keď sú naplánované. • Výhody: táto metóda umožňuje "opticky" zväčšiť súčet veľkostí LAP procesov nad veľkosť FAP. • Nevýhoda: obrovský nárast trvania prepnutia kontextu (disky sú pomalé). Táto "čistá" forma odkladania sa dnes už skoro nepoužíva ─ odkladajú sa nie celé adresové priestory procesov, ale menšie bloky pamäti.
Prideľovanie pamäte Súvislá alokácia
Súvislá alokácia • LAP procesu je uložený v súvislej oblasti FAP. • Jedna oblasť je vyhradená pre OS, ďalšie oblasti sú určené procesom. Podľa počtu a veľkosti týchto oblastí rozoznávame niekoľko možností: • jedna oblasť (okrem oblasti pre OS) ─ jeden proces, • viac oblastí rovnakej veľkosti ─ každý proces vo svojej oblasti • viac oblastí premenlivej veľkosti ─ každý proces vo svojej oblasti, veľkosť oblasti je určená nárokmi procesu.
Mapovanie LAP na FAP a ochrana pamäti • Uskutočnuje sa pomocou dvoch registrov: bázového (alebo relokačného) a limitného. • Pri prepínaní kontextu sa tieto registre naplnia špecifickými hodnotami pre proces, na ktorý sa prepína. • LAP procesu i sa chápe ako pole bytov číslované od 0 po hodnotu maximálnej adresy procesu 0..max(i). • Pri zavedení procesu sa rozhodne o fyzickej adrese priradenej logickej adrese 0 (začiatku LAP) ─ to bude hodnota bázového registra pre daný proces. • Hodnota limitného registra daného procesu bude max(i).
Spracovanie v MMU • Keď CPU požiada o prácu s údajmi na logickej adresea, MMU najprv overí, či a<=max(i) (tým sa zabezpečí ochrana: neadresujeme "nad" vyhradenou fyzickou adresou; adresovať "pod" sa nedá: adresy sú bez znamienka). • V prípade neúspechu sa vyvolá programová chyba a proces sa ukončí. Ak sa test podaril,a sa pripočíta k hodnoteR bázového registra a dostaneme fyzickú adresu. • Znamená to napr., že pri hodnote R=10000 sa logická adresa a=314 namapuje na FA 10314 ─ ak 314<=max(i), t.j. daný proces používa aspoň 315 bytov pamäti.
Nevýhody • Pre jednu oblasť je to znemožnenie multitaskingu. • V prípade rovnako veľkých oblastí je to interná fragmentácia a obmedzenie veľkosti procesov (ak oblasti majú 100KB, tak na proces veľkosti 10KB vyplýtvame 90KB op. pamäti, ak máme 10 voľných oblastí po 100KB, nespustíme proces, ktorý chce 101KB). • Pri premenlivých veľkostiach oblastí je to externá fragmentácia: môže sa stať, že po spustení a ukončení niekoľkých procesov bude FAP vyzerať ako ementál a veľkosť najväčšieho súvislého voľného bloku ("diery") bude výrazne menšia, než súčet veľkostí všetkých voľných oblastí ─ zase sa nemusí podariť spustiť proces s veľkými pamäťovými nárokmi.
Prideľovanie pamäte Stránkovanie
Stránkovanie • Riešením problémov fragmentácie pri súvislej alokácii je stránkovanie. • Tu dovolíme, aby FAP priradený procesu nebol súvislý. • FAP je rozdelený na bloky pevnej dĺžky ─ rámce (typicky 1/2, 1, 2, 4 KB). • LAP procesu je taktiež rozdelený na bloky rovnakej veľkosti: stránky.
Tabuľka stránok (TS) procesu • Určuje priradenie rámcov stránkam. Pri prepnutí kontextu sa prepne aj tabuľka stránok (typicky adresa tabuľky stránok bežiaceho procesu je v špeciálnom registri a stačí zmeniť túto hodnotu). • Každý proces má vlastnú tabuľku stránok • Ak proces požiada o ďalšiu pamäť, OS mu pridelí ďalší voľný rámec (ak existuje), a vytvorí sa spojenie v tabuľke stránok. Takto pridelené rámce nemusia ležať súvisle za sebou.
Pri spracovaní v MMU • logická adresa sa rozdelí na číslo stránky p a offset na stránke d (typicky niekoľko prvých bitov adresy dáva p a zvyšok d ─ preto je veľkosť stránky mocnina 2). • p sa použije ako index do TS a získa sa tým hodnota f: číslo rámca. • Fyzická adresa je: f*r + d, kde r je veľkosť rámca.
Ochrana • Do TS sa pridajú ďalšie bity, ktoré definujú prístupové práva procesu k danej stránke (napr read, write, readonly a pod). • Okrem toho jeden bit označuje stránku ako platnú/neplatnú ─ či stránka patrí do LAP procesu alebo nie (veľkosť TS je totiž rovnaká pre všetky procesy bez ohľadu na ich pamäťové nároky).
Zdieľanie • Stránkovanie dokonca umožňuje zdieľať stránky medzi procesmi: stačí, ak dva procesy majú rovnaké číslo rámca niekde vo svojej TS. • Pomocou bitov pre ochranu sa dá nastaviť aj to, že jeden z procesov na danú stránku len zapisuje, druhý len číta. • Typickejšia situácia je pri zdieľaní vykonateľného kódu (inštrukcií, nie dát!): tieto stránky sú označené readonly a môžu byť zdieľané viacerými procesmi ktoré majú ten istý program.
Nevýhody • interná fragmentácia na poslednej stránke procesu (priemerne pol stránky na proces) • zvýšenie času na context switch, veľkosť TS atď.
Prideľovanie pamäte Segmentácia
Segmentácia • Stránkovanie striktne oddeľuje LAP a FAP, mapovanie je "neprirodzené". Je to vyvolané tým, že sa na LAP dívame ako na lineárne pole bytov. • Prirodzenejší pohľad na LAP je programátorský: vidíme rôzne procedúry alebo skupiny súvisiacich procedúr (napr. knižnice), rôzne oblasti dát (polia, zásobníky). • Pri segmentácii si LAP predstavíme ako neusporiadanú kolekciu segmentov: pomenovaných oblastí premenlivej dĺžky, ktoré obsahujú kód alebo dáta, ktoré spolu nejako súvisia, sú sémanticky (významovo) zviazané. Z dôvodov efektívnosti sa pri behu nepoužíva meno, ale číslo segmentu.
Pri mapovaní LAP na FAP • každý segment sa zobrazí do súvislej oblasti FAP podobne, ako sa celý LAP procesu zobrazoval pri súvislej alokácii. Budeme teda potrebovať bázovú a limitnú hodnotu, ale pre každý segment. • Tieto hodnoty sa ukladajú v tabuľke segmentov procesu, v ktorej sa vyhľadáva pomocou čísla segmentu. • Segmenty sa vo FAP neprekrývajú. • Segmenty obyčajne vytvára prekladač, v niektorých prípadoch je jeho chovanie ovplyvniteľné.
Pri spracovaní v MMU • sa logická adresa rozdelí na číslo segmentus a offset v segmente d (typicky niekoľko prvých bitov adresy dáva s a zvyšok d). • s sa použije ako index do TS a získa sa tým hodnota l: veľkosť (limit) segmentu a hodnota b: bázová adresa segmentu. • MMU najprv porovná d a l: ak d>l, znamená to chybu adresácie a proces sa obyčajne ukončí. V opačnom prípade získame fyzickú adresu ako b+d.
Ochrana a zdieľanie • Teraz nám príde vhod, že segmenty sú sémantické entity: obsahujú spolu súvisiace veci (kód, dáta). • Preto môžu byť segmenty označené prístupovými právami a zdieľané procesmi tak, ako rámce, ale všetko je prirodzenejšie.
Nevýhody • Nenastáva interná fragmentácia, ale môže nastať externá, rovnako, ako pri súvislej alokácii LAP procesov s premenlivou dĺžkou oblastí. • Situácia je ale lepšia, lebo segmenty sú menšie, než LAP celého procesu.
Prideľovanie pamäte Segmentové stránkovanie
Výhody a nevýhody segmentácie a stránkovania sa dajú užitočne skombinovať pomocou segmentovaného stránkovania. Tieto schémy môžu byť veľmi komplikované, načrtneme len základnú myšlienku. • Základom je segmentácia, t.j. prvotná fáza prevodu LA na FA je segmentácia. • Ako výsledok nedostaneme hneď FA, ale tzv. lineárnu adresu. • Táto adresa sa potom stránkuje, t.j. priestor lineárnych adries je rozdelený na stránky a týmto stránkam sa v druhej fáze prevodu priraďujú rámce popísaným algoritmom stránkovania: takto dostaneme FA.
Prideľovanie pamäte Virtuálna pamäť
Táto technika umožňuje beh procesov, ktorých LAP nie je celý vo FAP, t.j. celý proces nie je zavedený v op. pamäti. Jedna z možných implementácií je stránkovanie na žiadosť, ktoré tu stručne a veľmi zjednodušene popíšeme.
Stránkovanie na žiadosť • Základom je stránkovanie. • Každý rámec má priradené miesto aj v sekundárnej pamäti (disku) ─ tzv. odkladacej oblasti (toto je zjednodušenie!). • Nie každá stránka procesu musí byť v op. pamäti, niektoré môžu byť na disku. • Čo sa ale stane, ak sa proces snaží pristúpiť k stránke, ktorá je odložená? • Nastane tzv. výpadok stránky (page fault) ─ proces prejde do stavu čakajúci a OS prenesie stránku do op. pamäti. V podstate proces môže začať svoj beh tak, že len jeho "úvodná stránka" (začiatok programu) je v op. pamäti, ostatné sú odložené. • Po prenesení chýbajúcej stránky do op. pamäti proces prejde do stavu pripravený a eventuálne sa dostane k procesoru.
Pri tejto schéme súčet veľkostí LAP procesov v systéme môže prekročiť veľkosť FAP: čo rozhoduje, je súčet veľkostí stránok, ktoré sú v op. pamäti (nie sú odložené). • Samozrejme, môže nastať situácia, že po výpadku stránky chceme stránku odloženú zaviesť z disku do op. pamäti, ale nie je voľný žiaden rámec vo FAP. • V takomto prípade sa jeden z obsadených rámcov musí odložiť na disk. Algoritmy výberu tejto obete prekračujú rámec prednášky.