OPERATIVNI SISTEMI
Statički segment i statičke stranice

Rad sa particijama

Upravljanje memorijom pomoću particija karakteriše kontinualna dodjela memorije. Uvođenje particija je jednostavan metod koji omogućava višeprogramski rad, tj. da više programa koji se izvršavaju bude u isto vrijeme u operativnoj memoriji. Memorija se dijeli na kontinualne dijelove koji se nazivaju particije. U zavisnosti od toga kada i kako se particije kreiraju i modifikuju razlikujemo statičke i dinamičke particije.

Statičke particije

Upravljanje memorijom pomoću statičkih particija je jedan od najosnovnijih načina upravljanja memorijom. Za višeprogramski rad neophodna je dodjela više particija. Memorija se dijeli u particije fiksne veličine, kao što je to pokazano na slici 1. Particije su fiksirane u vrijeme inicijalizacije sistema i ne mogu se mijenjati u toku izvršavanja programa. Svakoj particiji se dodjeljuje po jedan proces. Programi se raspoređuju tako da budu smješteni u najmanjoj particiji koja je dovoljno velika da prihvati cio program. Izvršni program koji je pripremljen za izvršavanje u datoj particiji ne može da se izvršava u nekoj drugoj particiji bez ponovnog povezivanja (eng. relinking).

 


Slika 1. Statičke particije

 

Kod ovog načina upravljanja memorijom postoji potreba zaštite koda operativnog sistema od mogućih promjena od strane korisničkih procesa. Zaštita se može uraditi pomoću baznog i graničnog registra.

Dinamičke particije

Kod upravljanja memorijom pomoću dinamičkih particija u operativnu memoriju se može učitati onoliko programa koliko ima slobodne memorije. Particije nisu fiksne veličine, kao što se vidi na slici 2. Veličina particije odgovara veličini programa koji je učitan. Nakon učitavanja programa u particiju, adrese programa su fiksne, tako da nije moguće premještanje programa u drugu particiju. Operativni sistem za svaku particiju čuva sve bitne podatke kao što su veličina i početna adresa.

Slika 2. Dodjela particija kod dinamičkih particija

Za razliku od statičkih particija, kod dinamičkih particija veličina particija se određuje prema veličini programa i to u trenutku unošenja programa u memoriju.

Statički segmenti i statičke stranice

U svim do sada navedenim načinima upravljanja memorijom bilo je neophodno da se povezivanje programa obavi statički, prije unošenja u memoriju i izvršavanja, te da se u memoriji dodijeli kontinualan memorijski prostor. Posljedica toga je da su povezani programi relativno veliki i da je prilikom dodjeljivanja memorijskog prostora tim programima bilo neophodno da se u memoriji nađe odgovarajući dovoljno veliki slobodan prostor sastavljen od niza kontinualnih adresa. Jedan od problema koji se pri tome javlja je i fragmentacija, a samim tim i slabo iskorišćenje memorije.

Upravljanje memorijom pomoću segmenata i stranica karakteriše mogućnost diskontinualne dodjele memorije. Upravljanje memorijom pomoću segmenata je tehnika koja sa jedne strane znatno umanjuje nepovoljne efekte fragmentacije, a sa druge strane ima i neke dodatne prednosti. Osnovna ideja se sastoji u tome da se ne vrši statičko povezivanje programa već se program posmatra kao skup logičkih cjelina – segmenata, gdje segment može da bude glavni program, svaka od procedura ili oblast podataka. Sve adrese u okviru jednog segmenta su relativne u odnosu na nulu. Na taj način, umjesto da program kao kod statičkog povezivanja predstavlja jedan, relativno veliki linearan adresni prostor on se sastoji od više manjih linearnih adresnih prostora. Segmenti se sada mogu smjestiti bilo gdje u memoriji s tim što se u posebnoj tabeli, tabeli segmenata, vode adrese početnih lokacija u koje su smješteni pojedinačni segmenti, kao što je prikazano na slici 3. Adresni dio naredbi programa sastoji se tada iz dva dijela, odnosno uređenog para (s, d), tako da se korišćenjem tabele segmenata na način prikazan na slici može izračunati adresa lokacije kojoj se pristupa (slika 4).


Slika 3. Pristup memoriji pomoću tabele segmenata

Polazna ideja za upravljanje memorijom pomoću segmenata je korisnički pogled na program kao skup glavnog programa, procedura, funkcija ili modula. Upravljanje memorijom pomoću segmenata podrazumijeva predstavljanje logičkog adresnog prostora kao skupa segmenata. Svaki segment ima svoje ime i dužinu. Adrese imaju dva dijela: ime segmenta i pomjeraj unutar segmenta.


Slika 4. Preslikavanje adresa pomoću tabele segmenata

Uvodenje segmenata omogućava svakom procesu da bude podjeljen na nekoliko segmenata. Sistem za upravljanje memorijom koji se zasniva na radu sa segmentima popunjava tabelu segmenata. Tabela segmenata sadrži baznu i graničnu adresu za svaki segment. Dodatna polja ("Read/Write" i "Shared") u tabeli segmenata omogućavaju zaštitu i dijeljenje memorije.

Kada se kreira novi proces tada se u kontrolni blok procesa upisuje pokazivač na praznu tabelu segmenata. Kako se procesu dodjeljuju segmenti tako se potrebni podaci upisuju u tabelu segmenata. Kada proces završi sa radom tada se svi dodjeljeni segmenti vraćaju dijelu slobodne memorije. Segmentacija prouzrokuje eksternu fragmentaciju i zahtjeva sažimanje memorije.

Na slici 4 je prikazano preslikavanje logičkih adresa pomoću tabele segmenata. Bazna adresa za dati segment S u fizičkoj memoriji je označena sa b. Dužina (veličina) segmenta je l. Pomjeraj unutar segmenta je označen sa d.

Prednost rada sa segmentima je da kada u memoriji nema dovoljno mjesta za trenutno aktivni proces, tada se iz memorije može izbaciti samo jedan segment, a ne cio proces.

S obzirom da su segmenti različite dužine i kod ovog načina upravljanja memorijom dolazi do fragmentacije, ali su njeni negativni efekti blaži od efekata fragmentacije kod dinamičkih particija.

Posebna prednost segmenata ogleda se u činjenici da ovaj način upravljanja memorijom omogućava da više različitih programa koriste iste procedure (segmente), a da se pri tome u memoriji nalazi samo jedna kopija tog segmenta. Za ovakve procedure se kaže da su "re-entrant" ili "shared" (tj. da se mogu višekratno pozivati i da ih više različitih modula može istovremeno koristiti).

U prethodnom načinu upravljanja memorijom pomoću segmenata, viđeno je da se program ne mora smjestiti u memoriju u nizu kontinualnih adresa. Drugi način realizacije iste ideje je pomoću stranica. Stranica i strana će da budu u daljem tekstu korišćene kao sinonimi. Naime, program se statički poveže tako da se dobija linearan adresni prostor kao i u slučaju upravljanja memorijom pomoću particija. Sada se taj adresni prostor dijeli u dijelove (blokove) jednake veličine koji se nazivaju stranicama. Memorijski prostor se istovremeno dijeli u blokove iste veličine koje se obično nazivaju okvirima strana. Prilikom smještanja u memoriju strane programa se mogu unijeti u bilo koji okvir strane u memoriji, s tim što se u tabeli strana za svaku stranu vodi početna adresa okvira u koji je ona smještena. Ovakav način upravljanja memorijom u potpunosti eleminiše pojavu spoljne fragmentacije. Sa druge strane, kako su veličine strana fiksne, a programu se mora dodijeliti cio broj strana, po pravilu jedan dio posljednje strane ostaje neiskorišćen. Ova pojava se naziva internom fragmentacijom. Imajući u vidu veličinu stranice može se reci da je efekat interne fragmentacije na iskorišćenje memorije praktično zanemarljiv.

Prije izvršavanja bilo kog programa potrebno je da operativni sistem:

  • odredi broj stranica u programu,
  • rezerviše dovoljan broj okvira stranica u operativnoj memoriji,
  • preslika stranice programa u okvire stranica.

Tabela stranica se može hardverski implementirati na više načina. Na primjer, jedno rješenje je da se koristi skup posebnih registara u kojima se čuvaju bazne adrese okvira stranica. Drugo moguće rješenje je da se koristi memorijska tabela stranica sa dodatkom baznog registra za tabelu stranica (eng. Page Table Base Register, PTBR). Bazni registar za tabelu stranica pokazuje na tekuću tabelu stranica. Ostala moguća rješenja se najčešće zasnivaju na kombinaciji navedenih rješenja i tabelama stranica koje su realizovane u više nivoa.

Upravljanje memorijom pomoću stranica je veoma efikasan i jednostavan način upravljanja. U odnosu na segmentiranje, straničenje ima tu prednost da spriječava pojavu spoljne fragmentacije i omogućava visok stepen iskorišćenja memorije. Kao i segmentiranje, i straničenje je jedna od tehnika za realizaciju virtuelne memorije. Nedostatak straničenja u odnosu na segmentiranje ogleda se u činjenici da kod straničenja logičke cjeline poslije povezivanja gube svoj identitet.

Upravljanje memorijom pomoću statičkih stranica smanjuje fragmentaciju i omogućava jednostavniju dodjelu i zamjenu memorijskog prostora. Takođe, rad sa stranicama omogućava dodjelu memorijskog prostora koji nije kontinualan, odnosno dodjeljen memorijski prostor može da bude iz više nesusjednih dijelova fizičke memorije.

    Index