Proces muze bezet pouze v pripade, ze ma pridelenu operacni pamet. Kazdy operacni system proto obsahuje modul spravy pameti. Tento modul zajistuje pridelovani a ochranu pameti. Dalsi dulezitou otazkou je adresovani. Existuji ruzne strategie pridelovani pameti:
Cast pameti RAM je obsazena operacnim systemem (kod, promenne, vyrovnavaci pameti), zbytek je k dispozici pro uzivatelsky program. V kazdem okamziku je tedy v pameti nejvyse jeden uzivatelsky program. Tato strategie byla pouzivana na zacatku 60. let pro OS osmibitove mikropocitace (CP/M, ISIS-2 od Intelu).
Operacni pamet CP/M:
Operacni pamet ISIS-2:
Podle velikosti dostupne pameti, velikosti jadra OS a poctu bufferu je nutne:
Preadresovani provadi program zvany locator. Locator podle tabulky adres v relativnim programu zmeni (dle umisteni) prislusne adresy na absolutni.
Vetsina procesoru, na kterych se provozuji systemy s touto strategii pridelovani pameti, zadnou neumoznuje. Jinak pouze ochrana OS pred prepsanim uzivatelskym programem (pomoci mezniho registru; zmena pouze v privilegovanem stavu procesoru). V uzivatelskem stavu neni mozno zapisovat na adresy vetsi nebo rovne obsahu mezniho registru ani menit obsah mezniho registru.
V omezene mire je mozne i pri teto strategii pridelovani pameti pouzivat multitasking. Pri prepnuti kontextu je nutne nahrat cely obsah uzivatelske oblasti pameti na disk a zavest z disku obsah adresniho prostoru druheho procesu.
OS MFT (Multitasking with Fixed nuber of Tasks) - IBM 360 v 60. letech.
Strategie ukladani do pevnych bloku
Vyhody:
Nevyhody:
Neni mozne predem stanovit na jake adrese bude program ulozen -> program musi byt relokatibilni. Mame dve moznosti:
Nejcasteji se pouziva jedna z techto metod:
Pro pouziti kazde z techto metod je nutna podpora hardware -> pouziva se ta, ktera je dostupna na danem procesoru.
Dva mezni registry udavaji nejnizsi a nejvyssi dostupnou adresu. Nastavuje je OS, kdyz predava rizeni procesu. Odkaz na pamet mimo zpusobi vnitrni preruseni "poruseni ochrany pameti". Nastaveni meznich registru musi byt privilegovana instrukce, jinak muze program napsany se spatnym umyslem cist nebo menit pametove oblasti jinych procesu.
Pamet je rozdelena na stranky pevne velikosti (napr. 4 KB). Kazde strance pameti je prirazen zamek (= cele cislo). Procesor ma specialni registr, ktery slouzi jako klic. Proces muze pouzivat pouze ty stranky pameti, ktere maji zamek nastaveny na stejnou hodnotu, jako je klic. OS muze pouzivat univerzalni klic cislo 0, ktery umoznuje pristup k libovolne strance pameti.
Volna pamet neni pevne rozdelena, ale pri startu programu se prideli pamet podle naroku programu (resp. prideli se cely volny blok a program vrati, co nepotrebuje). Najdeme u MS-DOS, OS-MVT (Multitasking with Variable nuber of Tasks).
Operacni pamet na pocitacich PC kompatibilnich v realnem rezimu:
Vyhody:
Nevyhody:
Pro odstraneni fragmentace pouzivaji dalsi strategie spravy pameti nasledujici metody:
Pomoci meznich registru nebo mechanismem zamku a klicu - jako u pridelovani pevnych bloku pameti.
Fyzicka (skutecna) adresa v pameti se ziskava prictenim obsahu segment registru a logicke adrese (= adresa pouzita v programu). Obsah segment registru nastavuje OS a pro uzivatelsky program je nepristupny. Diky tomu adresni prostor kazdeho procesu zacina na 0 a odpadaji problemy s relokaci programu. Vetsina systemu, ktere pouzivaji segmentaci pameti dovoluje procesum pouzit vice segmentu. Rozdeleni na segmenty zpravidla odpovida strukture pametoveho prostoru procesu:
Toto rozdeleni umoznuje aby procesy, ktere jsou rizeny stejnym programem sdilely kod programu a konstanty (uspora vnitrni pameti).
U systemu se sdilenou pameti je vhodne sdilena data ulozit do zvlastniho segmentu a ten zpristupnit vsem procesum, ktere je pouzivaji -> zlepseni ochrany pameti - procesy, ktere pouzivaji sdilenou pamet, nemaji pristup k soukromym oblastem adresniho prostoru jinych procesu.
Vyhody:
Nevyhody:
Procesy potrebuji souvisly kus pameti -> setrasani segmentu. Provadi se zpravidla v okamziku, kdy pri startu noveho procesu neni zadny volny blok pameti dostatecne velikosti, ale soucet volnych bloku staci (nektere systemy v pripade, ze neni dostatek volneho mista, odkladaji adresni prostory nekterych procesu na disk -> swapping, viz planovani procesu).
Setrasani segmentu: prekopirovani adresniho prostoru nekterych procesu + zmena promenne PCB, ktera slouzi pro naplneni segment registru. Existuji ruzne algoritmy, ktere se snazi minimalizovat velikost kopirovane pameti.
Procesy pro svuj beh typicky pozaduji souvisly usek pameti. Nutnost pridelovat souvisle useky pameti a jejich uvolnovani v libovolnem poradi podle toho, jak konci jednotlive procesy, vede k fragmentaci pameti. Jednou z metod, jak se s fragmentaci vyrovnat, je premistovani segmentu, ktere vsak muze byt casove narocne. Strankovani pameti umoznuje pridelit procesu nekolik nesouvislych useku pameti, a vytvorit pro proces iluzi, ze tato pamet souvisla je.
Pri strankovani pameti je fyzicka pamet je rozdelena na ramce - frames (nekdy se nerozlisuje ramec a stranka).
Logicka adresa (= adresa pouzita v programu) je rozdelena na dve slozky, cislo stranky a posunuti v ramci stranky (OFFSET). Velikost stranky byva radove kilobyty. Pri velikosti stranky 4 KB je pro offset potreba 12 bitu (2^12 = 4K), cili spodnich 12 bitu logicke adresy je offset, zbyle bity jsou cislo stranky. Po rozkladu adresy (vse provadi procesor bez asistence programatora) na cislo stranky a offset se cislo stranky pouzije jako index do tabulky stranek (kazdy proces ma svoji vlastni). V tabulce stranek je uvedeno cislo ramce ve fyzicke pameti. K cislu ramce se pripoji offset a vysledkem je fyzicka adresa v pameti.
Vyhody:
Nevyhody:
Z pozorovani vyplyva: vetsina procesu se chova tak, ze po urcitou dobu pouziva nekolik malo oblasti pameti a s prubehem procesu se tyto oblasti meni relativne pomalu -> princip lokality pametovych odkazu. Diky tomu neni nutne po celou dobu behu procesu udrzovat cely jeho adresni prostor v pameti. Adresovani funguje podobnym zpusobem jako u obycejneho strankovani. V tabulce stranek je vsak pro kazdou stranku udaj, zda se stranka nachazi v pameti nebo na disku. V pripade, ze je stranka na disku, je uvedeno i jeji umisteni na disku. Pro strankovani se pouziva zpravidla zvlastni soubor, partition (oblast na disku) nebo dokonce disk. V minulosti se pouzivaly bubnove pameti s mnoha hlavami, ktere zpracovavaly nekolik bitu soucasne (pro zvyseni rychlosti).
V pripade, ze se proces odkazuje na stranku, ktera je pritomna ve fyzicke pameti, vse probiha jako u bezneho strankovani. Pokud vsak stranka ve fyzicke pameti neni (je na disku), dojde k vyvolani vnitrniho preruseni "vypadek stranky". Obsluzny program preruseni musi do vnitrni pameti zavest stranku z disku, opravit odkaz v tabulce stranek, a zajistit zopakovani instrukce, ktera vypadek stranky zpusobila. Pokud je ve vnitrni pameti volne misto, pouzije se libolny z volnych ramcu. Pokud jsou vsechny ramce plne, je nutne vybrat nektery z nich a prenest jej do strankovaciho souboru na disk. Existuje nekolik algoritmu nahrazovani stranek nebo "vyberu obeti".
Zdanlive nejjednodussi je algoritmus FIFO. Tento algoritmus vyhodi z pameti stranku, ktera je v ni nejdele. Bohuzel to muze byt stranka, ktera se pouziva trvale, coz efektivitu algoritmu snizuje. Algoritmus FIFO take vykazuje tzv. FIFO anomalii. Pokud se provede tentyz vypocet dvakrat s ruzne velkou vnitrni pameti, melo by pri vypoctu s vetsi pameti dojit nejvyse ke stejnemu poctu vypadku stranek jako pri vypoctu s mensi pameti. Pri pouziti strategie FIFO to nemusi vzdy platit. Navic neni snadne implementovat nahrazovani stranek pomoci strategie FIFO. V praxi se proto pouzivaji jine algoritmy.
Optimalni algoritmus nahrazovani stranek by vyhodil z pameti tu stranku, ktera v budoucnosti nebude pouzita nejdelsi dobu. Predpovidat budoucnost vsak neni mozne, proto se pouzivaji algoritmy, ktere pro odhad budouciho chovani pouzivaji chovani v minulosti. Algoritmus LRU (least recently used) vyhazuje z pameti tu stranku, ktera nebyla nejdelsi dobu pouzita. Implementace tohoto algoritmu muze pouzivat bud registr udavajici cas posledniho odkazu na danou stranku nebo frontu, na jejiz zacatek se zarazuje stranka, na kterou byl prave proveden odkaz. Ma-li byt z pameti nektera stranka vyhozena, vybere se ta, ktera nebyla pouzita nejdele (v pripade pouziti fronty je to posledni ve fronte). Algoritmus LRU je sice kvalitni, ale jeho hardwarova implementace je obtizna.
Proto se pouziva zjednoduseni algoritmu LRU nazyvane NUR (not used recently). V tomto pripade je kazdemu ramci prirazen jednobitovy priznak, zda byla prislusna stranka pouzita. Pri hledani obeti se vybere ta stranka, ktera pouzita nebyla.
V algoritmech nahrazovani stranek je vhodne brat v uvahu, zda byl obsah stranky zmenen. V pripade, ze nebyl, staci stranku pouze zahodit (jeji kopie je na disku). Pokud byla stranka zmenena, je nutne ji nahrat na disk, coz trva priblizne stejne dlouho jako nacteni nove stranky z disku. Pro tento ucel byva pro kazdy ramec k dispozici jednobitovy priznak, ktery se vynuluje pri zavedeni stranky do vnitrni pameti a nastavi pri zapisu do ramce.
Vyhody:
Nevyhody:
Logicka adresa se sklada z cisla segmentu, cisla stranky a offsetu na strance. Kazdy proces ma vlastni tabulku segmentu. Kazdy segment ma vlastni tabulku stranek (pro sdileny segment je tabulka jen jedna).
(chybi vyklad, jak to funguje)
Vyhody:
Nevyhody: