sw cast tvori memory manager, ako komponenta OS. memory manager udrzuje informacie o volnej a pridelenej pamati, prideluje a uvolnuje pamat, zaistuje swapping procesov.
poziadavku na spravu pamate su
- premiestnenie
- pri kompilacii vacsinou nie je zname umiestnenie procesov vo fyzickej pamati a kazdy odkaz do pamate v programe musi byt prepocitany podla aktualneho umiestnenia procesu vo fyzickej pamati. v programe sa mozme dalej odkazovat na dalsie programy. Programy do pamate zavadzame roznymi metodami (loading) - musi mu prechadzat linking (nizsie)
- absolutne zavedenie - kazdy odkaz do pamate v programe obsahuje absolutnu fyzicku adresu. Program musi byt tym padom zavedeny vzdy do danej fyzickej adresy. Pri zostavovani programu musime urcit, kam bude program zavedeny.
- premiestnitelne zavedenie - kazdy odkaz do pamate v programe obsahuje relativnu adresu. informacia o pamatovych odkazoch je ulozena v relocation dictionary. Prepocitanie adries z relativnych na fyzicke sa vykona pri zavedeni programu do pamate.
- dynamicke (run-time) zavedenie - kazdy odkaz do pamate v programe obsahuje relativnu adresu. program je takto zavedeny do pamate. Prepocet sa vykona pri spracovani instrukcie.
- linking
- staticky - vytvori sa load module s relativnymi adresami, vztiahnutymi k zaciatku modulu
- dynamicky - to je pripad, ked load module obsahuje odkazy na dalsie programy
- load-time dynamic linking - odkazy na dalsie programy sa nahradia v okamihu zavedenie
- run-time dynamic linking - odkazy sa nahradia za behu - v okamihu vykonavania instrukcie
- ochrana - ochrana procesov pred neziadanymi pristupmi ostatnych procesov
- zdielanie - umoznenie pristupu k spolocnej pamati
- logicka organizacia - sprava adresovych priestorov (linearnych). SW sa obvykle ale sklada z viacerych modulov
- fyzicka organizacia - fyzicka pamat sa sklada z vicerych urovni, ktore treba spravovat
Zakladne techniky spravy pamate
- v jednoulohovom systeme musi kazdy proces obsahovat ovladace I/O zariadeni. V pamati je len jeden proces a zdiela pamat s jadrom OS.
- vo viaculohovom systeme je pamat rozdelena do
- fixnych oblasti
- dynamickych oblasti
- moze vyuzivat virtualnu pamat so strankovanim/segmentaciou a v navaznosti na to pouzivat jednoduche strankovanie/segmentaciu
pokial je pamat rozdeleny do fixnych oblasti, tak to znamena, ze pri starte systemu je rozdelena do fixnych, ale rozne velkych oblasti. Programy su potom nahravane do rovnako velkych, alebo vacsich oblasti. Tieto oblasti sa uz pocas behu OS nemenia. Takato implementacia je jednoducha a rezijne naklady su male. Kedze pamat je rozdelena na bloky, tak kazdy blok je zviazany s n-bitovym ochrannym klucom, ktory urcuje, ci dana uloha moze pristupit k bloku. Kazdy blok ma k dispozicii bazovy a limitny register, pri kazdom pohybe v pamati (baza+pohyb) je vysledok porovnany s limitnym registrom.
Pruserom je interna fragmentacia, kedze miesto nie je vyuzite na 100% a pocet aktivnych procesov je fixny. Implementacia je mozna pomocou oddelenych vstupnych front pre kazdu oblast, alebo pomocou jednej spolocnej fronty. V pripade roznych front dochadza k nerovnomernemu obsadeniu front.
Spolocna vstupna fronta vybera volnu oblast pomocou strategii
- Best Fit - snaha o najdenie najvacsieho programu, pre danu oblast. Takto su znevyhodnene male ulohy. Pouziva sa pocitadlo, kolkokrat bol proces predbehnuty a ziaden proces nebude predbehnuty viac, ako x-krat.
- First Fit - prva uloha, ktora sa vojde do prvej oblasti, tam bude najebana. Takto sa ale plytva miestom vacsich oblasti, pretoze aj mensi program moze byt umiestneny do velmi velkej oblasti.
Pokial sa pocet oblasti a ich velkosti mozu menit, tak sa jedna o dynamicke oblasti. Procesy vznikaju a zanikaju, oblasti sa menia a presuvaju sa medzi hlavnou pamatou a diskom. Interna fragmentacia je skoro nulova a vyuzitie pamate skoro nulove. Nevyhodou je externa fragmentacia.
V dynamickej pamati moze datovy segment pamati menit svoju velkost behom vypoctu a preto musime alokovat viac pamate, ako je na zaciatku potreba.
Informacie o volnej pamati je mozne udrzovat v
- bitovej mape - pomale. Pamat je rozdelena na alokacne jednotky. Kazda alokacna jendotka ma v bitovej mape korespondujuci bit. Volna alokacna jednotka - suvisly retazec 0.
- zretazenym zoznamom - jedna sa o zoznam volnych a pridelenych pamatovych segmentov, ktory je zoradeny podla adries segmentov. Je to vlastne zoznam segmentov v poradi, kde je vzdy oznaceny proces/diera, pociatocna adresa a dlzka tak, aby bola obsiahnuta cela pamat. Nova alokacia sa deje pomocou
- first fit
- next fit
- best fit
- worst fit
- quick fit - tu sa ale jedna o oddeleny zoznam procesov a dier a v tomto pripade dokonca o niekolkych oddelenych zoznamoch pre diery. kazdy zoznam obsahuje informacie o dierach s urcitym intervalom (takze su vlastne zaradene do zoznamu podla velkosti) a tak je mozne rychlo najst dieru. Najdenie susednych dier pre zlucenie do vacsej diery je casovo narocne.