Upload
vts-rs
View
0
Download
0
Embed Size (px)
Citation preview
Sadržaj
I
VISOKA TEHNIČKA ŠKOLA SKRIPTA IZ PREDMETA:
OPERATIVNI SISTEMI RAČUNARA
ODABRANA POGLAVLJA IZ OPERATIVNIH SISTEMA
SADRŽAJ
1. UVOD 2. UPRAVLJANJE PROCESIMA 3. UPRAVLJANJE PROCESOROM 4.UPRAVLJANJE MEMORIJOM 5.UPRAVLJANJE DATOTEKAMA
Kragujevac, Maj 2008.
Mr Srđan Atanasijević, dipl.ing.inf.
Operativni sistemi: Uvod
1
1 UVOD
Pod operativnim sistemom podrazumeva se organizovan skup sistemskih programa koji deluju kao
posrednik izmedju hardvera i korisnika, pružajući korisniku usluge koje olakšavaju projektovanje,
implementaciju i održavanje programa, a istovremeno upravljaju dodeljivanjem (alokacijom) resursa
sistema u cilju njegovog efikasnog rada, ili kraće rečeno:
Operativni sistem je organizovan skup sistemskih programa koji upravlja radom različitih
komponenti računarskog sistema sa ciljem da omogući efikasan rad korisnika i efikasno korišćenje
resursa samog sistema.
Vrlo je teško dati definiciju operativnog sistema na osnovu onoga što on jeste. I u stručnoj
literaturi koja se bavi ovom problematikom, mnogo češće se daje definicija na osnovu onoga što on
radi. Operativni sistem je program namenjen da zajedno sa hardverom računara obezbedi upotrebljiv
računarski sistem. Pod tim se podrazumeva da operativni sistem treba da obezbedi korisniku udobno
radno okruženje i korišćenje resursa računara na najbolji mogući način. Pored ovih, on vrši i kontrolnu
funkciju - kontroliše da li se računar koristi na odgovarajući način i sprečava eventualne greške.
Operativni sistem često vodi i evidenciju korišćenja resursa, događaja na sistemu, otkaza sistema i sl.
Mesto operativnog sistema u okviru računarskog sistema se može prikazati šemom na slici 1.
HARDVER
OPERATIVNI SISTEM
APLIKATIVNI SOFTVER
KORISNICI
Slika 1. Struktura računarskog sistema.
Najčešće se operativni sistem i definiše prema mestu koje zauzima u njoj:
Operativni sistem je skup programa koji predstavljaju interfejs između korisnika i hardvera računarskog
sistema.
Druga definicija koja se takođe često koristi je vezana je za resurse kojima operativni sistem upravlja:
Operativni sistem je skup programa za upravljanje: procesorom (jednim ili više), operativnom memorijom, I/O
uređajima i fajlovima .
Operativni sistemi: Uvod
2
1.1 Klasifikacija operativnih sistema
Jedna od najčešćih podela operativnih sistema, vrši se na osnovu broja korisnika i programa koji u jednom
trenutku koriste računarski sistem.
Po ovom kriterijumu operativni sistemi se dele na:
• monokorisničke/monoprogramske operativne sisteme kod kojih postoji samo jedan korisnik i jedan program
koji se izvršava u bilo kom trenutku vremena. Personalni računari rade sa ovakvim operativnim sistemima -
CP/M, DOS...
• multikorisničke/monoprogramske operativne sisteme kod kojih više korisnika koriste jedan isti program.
Ovakav operativni sistem srećemo kod namenskih uređaja - rezervisanje avionskih karata, obrada poštanskih
usluga...
• multikorisničke/multiprogramske operativne sisteme koji predstavljaju najopštiji slučaj. U ovom slučaju
različiti korisnici izvršavaju različite programe. Izvršavanje programa je kvaziparalelno ili kako se to češće
kaže konkurentno. Program se izvršava za vreme dok drugi program čeka na neki događaj (na periferiju koja
je znatno sporija od procesora, ili neki resurs zauzet od strane drugog programa koji je višeg prioriteta od
tekućeg). Time se obezbeđuje paralelan rad procesora i periferije što doprinosi boljoj iskorišćenosti
procesora.
Druga podela operativnih sistema se vrši na osnovu tipa obrade i komunikacije sa korisnikom:
• Operativni sistemi sa paketnom obradom (batch processing) su najstariji po vremenu nastanka, a ime im
potiče iz vremena kada su programi unošeni putem bušenih kartica. Poslovi se izvršavaju onim redosledom
kojim pristižu u red poslova spremnih za izvršavanje. Često se poslovi dele u više redova (klasa) po hitnosti
njihovog izvršavanja. Skoro svi savremeni operativni sistemi nude i ovaj tip obrade (čak i operativni sistemi
namenjeni personalnim računarima).
• Operativni sistemi sa raspodijeljenim vremenom ("Time Sharing") su klasa kojoj pripadaju skoro svi
savremeni multiprogramski operativni sistemi. Svakom od procesa (korisnika) se dodeljuje određeni kvant
vremena u kome isti dobija na korišćenje procesor - interval u kome se program izvršava. Po isteku kvanta
vremena procesor se oduzima tekućem i dodeljuje drugom procesu (korisniku).
• Operativni sistemi za rad u realnom vremenu (Real Time Operating Systems) predstavljaju treću klasu
operativnih sistema. Njihova namena je upravljanje industrijskim procesima i mašinama, to jest obrada
spoljnih asinhronih događaja. Spadaju u klasu multiprogramskih operativnih sistema od kojih se traži da
ispune zahtev reakcije u nekom fiksiranom vremenskom intervalu. U slučaju da ovaj uslov nije zadovoljen
mogući su gubitci vitalnih podataka i katastrofalne posledice usled nereagovanja sistema.
1.2 Struktura operativnih sistema
Zavisno od stepena složenosti i načina realizacije operativni sistemi po strukturi mogu biti vrlo raznoliki.
• Jednostavni, mali operativni sistemi mogu imati takozvanu monolitnu strukturu, to jest predstavljati skup
programa koje poziva korisnički program i koji se međusobno pozivaju u cilju obavljanja određenih
funkcija.
• Za veće operativne sisteme, kod kojih je broj funkcija koje se od sistema traže znatno veći, ovakva
struktura je nepogodna, pa se preporučuje takozvana slojevita (spratna) struktura. Programi se grupišu u
Operativni sistemi: Uvod
3
slojeve koji se označavaju brojevima: 1, 2, ..., n. Pri tome se podrazumeva da moduli sloja 5 pozivaju
samo module sloja 4, moduli sloja 4, samo module sloja 3 itd. Često se ovo pravilo ne poštuje do kraja
pa moduli sloja 5 mogu da pozivaju i module sloja 3, na primer.
Dva primera slojevite strukture data su na slici 2.:
KORISNIČKI PROGRAMI 6
FAJL SISTEM 5 KORISNIČKI PROGRAMI
UPRAVLJANJE I/O UREĐAJIMA 4 FAJL SISTEM
GORNJI NIVO UPRAVLJANJA
PROCESIMA
3 UPRAVLJANJE I/O UREĐAJIMA
UPRAVLJANJE OPERATIVNOM
MEMORIJOM
2 UPRAVLJANJE OPERATIVNOM
MEMORIJOM
DONJI NIVO UPRAVLJANJA
PROCESIMA
1 JEZGRO
(UPRAVLJANJE PROCESIMA)
HARDVER 0 HARDVER
Slika 2. Dva primera operativnih sistema sa slojevitom srukturom.
U jednostavnijoj varijanti takozvano jezgro (kernel), sadrži samo deo za upravljanje procesima (Pod
terminom upravljanje procesima podrazumeva se dodeljivanje procesora određenom procesu). Svi ostali
moduli nalaze se van jezgra. Jezgro operativnog sistema se po pravilu pravi tako da radi u privilegovanom
režimu rada - nijedna druga rutina ni događaj ne može prekinuti izvršavanje rutina koje mu pripadaju.
• Treći pristup realizaciji operativnog sistema koristi tzv. klijent - server koncepciju. Sve funkcije
operativnog sistema realizuju se pomoću procesa koji se nazivaju serveri. Korisnički programi se
nazivaju klijenti i u okviru njih se vrši pozivanje funkcija i preuzimanje rezultata. Jezgro operativnog
sistema pri tome služi samo za organizaciju komunikacije između klijenata i servera (slika 3.).
PROCES KLIJENT 1
PROCES SERVER 1
JEZGRO OPERATIVNOG SISTEMA
PROCES KLIJENT 2 PROCES KLIJENT N
PROCES SERVER 2 PROCES SERVER N
Slika 3. Struktura operativnog sistema sa klijent-server arhitekturom.
1.3 Komunikacija korisnika i operativnog sistema
Komunikacija korisnika i operativnog sistema se odvija putem sistemskih poziva. Njima se iz korisničkog
programa pokreću funkcije koje obezbeđuje operativni sistem. Sistemski pozivi u okviru korisničke aplikacije
imaju izgled naredbi viših programskih jezika. Na tom mestu prevodilac ubacuje makroproširenje - niz
instrukcija koje procesor mora da izvrši da bi se pokrenula funkcija operativnog sistema. Njima se obezbeđuje
prenos parametara sistemskog poziva na mesto gde ih operativni sistem očekuje, poziva se funkcija operativnog
sistema, i vraćaju rezultati sistemskog poziva.
1.4 Pristup problematici operativnih sistema tokom kursa
»Uvod u operativne sisteme«
Operativni sistemi: Uvod
4
Tokom predavanja apstrahovaćemo problematiku operativnih sistema prema sledećoj definiciji,
iznetom na početku poglavlja:
Operativni sistem je organizovan skup sistemskih programa koji upravlja radom različitih
komponenti računarskog sistema sa ciljem da omogući efikasan rad korisnika i efikasno korišćenje
resursa samog sistema.
Pri tome se funkcije operativnog sistema mogu, grubo, podeliti u četiri grupe:
- upravljanje procesima
- upravljanje memorijom
- upravljanje uredjajima
- upravljanje podacima.
Očigledno je da akcenat na reči upravljanje u navodjenju funkcija operativnog sistema nije
slučajan. Naime, u situaciji kada se u računaru odvija više aktivnih procesa (programa koji se
izvršavaju) jasno je da će ti procesi konkurisati jedan drugom u pogledu korišćenja resursa računara
(procesora, memorije, različitih uredjaja, datoteka itd.). Zadatak operativnog sistema je da omogući
neometano odvijanje svih procesa na takav način da se svi resursi sistema što efikasnije iskoriste.
Sa stanovišta načina komuniciranja izmedju korisnika i računara i vremena odziva računara na
zahtev korisnika razlikujemo tri osnovna režima rada računarskog sistema:
Grupna (ili serijska - batch) obrada je takav način rada računara u kome korisnici predaju svoje
poslove (job-ove) na izvršenje posredstvom ulaznih jedinica računara i koji se zatim odvijaju jedan za
drugim u nizu, pri čemu korisnik nema mogućnost komuniciranja sa svojim poslom.Vreme odziva
računara je obično u granicama od nekoliko minuta.
Obrada sa zajedničkim korišćenjem vremena (time - sharing) je takav način rada računara u kome
više korisnika paralelno (istovremeno) koristi računar i pri tome komunicira sa svojim poslovima.
Paralelnost u radu se postiže tako što se svakom korisničkom programu dodeljuje jedan kvantum
vremena centralnog procesora (Pc-a) (na primer 100 ms), tako da je odziv na svaku poruku korisnika u
granicama od nekoliko sekundi. Po isteku vremenskog kvantuma dodeljenog jednom procesu, on se
prekida, bez obzira da li je završio sa radom ili ne, a procesor se dodeljuje sledećem procesu u redu
čekanja.
Rad u realnom vremenu (real-time) je takav način rada u kome se nekom procesu omogućava
odziv sistema u strogo zahtevanom vremenskom intervalu (izraženom najčešće u milisekundama ili
sekundama u zavisnosti od samog procesa). Takvim procesima se omogućava da generisanjem zahteva
(signala) za prekid dobijaju centralni procesor na raspolaganje.
Način (režim) rada računarskog sistema u znatnoj meri utiče na projektovanje i strukturu
operativnog sistema, pri čemu često jedan operativni sistem može da podržava više različitih režima
rada računara.
Operativni sistemi: Upravljanje procesima
2
2 UPRAVLJANJE PROCESIMA
2.1 PROCES, STANJA PROCESA I KONTROLNI BLOK PROCESA
Pod procesom se, najkraće rečeno, podrazumeva program koji se izvršava. Naime,
program predstavlja statički pojam - skup instrukcija, odnos opisa akcija koje treba izvršiti.
Samo izvršavanje tih akcija dovodi do promene stanja (sadržaja) registara centralnog
procesora, memorijskih lokacija i drugih uredjaja računarskog sistema; drugim rečima u
računarskom sistemu se odvija proces koji menja stanje sistema.
SPREMAN ^EKA
IZV[AVA
SE
aktiviranje
dodeljen Pcistekao
vremenski
kventum
zahtev za resurs
dodeljen resurs
zavr{etak
programa
Slika 2.1
Zahtevom za izvršavanje odredjenog programa aktivira se odgovarajući proces. Takav
zahtev može da potekne od korisnika, od operativnog sistema ili od nekog drugog već
aktivnog procesa. Kada se tako aktiviranom procesu dodeli (od strane operativnog
sistema) memorija i drugi resursi neophodni za njegovo odvijanje, proces se nalazi u
stanju SPREMAN (za rad), gde u redu sa drugim spremnim procesima čeka na
dodeljivanje procesora, (slika 2.1). Kada mu se dodeli procesor proces počinje da se
izvršava, tj. prelazi u stanje IZVRŠAVA SE. U toku izvršavanja može doći do prekida
procesa jer on sam zahteva izvršavanje neke ulazne/izlazne operacije. Proces tada prelazi
u stanje ČEKA, gde u redu sa drugim procesima čeka da se oslobodi neki od U/I
procesora i U/I uredjaja da bi se zahtevana U/I instrukcija izvršila. Kada se to dogodi
proces je ponovo SPREMAN za rad. No, proces može biti prekinut od strane operativnog
sistema i iz drugih razloga (istek vremenskog kvantuma koji mu je dodeljen, na primer)
tako da je on u stvari i dalje SPREMAN za rad ali mora da čeka svoj red za ponovno
Operativni sistemi: Upravljanje procesima
3
dodeljivanje procesora. Konačno, moguće je da se proces izvrši do kraja i operativni
sistem o njemu dalje ne vodi računa.
Navedenu podelu stanja u kojima može da se nadje aktivan proces moguće je "finije"
podeliti no za potrebe daljeg izlaganja ovakva podela je sasvim dovoljna.
Za svaki aktivan proces, operativni sistem mora da vodi odredjene podatke. Skup
takvih podataka naziva se kontrolni blok procesa, KBP (ili kako se još kaže vektor stanja ili
deskriptor procesa). Tipičan izgled jednog KBP-a prikazan je na slici 2.2.
Kako operativni sistem mora da vodi kontrolni blok procesa za svaki aktivan proces,
očigledno je da će u memoriji postojati više KBP-a, koji su medjusobno povezani,
najčešće u obliku liste. O održavanju i korišćenju takve liste biće više reči kasnije.
Ime procesa
Identitet vlasnika
Prioritet
Stanje
PSW
Oblast programa
Gornja granica prog.
Oblast podataka
Gornja granica podataka
Op{ti registar - 1
Program
Podaci
Slika 2.2 Kontrolni blok procesa
2.1.1 UPOREDNI PROCESI
Vratimo se za trenutak definiciji procesa koju smo dali u prethodnom odeljku, gde smo
rekli da je proces program koji se izvršava. Odatle proizlazi da pojmovi procesa i programa
nisu ekvivalentni. Naime, program je statički pojam - označava skup instrukcija koje
definišu (opisuje) akcije ili radnje koje treba izvršiti. No, da bi se te radnje mogle izvršiti
mora da postoji i aktivni element-procesor koji izvršava instrukcije. Prema tome, uslov za
nastanak procesa je postojanje programa i procesora koji izvršava program, pa je proces
dinamički pojam definisan kao par <program, procesor>.
Operativni sistemi: Upravljanje procesima
4
P
K K
P
K
P
P1
P2
P3
P4
P3 P5 P6 P4
P7 P8
P1 P2 P3 P4
(a) (b) (c)
P1
P2
Slika 2.3 Podela procesa na podprocese
Posmatrajmo sada jedan proces i predpostavimo da se on može podeliti na više
jednostavnijih procesa, koje ćemo nazvati podprocesima. Tada pod sekvencijalnim
procesom podrazumevamo proces čija je medjuzavisnost podprocesa takva da jedan
podproces ne može da počne dok se neki drugi podproces ne završi. Takav proces se
može predstaviti kao na slici 2.3.(a). gde P i K označavaju početak, odnosno kraj
posmatranog procesa, Pi, i=1,4 označava podprocese. Na slici 2.3.(b) prikazana je
situacija u kojoj je sistem podprocesa takav da se oni mogu izvršavati uporedo (paralelno).
Konačno na slici 2.3.(c) prikazana je situacija u kojoj je prethodjenje procesa takvo da se
neki mogu izvršavati paralelno, a neki se moraju izvršavati sekvencijalno. Prikazani
dijagrami nazivaju se grafovi toka procesa.
Posmatrajmo sada jedan program u kome je potrebno da se izračuna vrednost
aritmetičkog izraza
(a + b) * (c + d) - e / f
Na slici 2.4. prikazano je kako se pojedini podizrazi mogu paralelno izračunati. No da li
je to i ostvarljivo? Odgovor je da - ako postoji više nezavisnih aktivnih elemenata -
procesora. Drugim rečima, potvrdjuje se valjanost definicije da je proces definisan parom
<program, procesor>.
Operativni sistemi: Upravljanje procesima
5
a b c d
+ + ef
K
K
t1
:=a+b
t3
:=t1
*t2
t2
:=c+d
t4
:=e/f
t5
:=t3
-t4
Slika 2.4 Paralelno izračunavanje delova izraza
Iz prethodne diskusije proizlazi da je paralelno izvršavanje više programa, odnosno
paralelno (istovremeno) odvijanje više procesa u računaru moguće samo ako se
računarski sistem sastoji od više centralnih procesora. Za takav računarski sistem se kaže
da je višeprocesorski (multiprocesorski) sistem. No, to ne znači da je za višeprogramski
rad (multiprogramiranje) neophodno da se računar sastoji od više centralnih procesora.
Naime, većina računarskih sistema se sastoji od jednog centralnog procesora i više U/I
procesora. To praktično znači da procesor može da u jednom vremenskom trenutku
izvršava naredbe samo jednog programa. U trenutku kada taj program zahteva izvršenje
neke U/I operacije procesor zahtev prenosi nekom od Pio (input/output processor) koji će
obaviti odgovarajuću U/I operaciju. Za to vreme procesor može izvršavati naredbe nekog
drugog programa, sve dotle dok taj program ne zahteva izvršenje neke U/I operacije. Tada
procesor prelazi na izvršavanje naredbi nekog trećeg programa, ili se vraća na prvi
program ako je završena U/I operacija koju je on zahtevao. Opisana situacija bi se za dva
aktivna programa mogla prikazati kao na slici 2.5. U bilo kom vremenskom trenutku t ∈
(0,T) procesor izvršava naredbe samo jednog programa, ali gledajući ceo interval (0,T)
možemo zaključiti da se oba programa nalaze izmedju svog početka i završetka. Za
ovakav način izvršavanja programa kaže se da se oni izvršavaju kvaziparalelno.
P1
P2
T0 t
U bilo kom trenutku izvr{ava se
samo jedan program
Slika 2.5 Kvaziparalelno izvršavanje dva procesa
Operativni sistemi: Upravljanje procesima
6
Pri tome, treba posebno istaći da dva ili više procesa, bez obzira da li se izvršavaju
paralelno ili kvaziparalelno, konkurišu jedan drugom za dobijanje resursa računara
(hardvera, softvera, datoteka itd.). Jedan od bitnih problema operativnog sistema je
upravljanje ovakvim, uporednim procesima.
2.1.2 POJAM NITI
Aktivnost procesa karakteriše redosled u kome se izvršavaju naredbe programa. Ovaj
redosled se naziva trag (trace) procesa.
Trag procesa može da se prikaže kao nit (thread) koja povezuje izvršene naredbe u
redosledu njihovog izvršavanja. Ako se za proces veže jedna nit, tada ona ima atribute
procesa, znači njegovo stanje i njegov prioritet. U toku aktivnosti niti izvršavaju se naredbe
koje ona povezuje.
Vezivanje za proces jedne niti je posledica pretpostavke da proces odgovara
izvršavanju sekvencijalnog programa. Za sekvencijalni program se podrazumeva da se
naredbe izvršavaju jedna za drugom u unapred zadanom redosledu, koji je zavisan od
obrađivanih podataka. Ovakve naredbe obrazuju sekvencu naredbi.
Praksa pokazuje da je korisno za procese vezati više od jedne niti. U tom slučaju stek,
prioritet i stanje se ne vezuju za proces, nego za njegove niti. Znači, svaka od niti procesa
ima svoj stek, svoj prioritet i svoje stanje, odnosno svoj deskriptor. Na primer, za editiranje
teksta su važne, između ostalog, dve aktivnosti. Prva je posvećena interakciji sa
korisnikom, a druga je zadužena za periodično smeštanje unesenog teksta na masovnu
memoriju (radi sprečavanja gubljenja teksta).
Ako je za editorski proces vezana jedna nit, tada se pomenute aktivnosti odvijaju jedna
za drugom (sekvencijalno). Znači, za vreme trajanja druge aktivnosti nije moguća
interakcija sa korisnikom, što je ozbiljan nedostatak. On se može otkloniti, ako se za
editorski proces vežu dve niti raznih prioriteta. Prioritetnija (hitna) nit se pridružuje prvoj
aktivnosti, a manje prioritetna (pozadinska) nit se pridružuje drugoj aktivnosti. Pod
pretpostavkom da hitna nit čeka na interakciju sa korisnikom, pozadinska nit može biti
aktivna sve dok, na primer, pritisak dirke na tastraturi ne najavi početak interakcije sa
korisnikom. Tada obrada odgovarajućeg prekida prevodi hitnu nit u stanje spremna, pa se
procesor preključuje sa prekinute pozadinske niti na hitnu nit. U toku svoje aktivnosti hitna
nit obavi interakciju sa korisnikom i vrati se u stanje čeka, što dovodi do preključivanja
procesora na prekinutu pozadinsku nit. Zahvaljujući preključivanju procesora sa
pozadinske niti na hitnu nit, u toku editiranja nema perioda bez odziva. Procesi sa više niti
odgovaraju izvršavanju konkurentnih programa u kojima istovremeno (concurrently) postoji
više relativno nezavisnih sekvenci naredbi.
Operativni sistemi: Upravljanje procesima
7
2.1.3 PROBLEMI UPRAVLJANJA UPOREDNIM PROCESIMA
U cilju ilustracije osnovnih problema koji se javljaju kod upravljanja uporednim
procesima posmatrajmo proces S i R na Slici. 2.6 Proces S (pošiljalac) formira poruke i
upisuje ih u bafer čiji je maksimalni kapacitet C-poruka. Pri tome, proces S je dužan da
poveća vrednost promenljive N kako bi drugi proces, R (primalac) znao koliko ima poruka
u baferu. Slično tome, proces R po uzimanju poruke iz bafera dužan je da vrednost N
smanji za 1, kako bi proces S znao koliko ima mesta u baferu.
S: begin P: begin
stop:=false; stop:=false;
repeat repeat
pripremi_poruku;
prihvati_poruku;
pošalji_poruku; n:=n-1;;
n:=n+1; obradi_poruku
until stop; until stop;
end; end;
Bafer kapaciteta C poruka
Slika 2.6
Da bi procesi S i R ispravno funkcionisali, u situaciji kada njihove relativne brzine nisu
poznate, neophodno je da budu ispunjeni sledeći uslovi:
- pošiljalac S ne sme da šalje poruku kada je bafer pun jer bi se ona izgubila
- primalac R ne sme da uzima poruku kada je bafer prazan jer bi to mogao
protumačiti kao signal da treba da prestane sa radom
- procesi ne smeju istovremeno pristupiti baferu
- vrednost promenljive N mora, u trenutku pristupa baferu bilo kog procesa, biti
jednaka stvarnom broju poruka u baferu.
Dok je predposlednji zahtev očigledan, za poslednji bi se moglo reći da je suvišan.
Medjutim ne treba zaboraviti da bi se naredbe kojima se menja vrednost N, u slučaju
jednoadresnog računara prevele na sledeće mašinske instrukcije.
Operativni sistemi: Upravljanje procesima
8
Proces S: N: = N + 1: Proces R: N: = N - 1:
LOAD N LOAD N
prekid → prekid →
ADD JEDAN SUB JEDAN
STORE N STORE N
Predpostavimo sada da je trenutna vrednost N = 4 i da u baferu ima stvarno 4 poruke.
Neka je dalje proces S upisao novu poruku u bafer tako da sada u baferu ima 5 poruka.
Proces S sada izvršava instrukciju LOAD N i čita vrednost N = 4. Ako posle izvršenja ove
naredbe dodje do prekida Pc se dodeljuje procesu R, koji uzima jednu poruku iz bafera
(sada ih je 4) i potom izvršava instrukcije LOAD, SUB i STORE. Vrednost N biće posle
toga jednaka 3 (zašto?). Ako sada prekinemo proces R i Pc dodelimo procesu S on će
izvršiti naredbe ADD i STORE, tako da će vrednost promenljive N biti 5, a u baferu će biti
4 poruke.
DEFINICIJA POJMA KRITIČNE SEKCIJE PROGRAMA
Opisani problem nastao je zbog toga što su i bafer i promenljiva N zajednički resursi za
procese S i R. Skup instrukcija kojima jedan proces pristupa resursu koji deli sa nekim
drugim procesom naziva se kritična sekcija. Očigledno, ne smemo dozvoliti da dva
procesa budu istovremeno u svojim kritičnim sekcijama - neophodno je obezbediti njihovo
medjusobno isključenje u odnosu na kritične sekcije.
Prva dva zahteva ukazuju na drugi problem. Naime, da bi oni bili zadovoljeni očigledno
je neophodno da obezbedimo sinhronizaciju procesa S tako da, ako je bafer pun, on mora
da čeka da proces R uzme jednu poruku i smanji vrednost N za jedan i tako generiše
signal procesu S da može da nastavi sa radom. Slično tome, ako je bafer prazan R mora
da čeka, sve dok S ne upiše poruku u bafer i vrednost N poveća za jedan i time signalizira
procesu R da može da nastavi sa radom.
POJAM MEĐUSOBNOG BLOKIRANJA PROCESA
Posmatrajmo sada dva procesa, P1 i P2, koji koriste iste resurse R1 i R2, ali ih
zahtevaju i uzimaju u obrnutom redosledu. Predpostavimo da proces P1 prvi počne sa
radom i uzme oba resursa pre nego što dodje do njegovog prekida (na primer zbog isteka
vremenskog kvantuma koji mi je dodeljen). Neka se zatim procesor dodeli procesu P2.
Ovaj proces će očigledno moći da se izvršava do trenutka kada zahteva resurs R2, kada
će morati da se prekine i predje u stanje ČEKA. No, proces P1 koji raspolaže sa oba
zahtevana resursa može da nastavi sa radom, pri čemu će oslobodjati resurse i omogućiti
i procesu P2 da se izvrši. Analogna situacija bi nastala kada bi proces P2 prvi dobio
centralni procesor i dobio oba resursa pre nego što bude prekinut. Medjutim,
predpostavimo sada da proces P1 počne prvi sa radom i dodje do prekida posle uzimanja
Operativni sistemi: Upravljanje procesima
9
resursa R1, a pre uzimanja resursa R2. Neka se u toj situaciji procesu P2 dodeli centralni
procesor i neka proces P2 uzme resurs R2. On će dalje nastaviti sa radom sve do
trenutka kada treba da uzme resurs R1.
P1: begin P2: begin
uzmi R1; uzmi R2;
- -
uzmi R2; uzmi R1;
- -
vrati R2; vrati R2;
- -
vrati R1; vrati R1;
end. end.
Slika 2.7 Situacija kada može nastati međusobno blokiranje procesa
No, kako je resurs R1 već zauzet proces B će da čeka da se resurs oslobodi. procesor
se tada dodeljuje procesu P1, no on će moći da se izvršava samo do trenutka kada treba
da uzme resurs R2. Kako je resurs R2 već zauzet proces P1 mora da čeka na njegovo
oslobadjanje. Očigledno je da ni proces P1 ni proces P2 neće moći da se dalje odvijaju jer
čekaju jedan na drugog. Za opisanu situaciju se kaže da su procesi medjusobno blokirani,
odnosno da je došlo do potpunog zastoja.
Konačno treba istaći da je neophodno realizovati mehanizam u računaru koji će
omogućiti medjusobnu komunikaciju procesa.
U daljem izlaganju daćemo rezime osnovna četiri problema u upravljanju procesima,
uslove koje treba zadovoljiti u njihovom rešavanju i razmotrićemo neka od mogućih
rešenja.
Problem 1. Medjusobno isključivanje procesa u odnosu na kritične sekcije znači da se u
bilo kom vremenskom trenutku samo jedan proces može naći u svojoj kritičnoj
sekciji.
Problem 2. Sinhronizacija procesa znači da odredjen proces ne može ići dalje od unapred
definisane tačke bez eksplicitnog signala koji on sam ne može da generiše.
Problem 3. Dva procesa su blokirana ako nijedan od njih ne može da nastavi sa radom
dok drugi ne nastavi sa radom. Sistem je blokiran ako su svi procesi blokirani.
Problem 4. U računarskom sistemu neophodno je realizovati mehanizam za komunikaciju
izmedju procesa na takav način da im omogući da medjusobno saradjuju i
uspešno razmenjuju poruke.
Operativni sistemi: Upravljanje procesima
10
Uspešno rešenje navedenih problema moguće je ako operativni sistem obezbedi
zadovoljenje sledeća tri osnovna zahteva:
Zahtev 1. Uporedni procesi sa kritičnim sekcijama, jedan u odnosu na drugog, moraju se
medjusobno isključivati tako da se istovremeno ne nalaze u svojim kritičnim
sekcijama.
Zahtev 2. Proces koji se zaustavio van svoje kritične sekcije ne sme onemogućiti dalje
odvijanje drugih, nezavisnih procesa.
Zahtev 3. Procesi ne smeju beskonačno dugo čekati na resurse ili signale.
Operativni sistemi: Upravljanje procesima
11
2.1.4 MEDJUSOBNO ISKLJUČENJE I SINHRONIZACIJA
Posmatrajmo dva sekvencijalna, medjusobno nezavisna procesa, uz ograničenje da
ne smeju istovremeno biti u svojim kritičnim sekcijama. Razmotrimo neka od mogućih
rešenja problema medjusobnog isključenja i sinhronizacije posmatranih procesa koja će
istovremeno zadovoljiti i zahteve definisane u prethodnom odeljku.
Rešenje 1: Uvedimo jednu promenljivu, koju ćemo nazvati prebaci, čije vrednosti
mogu biti 1 ili 2 u zavisnosti od toga da li je procesu P1, odnosno procesu P2, dozvoljen
ulazak u kritičnu sekciju.
var prebaci : integer;
begin
prebaci := 1; (* postavi početnu vrednost promenljive *)
parbegin
P1 : begin
stop:=false
repeat
L1: if prebaci = 2 then goto L1;
kritična_sekcija_1;
prebaci : = 2;
ostale_naredbe_1;
until stop;
end;
P2 : begin
stop:=false;
repeat
L2: if prebaci = 1 then goto L2;
kritična_sekcija_2;
prebaci : = 1;
ostale_naredbe_2;
until stop;
end;
parend;
end.
Operativni sistemi: Upravljanje procesima
12
Analizom ovog rešenja može se pokazati da je problem medjusobnog isključenja
uspešno rešen. Naime, pretpostavimo da je proces P1 prvi dobio centralni procesor i da je
izvršio testiranje promenljive prebaci. Kako je početna vrednost ove promenljive jednaka
jedinici proces P1 ulazi u svoju kritičnu sekciju. Pretpostavimo sada da je proces P1
prekinut u svojoj kritičnoj sekciji i da je procesor dodeljen procesu P2. Ovaj proces će
takodje testirati vrednost promenljive prebaci, ali kako je ona i dalje jednaka jedinici
proces P2 neće moći da napreduje već će se stalno vraćati na izvršenje iste naredbe sa
simboličkom adresom L2. Na taj način proces P2 neće moći da udje u svoju kritičnu
sekciju sve dok proces P1 ne dobije ponovo procesor, izvrši sve naredbe svoje kritične
sekcije i vrednost promenljive prebaci ne postavi na dva. Analognim razmišljanjem može
se pokazati da ni proces P1 neće moći da udje u kritičnu sekciju ukoliko se proces P2
nalazi u svojoj kritičnoj sekciji.
Ovo rešenje ima medjutim i bitnih nedostataka koji se ogledaju u sledećem:
(i) rešenje je restriktivno : s obzirom na početni uslov u kritičnu sekciju može prvo ući
samo proces P1, a zatim samo proces P2, pa opet P1, itd.
(ii) prekid jednog od procesa van kritične sekcije onemogućava odvijanje drugog procesa,
što znači da zahtev 2 nije zadovoljen. Naime, prepostavimo da se proces P1 završi
(normalno ili abnormalno, svejedno) van kritične sekcije, na primer posle postavljanja
promenljive prebaci na dva, u delu ostale_naredbe_1. Proces P2 će u tom slučaju moći
da udje u svoju kritičnu sekciju još samo jedanput jer će po izlasku iz kritične sekcije
vrednost promenljive prebaci postaviti na jedinicu čime će sebi onemogućiti ponovni
ulazak u kritičnu sekciju, pa samim tim i dalje izvršavanje.
Pored navedenih nedostataka ovog rešenja treba istaći da nije opšte, odnosno da važi
samo u slučaju dva procesa koji imaju kritične sekcije jedan u odnosu na drugog.
Uvodjenje novih procesa praktično nije moguće.
Rešenje 2: U prethodnom rešenju promenljiva prebaci imala je ulogu "skretnice"
izmedju dva procesa, što je zapravo i uzrok opisanim nedostacima. Umesto jedne
promenljive takvog tipa uvedimo za svaki proces posebnu promenljivu čija će vrednost
ukazivati na to da li se posmatrani proces nalazi u kritičnoj sekciji ili ne.
Sada možemo pokušati da rešimo problem medjusobnog isključenja na sledeći način:
var C1, C2 : integer; (* Ci = 0 proces Pi je u kritičnoj sekciji
Ci = 1 proces Pi nije u kritičnoj sekciji *)
begin
Operativni sistemi: Upravljanje procesima
13
C1:=1; C2:=1; (* početni uslov - nijedan proces nije u kritičnoj sekciji *)
parbegin
P1 : begin
repeat
L1 : if C2 = 0 then goto L1;
prekid _1 →
C1 : = 0;
kritična_sekcija_1;
C1 : = 1;
ostale_naredbe_1;
until stop;
end;
P2 : begin
repeat
L2 : if C1 = 0 then goto L2;
C2 : = 0;
prekid _2 → kritična_sekcija_2;
C2 : = 1;
ostale_naredbe_2;
until stop;
end;
parend;
end.
Ovo rešenje nije restriktivno jer se može pokazati da je redosled ulazaka procesa u
kritične sekcije proizvoljan. Naime, očigledno je da pri zadatim početnim uslovima bilo koji
proces može prvi da udje u svoju kritičnu sekciju, a kako, po izlasku iz kritične sekcije,
svaki proces opet uspostavlja početnu vrednost odgovarajuće promenljive C1, odnosno
C2 to znači da opet bilo koji od njih može da udje u svoju kritičnu sekciju. Dalje, može se
uočiti da bilo koji od procesa, ako se prekine van svoje kritične sekcije, ne ometa
izvršavanje onog drugog procesa.
Medjutim, ukoliko dodje do prekida procesa na mestima označenim kao prekid_broj
→→→→ oba procesa će se istovremeno naći u svojim kritičnim sekcijama, što znači da osnovni
cilj ovog rešenja nije ostvaren, odnosno da nije obezbedjeno medjusobno isključenje
procesa u odnosu na kritične sekcije. Naime, pretpostavimo da je trenutno centralni
procesor dodeljen procesu P1, koji je testirao vrednost promenljive C2 i kako je ona bila
jednaka jedinici, pokazivač instrukcija je postavljen na adresu sledeće instrukcije (C1:=0).
Neka je medjutim, proces P1 prekinut (prekid_1) pre nego što je izvršio tu instrukciju, što
Operativni sistemi: Upravljanje procesima
14
znači da je vrednost promenljive C1 i dalje jednaka jedinici. Ako se sada procesor dodeli
procesu P2, on će posle ispitivanja vrednost promenljive C1 moći da nastavi sa radom, da
promenljivu C2 postavi na nulu i da udje u svoju kritičnu sekciju. Nastala situacija je
kritična jer može dovesti do toga da se oba procesa nadju istovremeno u svojim kritičnim
sekcijama. Neka, naime u ovoj situaciji dodje do prekida procesa P2 (prekid_2) i neka se
procesor ponovo dodeli procesu P1. Kako je ovaj proces prekinut posle izvršene
instrukcije testiranja vrednosti promenljive C2, on će nastaviti izvršavanje od instrukcije
čiju je adresu sadržavao pokazivač instrukcija u trenutku prekida, tj. postaviće vrednost
promenljive C1 na nulu i ući će u svoju kritičnu sekciju. Naravno, ukoliko dodje samo do
prekida prekid_1, a ne dodje do prekida prekid_2, procesi ne bi bili istovremeno u kritičnim
sekcijama. (Tada bi se moglo reći da je došlo do "bliskog susreta", ali bez tragičnih
posledica.) Napomenimo još i to da bi u simetričnoj situaciji (kada bi se proces P2
prekinuo iznedju naredbe sa simboličkom adresom L2 i naredbe C2:=0) takodje moglo da
dodje do toga da se oba procesa istovremeno nadju u svojim kritičnim sekcijama.
Rešenje 3: Problem u prethodnom rešenju nastao je zbog toga što je proces P1 bio
prekinut izmedju trenutka kada je uspešno izvršio testiranje promenljive C2 (naredba sa
simboličkom adresom L1) i trenutka kada je trebalo da postavljanjem vrednosti promenljive
C1 na nulu obavesti, odnosno efektivno zabrani procesu P2 da udje u svoju kritičnu
sekciju. Pokušajmo zbog toga da modifikujemo prethodno rešenje tako što ćemo izmeniti
redosled ovih instrukcija, pa će svaki od procesa prvo istaći zabranu drugom procesu da
udje u njegovu kritičnu sekciju, a zatim će vršiti ispitivanje da li može da udje u svoju
kritičnu sekciju. Ovakvo rešenje bi bilo oblika:
var C1, C2 : integer; (* Ci = 0 proces Pi je u kritičnoj sekciji
Ci = 1 proces Pi nije u kritičnoj sekciji *)
begin
C1:=1; C2:=1; (* početni uslov - nijedan proces nije u kritičnoj sekciji *)
parbegin
P1 : begin
repeat
C1 : = 0;
prekid →
L1 : if C2 = 0 then goto L1;
kritična_sekcija_1;
C1 : = 1;
ostale_naredbe_1;
until stop;
end;
Operativni sistemi: Upravljanje procesima
15
P2 : begin
repeat
C2 : = 0;
L2 : if C1 = 0 then goto L2;
kritična_sekcija_2;
C2 : = 1;
ostale_naredbe_2;
until stop;
end;
parend;
end.
Slično prethodnom rešenju, može se lako pokazati da je i u ovom slučaju, redosled
ulazaka procesa u kritične sekcije je proizvoljan, kao i to da proces prekinut van svoje
kritične sekcije ne ometa izvršavanje drugog nezavisnog procesa. Za razliku od
prethodnog rešenja ovde se postiže medjusobno isključenje, što se takodje može lako
pokazati analiziranjem rešenja u slučaju da se jedan od procesa prekine posle instrukcije
ispitivanja promenljive C1, odnosno C2, a pre ulaska u kritičnu sekciju.
Medjutim ovo rešenje dovodi do jednog drugog problema.
Naime, neka dodje do prekida procesa P1 na označenom mestu, (prekid) i neka se
procesor dodeli procesu P2. Ovaj poslednji će u tom slučaju postaviti vrednost promenljive
C2 na nulu, a zatim će ispitivati vrednost promenljive C1. Kako je vrednost ove promenljive
u tom trenutku jednaka nuli proces P2 neće moći da napreduje dalje od instrikcije sa
simboličkom adresom L2. Neka se sada procesu P2 oduzme procesor i dodeli ponovo
procesu P1. Kako ovaj proces nastavlja od mesta gde je bio prekinut, sada će on testirati
vrednost promenljive C2 i kako je ta vrednost takodje jednaka nuli, ni ovaj proces neće
moći da napreduje dalje od instrukcije sa simboličkom adresom L1.
Drugim rečima posmatrani procesi su medjusobno blokirani jer ni jedan ne može da
nastavi sa radom dok onaj drugi ne nastavi sa radom.
2.1.5 SEMAFORI, P I V OPERACIJE
Analizom prethodna dva rešenja uočili smo da ona ne daju željeni efekat zbog toga što
je izmedju koraka ispitivanja mogućnosti da se udje u kritičnu sekciju i postavljanja
zabrane drugom procesu da udje u svoju kritičnu sekciju moguć prekid. Polazeći od toga
E. Dijkstra je dao rešenje problema medjusobnog isključenja i sinhronizacije procesa tako
Operativni sistemi: Upravljanje procesima
16
što je uveo nov tip promenljive koji se naziva semafor i čiji je skup dozvoljenih vrednosti
skup nenegativnih celih brojeva. Pri tome je uveo dve dozvoljene operacije nad ovim
promenljivima koje je nazvao P i V operacijama, pri čemu je
s : = s - 1 ako je s>0
P(s) = {
čekaj u suprotnom
V(s) = s : = s + 1,
gde je s promenljiva tipa semafor.
Naravno, sada se postavlja pitanje implementacije ovako definisanih operacija, pri
čemu je poseban problem implementacija P operacije u slučaju kada je vrednost
promenljive s jednaka nuli. Jedna od mogućnosti bi bila da se to uradi pomoću instrukcije
tipa if, na način sličan onom koji prikazan u prethodna dva rešenja. No to bi značilo da
proces koji pokušava da izvrši P operaciju u situaciji kada je vrednost promenljive s
jednaka nuli, troši vreme centralnog procesora, pri čemu ne može da napreduje dalje, a
istovremeno onemogućava ostale procese da se izvršavaju. Takva situacija se naziva
zaposleno čekanje (busy wait).
Umesto toga bilo bi logičnije i efikasnije rešenje da se proces, koji pokušava da izvrši P
operaciju u posmatranoj situaciji, prekine i stavi u stanje čekanja na semafor, odnosno da
se "uspava". To medjutim, povlači za sobom i drugačiju implementaciju V operacije.
Naime, proces koji izlazi iz svoje kritične sekcije treba da omogući drugim procesima da
udju u njihove kritične sekcije, što se može postići nasledeći način: ako u tom trenutku
postoji neki uspavan proces koji čeka na semafor, tada proces koji izlazi iz svoje kritične
sekcije treba da ga "probudi", odnosno da mu omogući da se vrati u stanje SPREMAN,
kada probudjeni proces dolazi u red čekanja na centralni procesor, dok u suprotnom, kada
nijedan proces ne čeka na semafor treba samo da povećava vrednost promenljive tipa
semafor za jedan.
Predloženo rešenje P i V operacija može se opisati na sledeći način:
procedure P (s : semaphore);
(* Procedura P(s) realizuje P-operaciju *)
(* *)
Operativni sistemi: Upravljanje procesima
17
(* P(s) = s := s - 1 ako je s>0 *)
(* čekaj u suprotnom *)
begin
zabrani prekide;
if s>0
then s : = s - 1
else begin
izbaci proces iz reda čekanja na Pc; (* uspavaj *)
ubaci proces u red čekanja na semafor (* proces *)
end;
dozvoli prekide;
end;
procedure V (s : semaphore);
(* Procedura v(s) realizuje v-operaciju-budjenje procesa *)
begin
zabrani prekide;
if red čekanja na semafor prazan
then s : =s+1
else begin
izbaci proces iz reda čekanja na semafor; (* probudi *)
ubaci proces u red čekanja na Pc (* proces *)
end;
dozvoli prekide;
end;
U predloženom rešenju krije se medjutim i jedna opasnost. Naime, u predloženoj
implementaciji i P i V operacije postoji ispitivanje vrednosti promenljive tipa semafor,
odnosno stanja reda čekanja na semafor. Ukoliko bi u toku izvršenja ovih procedura došlo
do njihovog prekida mogli bi nastati problemi slični onima koje smo videli u prethodna dva
rešenja problem medjusobnog isključenja i sinhronizacije. Zbog toga je Dijkstra P i V
operacije definisao kao "primitivne" operacije, odnosno hardverski neprekidive operacije
tako da se u opisanoj implementaciji P i V operacija pojavljuju koraci "zabrani prekide" i
"dozvoli prekide", koje označavaju da se pre početka njihovog izvršavanja hardverski
onemogućavaju prekidi, dok se po nihovom kompletnom izvršavanju prekidi ponovo
Operativni sistemi: Upravljanje procesima
18
omogućavaju (što se, na primer, može postići pomoću odgovarajućih bitova u registru
stanja procesora).
Konačno, prema predloženom rešenju P i V operacije menjaju stanja aktivnih procesa
(iz IZVRŠAVA_SE u ČEKA, odnosno iz ČEKA u SPREMAN) što znači da se obe operacije
moraju implementirati kao sastavni deo operativnog sistema. Drugim rečima, procesi
korisnika ne mogu direktno izvršavati ove operacije, već, pozivanjem ovih procedura
predaju upravljanje operativnom sistemu koji ih zatim izvršava na opisani način.
U cilju ilustracije efekta implementacije P i V operacija posmatrajmo situaciju kada se u
listi aktivnih procesa nalaze tri procesa P1, P2 i P3, pri čemu procesi P1 i P2 koriste neki
zajednički resurs. Neka su dalje procesi P1, P2 i P3 istog prioriteta, tako da jedan proces,
kada mu istekne vreme dodele procesora, dolazi sa prvog na poslednje mesto u redu
čekanja na centralni procesor, dok se ostali procesi pomeraju za jedno mesto unapred.
Na slici 2.8a prikazana je situacija kada je proces P1 izvršio P(sem) operaciju nad
semaforom sem. ( Iako se ovde koristi termin "izvršio" operaciju stalno treba imati u vidu
da procesi korisnika samo iniciraju izvršenje ovih operacija od strane operativnog
sistema). S obzirom da je prethodno vrednost sem bila jedan, ona postaje nula. Prema
tome kada, nešto kasnije, proces P2 dobije centralni procesor on će izvršiti operaciju
P(sem) ali tako što će se "uspavati" - odlazi u red čekanja na sem (slika 2.8b. Kada,
kasnije, proces P1 izvrši V(sem) operaciju, slika 2.8c on će "probuditi" proces P2 - vratiće
ga u red čekanja na centralni procesor. Konačno, kada proces P2 izvrši V(sem)operaciju,
slika 2.8d on će, s obzirom da niko ne čeka na sem (nema koga da "probudi"),
jednostavno vrednost sem postaviti na jedan. Na taj način on omogućava sebi ili procesu
P1 da ponovo dodju do resursa, ako im je to naravno potrebno.
Operativni sistemi: Upravljanje procesima
19
P P P 1 2 3
REDCP
P P P 1 3 2
REDCP
P 2
REDSEM
SEM
(a) Proces P1 je izvršio P(sem) operaciju
REDSEM
REDSEM
1
P P P 2 3 1
REDCP
P P P 1 1 3
SEM
(b) Proces P2 je izvršio P(sem) operaciju
SEM
REDSEM
P 2
(d) Proces P2 je izvršio V(sem) operaciju
REDSEM
1
(c) Proces P1 je izvršio V(sem) operaciju
Slika 2.8
Razmotrimo sada rešenje problema medjusobnog isključenja procesa korišćenjem
semafora, odnosno P i V operacija. U tu svrhu uvedimo promenljivu medisk (medjusobno
isključenje) tipa semafor. Očigledno je da se postavljanjem početne vrednosti promenljive
medisk na jedan, omogućava bilo kom procesu da prvi izvrši P operaciju i udje u svoju
kritičnu sekciju. U slučaju da dodje do prekida tog procesa u kritičnoj sekciji i dodele
procesora drugom procesu, ovaj potonji će pri pokušaju da izvrši P operaciju biti prebačen
u red čekanja na semafor. Proces koji je prvi izvršio P operaciju, po izlasku iz svoje kritične
sekcije izvršava V operaciju tako što vrednost semafora ponovo postavlja na jedan, ili tako
što neki proces koji čeka na semafor prebacuje u red čekanja na centralni procesor.
var medisk : semaphore;
begin
medisk : = 1;
parbegin
P1 : begin
repeat
P(medisk);
kritična_sekcija_1;
V(medisk);
Operativni sistemi: Upravljanje procesima
20
ostale_naredbe_1;
until stop;
end;
P2 : begin
repeat
P(medisk);
kritična_sekcija_2;
V(medisk);
ostale_naredbe_2;
until stop;
end;
parend;
end.
Opisano rešenje se može generalizovati na slučaj n > 2 procesa koji imaju kritične
sekcije jedan u odnosu na druge. U tom slučaju svaki od procesa bi bio oblika:
Pi : begin
repeat
P(medisk);
kritična_sekcija_i;
V(medisk);
ostale_naredbe_i;
until stop;
end;
Pri tome treba napomenuti da smo u oba rešenja vrednost semafora medisk ograničili
na skup (0,1). Takav semafor se naziva binarni semafor. U opštem slučaju to ne mora biti
tako. Naime, razmotrimo sada kako se problem medjusobnog isključenja i sinhronizacije
procesa pošiljaoca S (sender) i procesa primaoca poruka R (receiver) može uspešno rešiti
korišćenjem semafora.
Pri tome ćemo uvesti tri semafora. Prvi semafor im (ima mesta) uzima vrednosti iz
skupa {0,C}, gde je C kapacitet bafera.
Drugi semafor ip (ima poruka) uzima vrednost iz istog skupa ali tako da je im + ip = C.
Ova dva semafora omogućavaju sinhronizaciju procesa S i R, tako da proces S vrši P
operaciju nad semaforom in. Ukoliko je im > 0 proces smanjuje broj mesta u baferu,
upsuje poruku i vrši V operaciju nad semaforom ip. tj. povećava broj poruka za jedan.
Operativni sistemi: Upravljanje procesima
21
Ukoliko je im = 0 poces S čeka da se oslobodi mesto u baferu. Slično tome proces R
izvršava P operaciju nad semaforom ip, čime smanjuje broj poruka u baferu, a zatim
Izvršava operaciju V nad semaforom im čime povećava broj slobodnih mesta za jedan.
Ukoliko je ip = 0, proces R čeka da se unese poruka u bafer. Konačno semafor medisk
služi za medjusobno isključenje procesa S i R u odnosu na pristup baferu koji je zajednički
resurs za oba procesa.
Rešenje sa odgovarajućim komentarima bilo bi oblika:
var im, (* im - ima mesta *)
ip, (* ip - ima poruka *)
medisk : semaphore (* medjusobno isključenje *)
begin
im : = C; (* u početnom stanju bafer je prazan *)
ip : = 0; (* prema tome u njemu nema poruka *)
medisk : = 1; (* nijedan proces nije u kritičnoj sekciji *)
parbegin
S : begin
stop:=false;
repeat
pripremi_poruku;
P(im); (* ako je im = 0 ne sme da šalje poruku *)
P(medisk) (* postoji bar jedno prazno mesto u baferu *)
upiši poruku;
V(medisk); (* oslobodi pristup baferu *)
V(ip); (* povećaj broj poruka u baferu za jedan *)
until stop;
end;
R : begin
stop:=false;
repeat
P(ip); (* ako je ip = 0-nema poruka-čekaj *)
P(medisk); (* postoji bar jedna poruka u baferu
prihvati_poruku;
V(medisk); (* oslobodi pristup baferu *)
V(im); (* povećaj broj raspoloživih mesta u baferu za 1 *)
obradi poruku;
until stop;
end;
parend;
Operativni sistemi: Upravljanje procesima
22
end.
2.2 ZASTOJ (DEADLOCK)
Računarski sistem se sastoji od konačnog broja resursa, pri čemu se u jednom
sistemu za svaki resurs definiše njegov tip i broj komada. Pod resursom se podrazumeva
bilo koja hardverska (centralni procesor, U/I procesor, memorijski prostor, magnetna traka
itd.) ili softverska (odredjeni program (rutina), datoteka itd.) komponenta neophodna
nekom procesu da bi mogao da se izvršava.
U režimu višeprogramskog rada procesi konkurišu jedan drugom za resurse, pri
čemu svaki od aktivnih procesa može da zahteva, koristi i oslobadja više resursa različitog
tipa i/ili više resursa istog tipa.
Proces prvo ispostavlja zahtev za resursom (naprimer: open (ime-datoteke),
allocate (broj-memorijskih blokova ili broj-bajtova), itd.), pri čemu su moguća dva ishoda:
(i) resurs se dodeljuje procesu i on se nalazi u stanju IZVRŠAVA - SE ili u stanju
SPREMAN, ili
(ii) ne postoje slobodni resursi zahtevanog tipa i proces prelazi u stanje ČEKA
(prebacuje se u red čekanja na zahtevani resurs).
Zahtev za resursom, u stvari predstavlja poziv opertivnom sistemu koji vodi evidenciju
o tipu, broju i zauzetosti resursa i ukoliko je resurs slobodan dodeljuej resurs procesu na
korišćenje.
Po korišćenju resursa, proces oslobadja resurs (naprimer: close (ime-datoteke),
free (broj-bajtova), itd.) tako što, u stvari ponovo predaje upravljanje operativnom sistemu
koji ažurira stanje zauzetosti resursa i, ukoliko neki drugi proces čeka na resurs, vrši
njegovu dodelu.
U uslovima višeprogramskog rada, procesi očigledno često dolaze u situaciju da
čekaju na resurse. Pri tome, medjutim može doći do situacije koja se naziva potpuni
zastoj ili blokiranje (deadlock).
Pri tome se mogu definisati četiri uslova koji, kada su istovremeno ispunjeni, mogu da
dovedu do potpunog zastoja:
1. Medjusobno isključenje, što znači da u sistemu postoje nedeljivi resursi, odnosno
resursi koji u svakom vremenskom trenutku mogu biti dodeljeni samo jednom procesu na
korišćenje.
Operativni sistemi: Upravljanje procesima
23
2. Posedovanje i čekanje (hold-and-wait) znači da postoje procesi koji poseduju bar
jedan nedeljivi resurs i čekaju na druge nedeljive resurse koje koriste drugi procesi.
3. Resursi se ne mogu oduzimati (no-preemption) što znači da se resurs dodeljen
nekom procesu ne može oduzeti dok sam proces, eksplicitno, ne oslobodi resurs.
4. Postoji kružno (ciklično) čekanje tako da postoji skup procesa p0, p1,...,pn
pri čemu proces p0 čeka na resurs koji drži proces p1,..., proces pn čeka na resurs koji drži proces p0.
Potpuni zastoj je nepoželjan u sistemu i treba ga, ako je moguće, sprečiti ili, kada se dogodi, intervencijom operativnog sistema rasrešiti. Naime, u zastoju dolazi do zaustavljanja procesa koji dođu u stanje zastoja i čekanja. Do zastoja među procesima dolazi zbog takmičenja sa resursima kompjuterskog sistema ili zbog čekanja da se dogodi neki događaj koji se ne može dogoditi.
Pojavu zastoja najlakše je ilustrovati na primeru dvaju procesa P1 i P2. Svaki od ta dva procesa poseduje, "drži", ili bolje reći, dodeljen mu je jedan resurs, dok drugi resusr tražI i nastoji dobiti da bi mogao nastaviti izvođenje. Tako proces P1 drži resurs R1 a traži resurs R2 da bi mogao nastaviti izvođenje, dok proces P2, obratno od P1, drži R2 a traži R1 da bi mogao nastaviti izvođenje. Kako niti jedan proces ne oslobađa resurs koji drži, a u sistemu pretpostavimo da nema više takvih resursa, ne može niti jedan od procesa nastaviti izvođenje i zauvek će čekati resurse koje traže. takvu situaciju najlakše je prikazati pomoću usmerenog grafika. Pri tom čvorovi predstavljaju resurse. U svakom čvoru, kao ćto se može uočiti na slici 14, upisan je broj resursa a kraj svakog čvora vrsta resursa koju dotični čvor predstavlja. Lukovi grafika predstavljaju procese i to tako da izlaze iz onog čvora (resursa) koji "drže" a usmereni su prema čvoru (resursa) koji "traže", dakle strelica pokazuje resurs koji proces traži, a iznad svake strelice upisano je ime procesa koji one predstavljaju. Na slici 2.9 prikazana je upravo spomenuta situacija sa dva procesa.
1 1R2 R1
P1
P2
Slika 2.9 - Prikaz zastoja dva procesa pomoću usmrenog grafa
Situacija je u kompijuterskom sistemu obično mnogo složenija. Obično može se reći
da će zastoj nastupiti onda kada iz svakog čvora izlazi onoliko grana koliko resursa dotični čvor ima i kad su sve grane povezane tako da čine zatvorenu petlju bez obzira kojim putem pošli. Na slici 2.10 prikazana je nešto složenija situacija, gde imamo i više procesa i više resursa. Tako na primer imamo resurse vrste R2, kojih ima ukupno 3, a drži ih proces P1 (jednog) i P2 (dva), proces P2 traži još jedan resurs tipa R2, proces P1 traži resurse tipa R5 i R1 itd.
Operativni sistemi: Upravljanje procesima
24
1 3
2
1
1
R1 R2
R3
R4
R5
P1
P2
P2P3
P5P4
P2
P1
Slika 2.10 - Prikaz zasojne situacije pomoću grafika
Rešavanju problema potpunog zastoja može se pristupiti pomoću različitih
strategija, u zavisnosti od toga da li operativni sistem ne dozvoljava pojavu zastoja, kada
se primenjuju strategije sprečavanja ili izbegavanja zastoja, ili operativni sistem
dozvoljava nastanak zastoja kada je neophodno da se predvide algoritmi za otkrivanje
zastoja i oporavak sistema.
Strategija sprečavanja zastoja zasniva se na činjenici da do zastoja može da
dodje samo ako su istovremeno zadovoljena sva, ranije navedena, četiri potrebna uslova.
Iz toga proizilazi da eliminisanjem, odnosno sprečavanjem postojanja bilo kog od tih
uslova sistem ne može doći u zastoj.
Eliminisanje prvog uslova, medjusobnog isključenja, u opštem slučaju nije moguće
jer su neki resursi po prirodi nedeljivi.
Eliminisanje drugog uslova, posedovanja i čekanja, može se postići tako što proces,
u trenutku kada traži neki resurs, ne sme posedovati nijedan drugi resurs. Jedan od načina
da se to obezbedi je da proces mora da zahteva sve resurse na početku i svi mu se
moraju dodeliti pre početka izvršavanja. Drugi način elininacije ovog uslova je da proces,
pre nego što zahteva jedan resurs mora da oslobodi sve resurse koje je do tada
posedovao.
Treba medjutim istaći da oba načina dovode do slabog iskorišćenja resursa, jer se
resursi dugo drže a slabo koriste, a sa druge strane mogu dovesti do pojave gladovanja
kada jedan proces čeka na resurse neodredjeno dugo vreme (jer je uvek bar jedan od
resursa koji mu je neophodan, zauzet).
Operativni sistemi: Upravljanje procesima
25
Treći uslov, zabrana oduzimanja resursa, može se eliminisati, medjutim to može da
dovede od situacije da se proces kome je oduzet resurs praktično nasilno prekida i
njegovo izvršavanje mora da počne od početka.
Četvrti uslov, kružno čekanje, može se eliminisati tako što se resursi numerišu
rednim brojevima i uvede pravilo da proces može da zahteva resurse samo u rastućem
redosledu njihovih rednih brojeva. Strategija izbegavanja potpunog zastoja sastoji se u tome da se od procesa traži da
unapred traže sve resurse koje će trebati. Na temelju toga vrši se ispitivanje može li doći do zastoja ako se resursi dodele procesu u situaciji koja tada postoji u sistemu. Ako do zastoja ne može doći, proces može početi sa izvođenjem. Takav je način rešavanja problema zastoja složen i nije ga moguće sprovesti u svim slučajevima i sistemima.
Operativni sistem, zahteva a priori informaciju od svakog procesa u pogledu zahteva za resursima. Imajući pri tome informaciju o ukupnom broju resursa i njihovom trenutnom zauzeću, operativni sistem može, pre nego što dodeli resurs nekom procesu, da proveri da li će tom dodelom ostati u bezbednom stanju ili će sistem prevesti u nebezbedno stanje. U ovom, drugom slučaju, zahtev se odbija i proces se stavlja u red čekanja na posmatrani resurs. Ilustrujmo to jednim primerom:
Sistem raspolaže sa 12 primeraka jednog resursa. Trenutno su aktivna tri procesa sa
sledećim stanjem
max.zahtev trenutno dodeljeno
p1 10 5
p2 4 2
p3 9 2
U posmatranom trenutku postoje još tri slobodna primerka resursa i sistem je u
bezbednom stanju, što znači da postoji takav redosled dodele resursa koji garantuje da će
se sva tri procesa izvršiti. Naime, redosled dodeljivanja < p2, p1, p3 > garantuje
završetak sva tri procesa jer:
proces p2: (i) dobija 2 primerka (jedan ostaje slobodan) i
(ii) završava sa radom i oslobadja 4 primerka (ostaje pet slobodnih)
proces p1: (i) dobija svih pet primeraka (nema više slobodnih) i
(ii) završava se radom i oslobadja 10 primeraka
proces p3 : (i) dobija sedam primeraka (tri ostaju slobodna) i
(ii) završava sa radom i oslobadja sve resurse.
Operativni sistemi: Upravljanje procesima
26
Sa druge strane, pogrešnom dodelom resursa sistem može da dodje u nebezbedno
stanje tako što se na zahtev procesa p3 njemu dodeli još jedan resurs. Novo stanje
sistema je:
max.zahtev trenutno dodeljeno
p1 10 5
p2 4 2
p3 9 3
i dva primerka resursa su slobodna. Sada jedino proces p2 može da nastavi, ali i kada
završi oslobadja četiri resursa. Tada proces p1 traži još pet, a proces p3 još šest resursa i
oba (beznadežno) čekaju. Sistem je prema tome u nebezbednom stanju i može doći do
zastoja u slučaju da nijedan proces (p1 i p3) ne oslobadjaju ranije zauzete resurse.
Iz izloženog proizilazi da je, u slučaju strategije izbegavanja zastoja, neophodno da
operativni sistem svaki put, pre dodele nekog resursa, proveri da li sistem, posle takve
dodele, ostaje u bezbednom stanju. Jedan od poznatih algoritama provere je tzv.
Bankarov algoritam za slučaj kada u računarskom sistemu postoji više primeraka istog
resursa. (Po ovom algoritmu banka nikad ne ulaže raspoloživu količinu novca na takav
način da ne može da zadovolji svoje komitente). Procesi su obavezni da prilikom
aktiviranja deklarišu tip i maksimalan broj resursa koji će zahtevati. Pri svakom zahtevu za
dodelu resursa u toku izvršavanja procesa, sistem, koristeći Bankarov algoritam,
proverava da li će posle dodele ostati u bezbednom stanju. Ukoliko je to istina, procesu se
dodeljuje resurs, a u suprotnom se zahtev odbija i proces se smešta u red čekanja na
resurs.
Poslednja strategija, u kojoj se dozvoljava nastanak zastoja sastoji se od dva
algoritma. Prvi se aktivira periodično i služi za otkrivanje postojanja zastoja. Ukoliko se
otkrije da postoji zastoj, aktivira se algoritam za oporavak sistema koji se najčešće svodi
na izbor "žrtve", odnosno procesa koji će se nasilno prekinuti. Resursi koji se tom prilikom
oslobadjaju dodeljuju se ostalim procesima na takav način da se svi preostali procesi
mogu izvršiti. Ukoliko to nije moguće, bira se sledeća žrtva i postupak provere se
nastavlja.
Operativni sistemi: Upravljanje procesorom
27
3 UPRAVLJANE PROCESOROM
Osnovni resurs svakog kompjuterskog sistema jeste centralni procesor, odnosno
centralni procesori, ako se radi o multiprocesorskom sistemu. U našim razmatranjima ograničićemo se na posmatranje samo jednoprocesorskih sistema. Već i u takvim sistemima javljaju se složeni problemi oko dodele (alokacije) procesora procesima. Rešavanjem tih i s njima nekih drugih direktno povezanih problema bavi se deo operativnog sistema koji zovemo "upravljanje procesorom" (Procesor Management).
Osnovni zadaci upravljanja procesorom jesu, prema tome sledeći:
- odlučivanje o tome koji od READY procesa dobija procesor, odnosno pravo izvođenja ili kontrola izvođenja,
- odlučivanje o tome kada će "neki proces dobiti procesor", - odlučivane o tome kako će dugo "proces zadržati procesor", - pretvaranje zadataka obrade u procese i uključivanje procesa u odgovarajući
red, - dealociranje procesaora, - vođenje stanja (statusa) svih procesa. Ti se osnovni zadaci odnose na procese i često sa nazivaju "raspoređivanje
procesa" (Process Scheduling). Uz "ovu brigu o procesima" potrebno je voditi i brigu o zadacima obrade koji još nisu postali procesi. To možemo nazvati "raspoređivanje zadataka" (Job Scheduling),
Job Scheduling uključuje sledeće zadatke:
- odlučivanje koji će zadatak od onih koji čekaju biti uveden u sistem, tj. pretvoren u proces i povezan u red čekanja za dodelu procesora (READY red);
- alociranje resursa zadacima da bi mogli postati procesi, odnosno da bi mogli preći u READY stanje,
- dealociranje resursa za procese koji su završili izvođenjem. Ti se zadaci razlikuju i s obzirom na vrstu sistema. Tako će, na primer, kod sistema
zajedničke obrade (Batch sistem) zadaci koji čekaju na ulaz u sistem biti smešteni na eksternoj memoriji. Odavde će zadaci biti uzimani i pretvarani u procese i uključivani u red za izvođenje. Ujedno će im biti dodeljivani resursi što su im potrebni za izvođenje. U interaktivnom sistemu procesi će biti kreirani odmah čim korisnik počne rad (Log-in) a ujedno će im biti dodeljeni i resursi. Povećanjem brojakorisnika povećaće se i zahtevi za korišćenjem pojedinih resursa. Alociranje resursa zadacima mi smo posmatrali odvojeno od upravljanja procesorima, odnosno odvojeno od alociranja procesora. U mnogim je sistemima, međutim, alociranje svih ostalih resursa povezano sa alociranjem procesora i provodi se tako da se resursi traže prekodela operativnog sistema koji služi za upravljane procesorom. Taj deo poziva ostale delove zadužene za svaku vrstu resursa.
Za svaku od dve vrste poslova obično postoji posebni deo operativnog sistema koji
ih prevodi, ali to, uopšteno posmatrajući i ne mora biti. Deo operativnog sistema koji izvodi sve postupke oko raspoređivanja procesa nazivamo "upravljač procesora" (Processor Schedular), a deo koji izvodi postupke oko upravljanja zadacima zovemo "upravljač zadataka" (Job Schedular).
Operativni sistemi: Upravljanje procesorom
28
Ako su obadve funkcije uključene u jedan modul, onda ga obično nazivamo "Glavni upravljač" (Master Scheduler, High Level Scheduler). Sve u svemu, postoji u praksi različitih vrsta i kombinacija tih osnovnih funkcija.
Mi ćemo u nastavku govoriti uglavnom samo o upravljanju i raspoređivanju procesa
i dodeli procesora.
Upravljač procesora izvodi se i sam kao proces. Zbog toga što je njegovo
izvođenje važno i hitno daju mu najveći prioritet te će ga dispečer odmah uzeti i predati mu procesor na izvođenje. Međutim, upravljač procesora može se uključivati onda kada je to potrebno, a to znači kad se pojavi situacija, odnosno događaj u sistemu koji traži izvođenje neke od funkcija koje upravljač procesora izvodi. Ti se događaji ne mogu unapred predvideti nego se pojavljuju nesihronizovano i tko ih je potrebno obrađivati, odnosno uključivati upravljač procesora. Taj se događaj naziva događajima za upravljanje procesorom (scheduling event). Uključivanje upravljača u pravom času se s pomoću semaforske tehnike prilično jednostavno. Naime, svaki događaj koji predstavlja događaj za upravljanje mora izvesti operaciju SIGNAL na određenom semaforu, a upravljač procesora izvodi posle završetka svog izvođenja operacije WAIT na tom semaforu. Time događaj za upravljanje procesorom poziva i aktivira upravljač procesora a upravljač procesora sam sebe pošto je završio izvođenje. Ponovno uključivanje upravljača dogodiće se tek onda kada se pojavi novi događaj za upravljanje.
Postoji dosta sličnosti između događaja za upravljanje i prekida ali se oni ne mogu
ni u kojem slučaju poistovetiti. Oba događaja nastaju u unapred nepredvidljivim vremenskim intervalima i oba utiču na to da sistem promeni svoje stanje izvođenja i ponašanja. Događaji za upravljanje, može se reći menjaju ponašanje sistema na višoj distanci jer utiču na globalne parametre sistema kao što su prioriteti procesa, broj procesa, redovi čekanja itd., dok prekidi utiču na promenu samo tekućeg procesa ili u krajnjem slučaju na stanje samo ograničenog broja procesa, dakle na lokalne parametre, pa se za prekide može reći da utiču na nižoj visini upravljanja procesorom.
Prekidi se pojavljuju znatno češće nego događaji za upravljanje procesorom. Tako
prekidi nastaju u proseku svake milisekunde a događaji za upravljanje svake sekunde (LIST 75). S tim u vezi treba napomenuti da je bolje rešenje ugraditi što više funkcija u upravljač procesora a što manje u dispečer, jer se dispečer pozivasvaki put posle obrade prekida. Dispečer i upravljač procesora unekoliko se nadopunjuje u ostvarivanju funkcija upravljanja procesorom. Zbog toga se dispečer često naziva upravljačem na nižem nivou (Low Level Scheduler) a upravljač procesora upravljačem na višem nivou (High Level Scheduler).
3.1 ODREĐIVANJE PRIORITETA NEZAVISNO OD STANJA U SISTEMU
Red procesa koji čekaju procesor formira se u sistemu zbog toga da bi
dispečer mogao odabrati proces koji je na redu za izvođenje. Taj red (ili redove, jer
ih može biti i više) formira upravljač procesora, dok dispečer jednostavno uzima prvi
proces u redu. Tako upravljač procesora zapravo indirektno dodeljuje procesor
pojedinom procesu. Formiranje redova upravljač procecesora provodi na osnovi
Operativni sistemi: Upravljanje procesorom
29
dodeljivanja takozvanih prioriteta. Prioriteti koji se dodeljuju svakom procesu
označavaju i određuju kakav će biti tretman tog procesa u sistemu prilikom
dodeljivanja procesora. Tako shvaćeni prioriteti mogu biti izraženi eksplicitno, što
znači da će u svakom procesu biti dodeljen brojčano izražen prioritet ali mogu biti
izraženi i implicitno tako proces ne dobija brojčano izražen prioritet ali se može
upotrebom određenog algoritma ustanoviti za svaki proces kakvu prednost pred
drugim procesima ima dotični proces pri dodeli procesora. Tako se određeni
prioriteti mogu, ali ne moraju, upotrebljavati i pri dodeli ostalih resursa.
Postoji vrlo veliki broj različitih načina određivanja prioriteta. Te načine
nazivamo algoritmima za upravljanje ili algoritmima za određivanje redosleda
izvođenja (scheduling algorithms, scheduling policies). Većina tih algoritama
određuje prioritet procesa imlicitno. Sve algoritme za upravljanje možemo podeliti u
dve osnovne grupe.
U prvu ćemo svrstati sve algoritme koji pri određivanju redosleda izvođenja
procesa ne uzimaju u obzir sva moguća stanja procesa u sistemu, odnosno
moguće situacije u kojima se sistem nalazi nego polaze od pojednostavljene
situacije unutar sistema, koja je prikazana modelom na slici 3.1. Ta se
pojednostavljena sitaucija sastoji u tome da se posmatra jedino čekanje za
dobijanje procesora a sva ostala čekanja, odnosno razlozi za čekanje ne uzimaju se
u obzir. Zbog toga u ovakvom modelu postoji samo procesorski red čekanja koji
uključuje READY procese, a red čekanja koji sadrži procese koji čekaju zbog nekog
drugog razloga (red WAIT procesa) nije uključen u ovaj model. Algortitmi za
određivanje redosleda izvođenja procesa odnose se dakle samo na READY
procese.
Drugu grupu algoritama čine oni algoritmi koji uzimaju u obzir i stanje
procesa u sistemu. Oni će pri određivanju prioriteta uzeti u obzir i stanje u čitavom
sistemu. Takvo posmatranje mnogo je realističnije i tako određeni prioriteti (state
dependent priorities) bolje i efikasnije regulišu izvođenje pojedinih procesa,
odnosno dodeljivanje centralnog procesora. Takvi su algoritmi, međutin, mnogo
složeniji i mnogo se teže implementiraju.
Na slici 3.1 prikazan je model upravljanja u sistemu koji se naziva
procesorski ograničeni sistem (processor bound system). Taj model, kao što je
rečeno, uzima u obzir samo procesorski red (READY procesi). Novodolazeći
procesi uključuju se u taj red a takođe i delimično završeni procesi. To ujedno znači
da je procesor tretiran kao resurs od prvenstvene i superiorne važnosti (što u
realnosti nije uvek slučaj), a uticaji se zahtevaju i čekanja za drugim resursima
zanemaruju. Model takođe predstavlja da procesor uvek ima posla, dakle da uvek
može pronaći neki proces za izvođenje što je još manje realno.
Operativni sistemi: Upravljanje procesorom
30
Novi procesi
Procesorski red
Delimi~no zavr[ eni procesi
Zavr{eni procesi
Sslika 3.1 - Model upravljanja procesorski ograničenog sistema
Uprkos svemu može se i na temelju ovako nerealnog modela doći do upotrebljivih
algoritama. Procesi koji su završili izvođenje napuštaju sistem. Svi ostali procesi predmet su određivanja redosleda u redu čekanja, odnosno oni se uključuju u red prema implicitnom ili eksplicitnom prioritetu koji im algoritam za određivanje redosleda određuje.
Na temelju ovakvog modela može se konstruisati niz različitih algoritama. Svaki od njih nastoji maksimizirati ili minimizirati neku od veličina kojom se meri ili efikasnost čitavog sistema, iskorišćenost centralnog procesora ili neka druga korisna veličina. To može biti različito i s obzirom na pojedinu vrstu rada sistema. Tako kod sistema sa ukupnom obradom (Batch) to može biti vreme obrtaja zadatka a kod time-sharing sistema vreme odgovora. Spomenućemo nekoliko poznatih alogoritama. Svaki od njih primenjuje se u praksi ali nalzimo i niz modifikacija u pojedinim konkretnim sistemima.
3.2 EKSTERNO ODREĐENI PRIORITETI
Eksterno određeni prioriteti postoje kod mnogih sistema. Korisnik sam unapred i izvan kompijuterskog sistema dodeljuje pojedinim zadacima prioritete izražene brojčano u obliku celih brojeva. Ti se prioriteti mogu dodeljivati na temelju važnosti, cene plaćanja, koristi za korisnika ili sistem itd. Takvi su prioriteti eksplicitno izraženi. Oni mogu biti isključivi ali se unutar sistema mogu i kombinovati sa nekim drugim i na drugačiji način određenim prioritetima.
Tako, na primer, može se kombinovati spoljni prioritet sa RR (Round Robin) algoritmom za određivanje prioriteta, dakle sa interno određenim prioritetom, i to tako da vremenski interval koji se dodeljuje procesu na temelju RR algoritma zavisi (proporcionalno) o eksterno dodeljenom prioritetu. Drugi je način da se procesu dodeli, na temelju eksternog i internog prioriteta, novi brojčano izražen prioritet te procesor dobija onaj proces koji ima najviši prioritet. Može se kombinovati eksterno određeni prioritet sa prioritetom dodeljenim na temelju ispitivanja veličine procesa ili vremena potrebnog za izvođenje. Vreme izvođenja može se takođe eksterno za izvođenje. Vreme izvođenja može se takođe eksterno zadavati (na temelju procene ili iskustva). Eksterno određeni prioriteti ne moraju nužno biti eksplicitni. Naime, algoritam za određivanje redosleda izvođenja može biti jednostavni FIFO (First In First Out) algoritam, gde najveći prioritet ima onaj proces koji je prvi ušao u sistem. Redosled dolazaka zadataka određuje dakle prioritet a taj se redosled određuje određuje izvan sistema. Postoje i druge mogućnosti za eksterno određivanje prioriteta.
Operativni sistemi: Upravljanje procesorom
31
3.3 ODREĐIVANJE PRIORITETA
NA OSNOVU PROCENE VREMENA IZVOĐENJA
Poznati algoritam za određivanje prioriteta je SJF algoritam (Shortest Jobs First)
koji svrstava procese u red za izvođenje na temelju vremena koji zadatak traži za svoje izvođenje, i tako da kraći procesi imaju prednost. Takav je način određivanja prioriteta pogodan, na primer, pri skupnoj obradi jer daje kraće prosečno vreme obrtaja. Postoje dve modifikacije, koje se često upotrebljavaju.
Prvu modifikaciju nazivamo SJF algoritam s pretpražnjenjem procesora (Preemptive SJF). Pretraživanje procesora znači da će proces koji se izvodi biti prekinut u svom izvođenju ("proces ispražnjen”) ako u času izvođenja dođe u sistem zadatak koji ima veći prioritet (kraće vreme izvođenja).
Druga modifikacija naziva se SJF algoritam bez pretpraženjenja procesora, i suprotno prvoj, ne prazni procesor ako u toku izvođenja naiđe zadatak s većim prioritetom, odnosno kraćim vremenom izvođenja. Zbog toga se i naziva SJF bez pretpražnjenja (nonpreemptive SJF).
Ovakve modifikacije s pretpražnjenjem i bez pretpražnjenja procesora mogu se susresti i kod drugih algoritama. Nedostatak takvih određanja redosleda izvođenja jeste taj što duži zadaci mogu čekati vrlo dugo (teoretski čak neograničeno). Zbog toga je česta i modifikacija koja dopušta porast prioriteta procesa u zavisnosti od vremena čekanja u redu za izvođenje. Za ovu se modifikaciju može reći da je uspešnnija od običnog SJF algoritma ali je znatno složenija za implementiranje jer treba da prati vreme čekanja u redu za sve procese. Uopšteno vredi i za druge algoritme da moraju biti što jednostavniji i kraći za izvođenje, jer može doći do generisanja internog rada i do komplikovanog implementiranja.
Poznati je algoritam i RR algoritam (Round Robin) gde se svi procesi poslužuju
ciklički i svaki od njih zadržava procesor za neko određeno vreme q koje nazivamo vremenski odsečak ili kvantum (time slice, quantum). Vreme izvođenja ovde implicitno utiče na dodelu procesora. Zavisno od vremena q, mogu biti favorizovani kratki zadaci ili ne. Ako je q malen, procesor se deli tačno prema stvarnom vremenu izvođenja. Ako je q beskonačan, algoritam prelazi u FIFO.
Glavni nedostatak RR algoritma jeste što mnogo zadataka ostaje u aktivnom stanju relativno dugo, a to zahteva veću memoriju. Postoji nekoliko modifikacija ovog osnovnog algoritma. Na primer, u sistemu gde su novi dolazi česti i brojni, vreme odgovora sve će više rasti, dakle performanse sistema degradiraju se s porastom opterećenja. Efikasna modifikacija u takvim sistemima jeste da i q raste sa brojem procesa. Time će doći do bržeg završavanja pojedinih procesa i njihova nestajanja iz sistema.
Sledeći algoritam koji treba spomenuti jeste FB algoritam (Foreground-
Backround). U njemu postoje dva reda čekanja. Proces ulazi u F red koji ima veći prioritet izvođenja. Ako tokom nekoliko ciklusa (po RR principu unutar F reda) ne završi rad, pada u B red koji ima manji prioritet izvođenja. U B redu opet se procesi izvode po RR algoritmu ali samo onda kada u F redu nema nijednog procesa. Takav se algoritam često koristi u sistemima koji podržavaju skupni i interaktivni način rada. Dugi će procesi svi pasti u B red koji se izvodi pošto se posluži F red, dok će se kratki interaktivni procesi uspeti završiti u F redu. FB algoritam ima samo dva reda čekanja za izvođenje. Ovakav način određivanja redosleda izvođenja može sa proširiti na više redova čekanja. U praksi susrećemo sisteme sa tri reda čekanja (DEC-10 na primer).
Operativni sistemi: Upravljanje procesorom
32
Osim spomenutih postoje i drugi algoritmi koji su opisani u literaturi.
3.4 ODREĐIVANJE PRIORITETA PREMA VREMENU ČEKANJA U REDU
Ako se želi svim procesima dati mogućnost što bržeg izvođenja, onda se prioriteti
procesa menjati (povećavati) zavisno o toga koliko dugo čekaju u redu za izvođenje. Tako će prioriteti procesa rasti i svaki će proces doći relativno brzo do izvođenja. Moguće je da se takav način dodele prioriteta kombinovati sa eksternim zadavanjem prioriteta. Tada će proces početi sa eksterno zadanim prioritetom i prioritet će mu sa čekanjem rasti za neko takođe eksterno određeno vreme.
Određivanje prioriteta može se provesti neke zadane funkcije troška. Svaki proces
dolazi u sistem sa svojom zadanom funkcijom troška koji zavisi od vremena čekanja. Za izvođenje se uzima onaj proces koji minimizira sumu troškova za sve procese koji čekaju za izvođenje. Takve i slične mogućnosti za određivanje redosleda izvođenja ređe se u praksi primenjuju.
3.5 ODREĐIVANJE PRIORITETA PREMA STANJU U SISTEMU
U opisanim algoritmima za određivanje redosleda izvođenja procesa, odnosno za
dodeljivanje procesora procesima nije se vodilo računa o stanju u sistemu, zbog toga interni rad može narsti iznad tolerantnih granica. Model koji uzima u obzir stanje u sistemu može u tom slučaju pomoći. Takvi slgoritmi, iako složeniji, drže interno generisani rad u tolerantnim granicama, a naročito ublažavaju degradaciju performansi sistema prilikom preopterćenja. Model je prikazan šematski na slici 3.2, a sadrži, za razliku od procesorski ograničenog modela, i red odnosno redove čekanja koji mogu nastati zbog zahteva za resursima ili ulazno/izlaznim operacijama.
Takav model, iako na prvi pogled ne izgleda mnogo složeniji od prethodnoga sadrži u sebi znatno veću kompleksnost posmatranja i puno je bliži stvarnom stanju u sistemu. Naime, pod blokiranim procesima smatraju se svi procesima smatraju se svi procesi WAIT stanju koji su zaustavljeni na rzanim semaforima ili čekaju na ulazno.izlazne operacije. Na semaforima, kao što znamo, procesi mogu čekati traženje resursa ali zbog međusobnih odnosa među procesima. Praćenje je oslobađanja (signalizacija) svih tih semafora složeno, i postoje razne mogućnosti da proces pređe iz WAIT u READY stanje, odnosno da izađe iz reda čekanja i uđe u red za izvođenje.
U ovom slučaju upravljač procesora prei donošenju odluke o upravljanju procesorom mora voditi računa i o alokaciji drugih resursa. Različiti algoritmi i strategije postoje ali ih je u praksi dosta teško primeniti.
Ti se algoritmi temelje na određenim empiričkim dokazanim kriterijumima kao što su, na primer, sledeći kriterijumi:
Operativni sistemi: Upravljanje procesorom
33
Novi procesi
Delimi~no zavr{eni procesi
Procesor
Zavr{eni procesi
Dispe~er
dodeljuje
Blokirani procesi
Zahtevi ispunjeni
READY
WAIT
Slika 3.2 - Prošireni model za upravljanje procesorom
- Procesima koji imaju veliki broj resursa treba davati visok prioritet da bi se
ubrzalo oslobađanje tih resursa a time i njihovo dodeljivanje drugim procesima. Pritom se u ekstremnim slučajevima može dogoditi da veliki procesi monopolizuju sistem.
- Procesima koji imaju veliki broj resursa, a blokirani su zbog njih, treba davati prednost i u dobijanju tih resursa iz istog razloga kao i u dobijanju procesora.
- Alokaciju memorije treba provoditi prema principima radnog skupa stranica. - Procesi operativnog sistema moraju imati prioritet koji odgovara hitnosti funkcija
koje provode. Pritom najveći prioritet treba svakako dodeliti upravljaču procesora. Treba voditi računa da interni rad generiše ovakav način upravljanja procesorom na
bude prevelik. Spomenućemo samo kratko neke mogućnosti za izgradnju jednostavnijih
algoritama.
RR algoritam može se modifikovati tako da se posle svakog ciklusa izračuna
vremenski odsečak koji se dodeljuje procesima. Pritom se obično uzima neko fiksno vreme kao vreme čitavog ciklusa dodeljuvanja procesorima. Pod ciklusom se smatra dodela procesora svim procesima koji su u redu za izvođenje. To se vreme deli sa brojem procesa u redu koji se stalno menja. Ako ima nekoliko procesa, vremenski odsečak će biti duži, a ako ima više procesa biće kraći. Slični se zahtevi mogu učiniti i kod FB algoritma. Može se izgraditi algoritam koji minimizira prelaze iz RUN stanja u WAIT stanja zbog traženja novih resursa.
Broj mogućih algoritama i ideja na temelju kojih bi te algoritme trebalo sagraditi
jeste veliki. Ne postoji, međutim, mogućnost da se vrednost svakog pojedinog algoritma proceni teoretski nego ga treba praktično ispitati. Tu znatnu pomoć mogu pružiti ispitivanja pomoću simulacija takvih upravljanja procesorom.
Operativni sistemi: Upravljanje memorijom
34
4 UPRAVLJANJE MEMORIJOM
4.1 UVOD
Pod upravljanjem memorijom sa stanovišta operativnog sistema, podrazumevaju se
funkcije:
- praćenja stanja memorije (u smislu vodjenja evidencije o delovima memorije koji su
slobodni i delovima memorije koji su zauzeti i koji ih procesi zauzimaju)
- dodeljivanja (alokacije) slobodnih delova memorije procesima koji ih zahtevaju i
- oslobadjanja (dealokacije) zauzetih delova memorije kada, iz bilo kojih razloga
prestaje potreba da neki proces zauzima delove memorije.
4.2 ADRESNI PROSTOR, MEMORIJSKI PROSTOR I PRELIKAVANJE
IZADRESNOG U MEMORIJSKI PROSTOR
Bez obzira na konkretan način na koji operativni sistem upravlja memorijom u smislu
navedenih funkcija, on je dužan da svakom pojedinačnom programu obezbedi nesmetano
i uspešno izvršavanje. To praktično znači da upravljanje memorijom, u najširem smislu
počinje već sa prevodjenjem programa i obuhvata sledeće funkcije preslikavanja,
prikazane na slici 4.1.
A E
XMIN X
C
011010
011100
101100
101110
111000
10250
10300
10260
1010010400
Skup imena koje
dodeljuje program
Skup programskih
adresa
Skup memorijskih
adresa
preslikavanje
adresa
preslikavanje
imena
Slika 4.1
Operativni sistemi: Upravljanje memorijom
35
1. Preslikavanje imena - se odnosi na preslikavanje simboličkih adresa (imena) koje
programer dodeljuje promenljivima i pojedinim naredbama u programu u binarne adrese
koje se često nazivaju jedinstvenim identifikatorima ili programskim adresama.
2. Preslikavanje adresa - se odnosi na preslikavanje programskih adresa u stvarne,
fizičke memorijske adrese.
3. Preslikavanja sadržaja - se odnosi na preslikavanje memorijskih adresa u vrednosti
(podatke) koje one sadrže.
Navedena preslikavanja dogadjaju se u različitim vremenskim trenucima. Preslikavanje
imena se najčešće obavlja u toku prevodjenja, ali se često ne može u potpunosti završiti
pre povezivanja (zbog eksplicitnih poziva podprograma i/ili implicitnog pozivanja
sistemskih procedura). Preslikavanje adresa se u najjednostavnijem slučaju obavlja u toku
punjenja u memoriju. No, u zavisnosti od načina upravljanja memorijom od strane
operativnog sistema preslikavanje adresa može se obavljati u toku samog izvršavanja
programa. Šta više, kod nekih načina upravljanja memorijom ni povezivanje se ne može
obavljati pre početka izvršavanja programa. Konačno, preslikavanje sadržaja se obavlja u
vreme izvršavanja programa.
Sam čin ili dogadjaj preslikavanja se naziva vezivanje (binding). Na primer kada se
izvrši preslikavanje simboličkog imena u programsku adresu, kažemo da je posmatrana
simbolička adresa vezana za odredjenu programsku adresu (da joj jednoznačno odgovara
ta programska adresa). Kada se programska adresa preslika u memorijsku adresu
kažemo da je vezana za tu memorijsku adresu. Vremenski trenutak kada se odigrava
vezivanje naziva se vreme vezivanja (binding time).
Što se vreme odredjenih vezivanja više odlaže to je moguće fleksibilnije upravljanje
memorijom (sa stanovišta operativnog sistema) i obrnuto. Na primer ako se i preslikavanje
imena i preslikavanje adresa odigrava pre punjenja u memoriju (što je moguće samo u
slučaju da se unapred zna gde će biti program smešten u memoriji) onda bi adresni delovi
instrukcija tog programa sadržavali stvarne, memorijske adrese podataka i nekih
instrukcija. Takav program se onda može izvršavati samo u tim, unapred odredjenim
memorijskim lokacijama što predstavlja veoma kruto ograničenje za operativni sistem.
Očigledno je, prema tome, da postoji veoma jaka zavisnost izmedju programa za
prevodjenje (compiler-a), programa za povezivanje (linker-a) i programa za punjenje
(loader-a) kao delova sistemskog softvera sa jedne strane i operativnog sistema, odnosno
njegovog dela za upravljanje memorijom, sa druge strane.
Pri tome najveći uticaj na operativni sistem ima preslikavanje adresa, ili kako se to
kaže preslikavanje adresnog prostora programa (skupa programskih adresa) u memorijski
prostor (skup memorijskih adresa). U slučaju statičkog povezivanja adresni prostor je
linearan (sastoji se od niza kontinualnih adresa). U zavisnosti od načina upravljanja
Operativni sistemi: Upravljanje memorijom
36
memorijom takav adresni prostor može se preslikati u odgovarajući linearan memorijski
prostor pa se preslikavanje adresa može opisati funkcijom:
a ' = p + a
gde je: a'- memorijska adresa,
p - početna adresa programa u memoriji i
a - programska adresa.
U opštem slučaju preslikavanje adresa može biti realizovano na različite načine pa se
može predstaviti funkcijom:
a ' = f (a)
pri čemu implementaciju funkcije f obavlja operativni sistem.
4.3 PROBLEM UPRAVLJANJA MEMORIJOM
Kako je već ranije istaknuto, da bi se jedan program izvršio neophodno je da se u
memoriju unesu i njegovi instrukcije i podaci, kako bi bili dostupni centralnom procesoru.
No, to ne znači da sve instrukcije i svi podaci programa moraju biti u memoriji za sve
vreme izvršavanja programa. Naime, u principu je moguće uneti u memoriju samo jedan
deo instrukcija programa sa podacima neophodnim za njihovo izvršavanje. Po izvršavanju
tog dela programa u memoriju se može uneti, i to u iste lokacije, sledeći niz naredbi sa
podacima potrebnim za njihovo izvršenje. U uslovima višeprogramskog rada ovakva
mogućnost je posebno interesantna. Naime, držanjem u memoriji delova, a ne celih
programa, moguće je aktivirati više programa u jednom vremenskom intervalu čime se
povećava stepen višeprogramskog rada a time i stepen iskorišćenjaostalih resursa
računara. Naravno, ovakav način rada zahteva dodatne hardverske komponente i
usložnjava operativni sistem. Pri tome bi, sa stanovišta operativnog sistema memorija bila
podeljena na dva nivoa. Prvi nivo činila bi primarna (glavna) memorija u kojoj bi se držali
trenutno aktivni delovi različitih programa, dok bi drugi nivo činila sekundarna (pomoćna)
memorija sa relativno brzim pristupom (na primer magnetni disk sa fiksnim glavama), na
kome bi se čuvale kompletne kopije svih aktivnih programa. Operativni sistem bi tada
problem upravljanja memorijom sveo na problem vremenske i prostorne raspodele
programa ili delova programa izmedju dva nivoa memorije. Drugim rečima, upravljanje
memorijom se sastoji od tri komponente:
upravljanje unošenjem (fetch policy) - u smislu donošenja odluke o tome kada će se
program ili njegovi delovi uneti u memoriju
upravljanje smeštanjem (placement policy) - u smislu donošenja odluke o tome gde će
se program ili njegovi delovi smestiti u memoriji i
Operativni sistemi: Upravljanje memorijom
37
upravljanje zamenom (replacement policy) - u smislu donošenja odluke o tome koji će se
program ili delovi programa izbaciti iz memorije da bi se oslobodio prostor za
unošenje drugog programa ili delova drugog ili istog programa.
Različite metode i tehnike upravljanja memorijom razlikuju se upravo po tome kako i
na osnovu čega donose neku od navedenih odluka.
4.3.1 MONOPROGRAMSKI RAD I STATIČKE PARTICIJE
Monoprogramski rad je takav način rada računarskog sistema kod koga se u memoriju
unosi i za sve vreme izvršavanja u njoj ostaje samo jedan program, slika 4.2 (a).
Prednosti ovakvog načina rada ogledaju se u jednostavnosti upravljanja memorijom i
ostalim resursima računara tako da je operativni sistem jednostavan i zauzima mali deo
memorijskog prostora. Programi se uvek smeštaju počev od jedne fiksne memorijske
lokacije pa je preslikavanje adresnog u memorijski prostor moguće izvršiti još za vreme
povezivanja. Sa druge strane ovakav način rada dovodi do slabog iskorišćenja memorije i
ostalih resursa računara. Konačno, veličina programa ograničena je veličinom
raspoloživog dela memorije.
OS OS
P1
P2
P3
P
neiskori{}eni
deo memorije
particija #1
particija #2
particija #3
(a) monoprogramski rad (b) stati~ke particije Slika 4.2
Prvi korak ka poboljšanju bio bi da se memorijski prostor podeli na više delova koji se
nazivaju particije. Veličina particija se odredjuje unapred i za vreme rada računara se ne
menja, slika 4.2 (b). Na ovaj način se očigledno, mada u ograničenom stepenu,
omogućava višeprogramski rad. Programi se unose u memoriju pre izvršavanja i smeštaju
Operativni sistemi: Upravljanje memorijom
38
se u najmanju particiju koja je dovoljno velika da ih prihvati. Operativni sistem je, u ovom
slučaju, relativno jednostavan i zauzima mali deo memorijskog prostora. S obzirom da je
broj i veličina particija odredjena unapred (statički) preslikavanje adresnog u memorijski
prostor moguće je, u principu izvršiti još za vreme povezivanja (ako se zna u koju se
particiju smešta program). Sa druge strane, statičke particije ne pružaju mogućnost većeg
stepena iskorišćenja resursa računara, pa ni same memorije. I u ovom slučaju veličina
programa ograničena je veličinom raspoloživog dela memorije.
4.3.2 DINAMIČKE I RELOKATIBILNE PARTICIJE
Za razliku od statičkih particija, kod dinamičkih particija veličina particije se odredjuje
prema veličini programa i to u trenutku unošenja programa u memoriju. Predpostavimo da
je u jednom trenutku memorija računara prazna, izuzev onog dela u kome je smešten
operativni sistem, i neka se u sledećem intervalu vremena aktivira više programa a da se
za to vreme nijedan ne završi, slika 4.3a. Tada će svi programi biti smešteni u memoriju
jedan do drugog. Neka posle izvesnog vremena procesi P2 i P4 završe sa radom.
Situacija koja je nastala u memoriji prikazana je na slici 4.3b na kojoj se vidi da je
slobodan memorijski prostor rascepkan (fragmentisan) na više delova različite veličine.
OS
P1
P2
P3
P4
P5
30KB
70000
140000
190000
OS
P1
P3
P5
30KB
88000
22KB
20KB
140000
190000
OS
P1
P3
P5
30KB
70000
40KB
2KB153000
190000
P6
P6
(a) (b) (c) (d)
OS
P1
P3
P5
30KB
40KB
20KB
Slika 4.3
Ova pojava se naziva fragmentacije, ili preciznije, spoljna fragmentacija s obzirom da
se neiskorišćeni delovi memorije nalaze van pojedinačnih programa. Predpostavimo da
sada stiže zahtev za unošenje programa P6 u memoriju koji zahteva ukupno 18KB
memorije. Postavlja se pitanje u koji će se od slobodnih delova memorije uneti program
P6. Očigledno je da kod dinamičkih particija moramo definisati poseban algoritam za
upravljanje smeštanjem. Jedan od takvih algoritama je algoritam prvog uklapanja (first fit),
kod koga operativni sistem vodi tabelu slobodnog prostora uredjenu po rastućim adresama
slobodnih delova memorije (slika 4.4a).
Operativni sistemi: Upravljanje memorijom
39
Adresa
slobodnog
prostora
Veličina
slobodnog
prostora
Veličina
slobodnog
prostora
Adresa
slobodnog prostora
70000 40KB 20KB 140000
140000 20 KB 30KB 190000
190000 30KB 40KB 70000
(a) (b)
Slika 4.4
Algoritam se tada svodi na pronalaženje prvog slobodnog prostora, računajući od
početka memorije, koji je dovoljno veliki da prihvati dati program. U našem primeru,
primena algoritma prvog uklapanja dovela bi do stanja u memoriji prikazanog na slici 4.3c.
Drugo moguće rešenje problema smeštanja u memoriju zasniva se na algoritmu
najboljeg uklapanja (best fit), kod koga se tabela slobodnog prostora uredjuje po rastućoj
veličini slobodnog prostora (slika 4.4b).
OS
P1
P3
P5
30KB
40KB
20KB
OS
P1
P6
P5
30KB
10KB
OS
P1
P3
P5
P5
20KB
P3
(a) (b) (c) Slika 4.5
Ovaj algoritam se svodi na nalaženje najmanjeg dovoljno velikog slobodnog
memorijskog prostora u koji može da se smesti novi program. Stanje memorije, posle
unošenja programa P6 po algoritmu najboljeg uklapanja prikazano je na slici 4.3d.
Treba još napomenuti da postoje i drugi algoritmi smeštanja, kao što su algoritam
najgoreg uklapanja (worst fit) itd. U praksi su se algoritmi prvog i najboljeg uklapanja
pokazali bolji od ostalih, dok pri medjusobnom poredjenju nijedan ne pokazuje izrazitu
prednost nad onim drugim.
Operativni sistemi: Upravljanje memorijom
40
Predpostavimo sada da je, umesto 18KB program P6 zahtevao ukupno 50KB
memorije. Prema stanju memorije prikazanom na slici 4.5a koje je isto kao na predhodnoj
slici 4.3b zahtev za unošenje programa P6 u memoriju bio bi odbijen i program bi se
smestio u red čekanja za memoriju. Naime, i ako je ukupan slobodan memorijski prostor
veličine 90KB, on je usled spoljne fragmentacije razbijen na tri dela od kojih nijedan nije
dovoljno veliki da prihvati program P6. Jedan način da se izbegne odbijanje programa P6
bio bi da se izvrši premeštanje (relokacija) programa P3, tako da se on premesti do
programa P1. Na taj način bi se spojili prazni prostori od 40KB i 20KB i proces P6 bi se
mogao uneti u memoriju, kako je to prikazano na slici 4.5b. Opisani postupak naziva se
delimučna kompakcija (sabijanje). U slučaju da je program P6 zahtevao, na primer 70KB
tada bi očigledno morali da vršimo potpunu kompakciju (sabijanje), odnosno da
premestimo sve postojeće programe u memoriji kako bi program P6 dobio dovoljno
prostora. Situacija u memoriji, posle potpune kompakcije i smeštanja programa P6 u
memoriju prikazana je na slici 4.5c. Dinamičke i relokatibilne particije omogućavaju bolje
korišćenje resursa računara, ali zahtevaju dodatni hardver, usložnjavaju operativni sistem
i, pogotovo kod ovih poslednjih, zahtevaju više vremena za rad samog operativnog
sistema.
4.3.3 STATIČKI SEGMENTI
U svim do sada navedenim načinima upravljanja memorijom bilo je neophodno da se
povezivanje programa obavi statički, pre unošenja u memoriju i izvršavanja. Posledica
toga je da su povezani programi relativno veliki i da je prilikom dodeljivanja memorijskog
prostora tim programima bilo neophodno da se u memoriji nadje 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.
Operativni sistemi: Upravljanje memorijom
41
Tabela segmenata
OS
Glavnimodul
Memorija
MOD A
MOD B
Segment
Bitovi
za{tite
Ig
Ia
Ib
GP
MODA
MOD B
Du`ina
segmenta
Po~etna
adresa
Segment
Bitovi
za{tite
Du`ina
segmenta
Po~etna
adresa
Slika 4.6
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 sastoji se u tome da se ne vrši statičko povezivanje programa
već se program posmatra kao skup logičkih celina - segmenata, gde segment može biti
glavni program, svaka od procedura ili oblast podataka.Sve adrese u okviru jednog
segmenta su relativne u odnosu na nulu. Na taj način, umesto 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 smestiti bilo
gde u memoriji s tim što se u posebnoj tabeli, tabeli segmenata vode adrese početnih
lokacija u koje su smešteni pojedinačni segmenti, kako je to prikazano na slici 4.6. Adresni
deo naredbi programa sastoji se tada iz dva dela, odnosno uredjenog 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.6).
Operativni sistemi: Upravljanje memorijom
42
OPKOD s d
+ s l
Registar tabele segmenata
Tabela segmenata+
OS
d
Memorija
Adresiranje pomo}u tabele segmenata
S
I
Slika 4.7
S obzirom da su segmenti različite dužine i kod ovog načina upravljanja memorijom
dolazi do fragmentacije, ali su njeni negativni efekti znatno blaži od efekata fragmentacije
kod dinamičkih particicja.
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 kaže
se 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).
4.3.4 STATIČKE STRANICE
U prethodnom načinu upravljanja memorijom pomoću segmenata, videli smo da se
program ne mora smestiti u memoriju u niz kontinualnih adresa. Drugi način realizacije iste
ideje je pomoću stranica. Naime, program se statički poveže tako da se dobija linearan
adresni prostor kao i u slučaju upravljanja memorijom pomoću particija. No sada se taj
adresni prostor deli u delove (blokove) jednake veličine koji se nazivaju stranicama.
Memorijski prostor se istovremeno deli u blokove iste veličine koji se obično nazivaju
okvirima strana. Prilikom smeštanja u memoriju strane programa se mogu uneti 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 smeštena, kako je to prikazano na slici 4.8. Ovakav način upravljanja
memorijom u potpunosti eliminiše pojavu spoljne fragmentacije. Sa druge strane, kako su
veličine strana fiksne (kod realnih računara kreću se od 512B do 4KB), a programu se
mora dodeliti ceo broj strana, po pravilu jedan deo poslednje strane ostaje
Operativni sistemi: Upravljanje memorijom
43
neiskorišćen. Ova pojava naziva se internom fragmentacijom. No imajući u vidu
veličinu stranice može se reći da je efekat interne fragmentacije na iskorišćenje memorije
praktično zanemarljiv.
1K
1K
1K
1K
1K
0
1
2
3
4
Interna
fregmentacija
0
1
2
3
4
program
Tabela strana
Strana
Bitovi za{tite
Po~etna adresa
OS
.
.
.
Memorija
Slika 4.8
Adresni deo naredbe kod upravljanja memorijom pomoću stranica sastoji se iz dva
dela, uredjenog para (p,d). Ovo se može ilustrovati na sledeći način. Predpostavimo da je
dužina jedne adrese u adresnom delu instrukcije la = 6 bita. Tada je adresni prostor koji se
može adresirati 26, odnosno obuhvata sve adrese u skupu {0, 63}, kako je to prikazano na
slici 4.9 u trećoj koloni tabele.
Posmatrajući te iste adrese napisane u binarnom obliku u drugoj koloni tabele može se
uočiti podela šestobitne adrese na dva dela: dva krajnje leva bita koji čine broj stranice p
(što znači da se mogu adresirati ukupno četiri stranice) i četiri krajnje desna bita koja
označavaju pomeraj unutar stranice d (što znači da je pomeraj u granicama {0, 15},
odnosno da je jedna stranica veličine 16 bajta, kako je to prikazano u poslednjoj koloni
tabele).
Operativni sistemi: Upravljanje memorijom
44
Kod realnih računara broj bitova jedne adrese je znatno veći, pa je na primer adresa
kod računara DEC Vax dužine 32 bita, pri čemu 9 krajnje desnih bitova označavaju
pomeraj unutar stranice (što znači da je strana veličine 512 bajta), dok preostala 23 bita
omogućavaju programu da adresira 223 različitih stranica.
Kako je znači adresni deo naredbe kod straničenja u obliku uredjenog para (p, d) onda
se i prevodjenje programske adrese u memorijsku adresu može realizovati na način sličan
segmentiranju, odnosno pomoću tabele strana kako je to prikazano na Slici 4.10.
Broj
stranice
Binarana
adresa
Dekadna
adresa
Pomeraj
00 0000 0 0000 (0)
00 0001 1 0001 (1)
00 (0) ...
00 1111 15 1111 (15)
----------
-----
--------------
-
--------------- -------------
--
01 0000 16 0000 (0)
01 0001 17 0001 (1)
01 (1) ...
01 1111 31 1111 (15
----------
-----
--------------
-
--------------- -------------
--
10 0000 32 0000 (0)
10 0001 33 0001 (1)
10 (2) ...
10 1111 47 1111 (15)
----------
-----
--------------
-
--------------- -------------
--
11 0000 48 0000 (0)
11 0001 49 0001 (1)
11 (3) ...
11 1111 63 1111 (15)
Slika 4.9
Upravljanje memorijom pomoću stranica je veoma efikasan i jednostavan način
upravljanja. U odnosu na segmentiranje, straničenje ima tu prednost da sprečava pojavu
spoljne fragmentacije i omogućava visok stepen iskorišćenja memorije. Kao i
Operativni sistemi: Upravljanje memorijom
45
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 celine posle povezivanja gube svoj identitet.
OPKOD p d
+ p
Registar tabele strana
Tabela strana
+
OS
d
Memorija
Adresiranje pomo}u tabele strana
Slika 4.10
Operativni sistemi: Upravljanje memorijom
46
4.4 VIRTUELNA MEMORIJA
4.4.1 UVOD
U svim do sada opisanim načinima upravljanja memorijom program se unosi u
memoriju u celini pre početka svog izvršavanja. To znači da je veličina programa
ograničena veličinom raspoloživog dela memorije.
Sa druge strane, za vreme izvršavanja programa, nije potrebno da se sve procedure i
podaci nalaze sve vreme u memoriji. Naime, za vreme izvršavanja jedne procedure ostale
procedure kao i podaci kojima ona ne pristupa ne moraju da se nalaze u memoriji. Šta više
moguće je da se pojedine procedure prilikom jednog izvršavanja programa uopšte i ne
aktiviraju. Polazeći od ovih činjenica programeri su uspevali koristeći tzv. tehnikom
prekrivanja (overlay technique), da prilikom povezivanja programa definišu procedure koje
se ne mogu i/ili ne moraju izvršavati istovremeno. Program za povezivanje je, koristeći se
ovim informacijama, povezivao program na takav način da je bilo moguće da se u toku
njegovog izvršavanja pojedine procedure izbacuju iz memorije a na njihovo mesto u iste
memorijske lokacije unose druge procedure. Na taj način je bilo moguće da se program
koji je po veličini bio veći od raspoloživog dela memorije ipak izvrši.
No, iako je tehnika prekrivanja bila od velike koristi ona je sa druge strane predstavljala
i veliko opterećenje za programere. S toga se došlo na ideju da se odluka o tome kad će
se i šta će se naći u memoriji za vreme izvršavanja programa prepusti operativnom
sistemu. Naime komponente upravljanja memorijom vezana za unošenje programa
realizovana je tako da se unošenje vrši samo po zahtevu. Realizacija ovakvog upravljanja
memorijom moguća je korišćenjem segmentiranja i/ili straničenja. U prvom slučaju u
memoriju se unosio samo segment glavnog programa a ostali segmenti (procedure)
unosile su se samo onda kada je postojao eksplicitan poziv za njihovo aktiviranje.U slučaju
straničenja u memoriju se unosi samo početna stranica programa a ostale stranice se
unose samo u slučaju da instrukcija koja se trenutno izvršava eksplicitno pristupa
odredjenoj strani. S obzirom na način kako se realizuju tehnike segmentiranja i straničenja
smeštanje novog segmenta, odnosno stranice u memoriju svodi se na nalaženje dovoljno
velikog slobodnog prostora (za segmente), odnosno bilo kog slobodnog okvira (za
stranice) uz ažuriranje odgovarajuće tabele. U slučaju da u memoriji nema mesta za novi
segment ili stranicu vrši se zamena tj. izbacivanje jednog segmenta (strane) iz memorije i
ubacivanje traženog segmenta (strane). U nastavku izlaganja ograničićemo se na virtuelnu
memoriju organizovanu u stranice (ili kako se često naziva dinamičke stranice).
Operativni sistemi: Upravljanje memorijom
47
4.4.2 DINAMIČKE STRANICE
U pogledu podele program na stranice i memorije na odgovarajuće okvire strana i
formiranje tabele strana za preslikavanje programske adrese u memorijsku adresu ne
postoje nikakve razlike izmedju statičkih stranica i dinamičkih stranica. Suštinska razlika
izmedju ova dva načina upravljanja memorijom ogleda se medjutim u upravljanju
unošenjem. Naime, dok se kod statičkih stranica sve stranice programa unose u memoriju
na samom početku (odnosno preciznije pre nego što počne izvršavanje) programa, kod
dinamičkih stranica unošenje u memoriju vrši se isključivo po zahtevu (demand paging).
To praktično znači da u tabeli strana postoje strane koje se u posmatranom trenutku
nalaze u memoriji i za koje je postoji adresa okvira u kome su smeštene i strane koje se
ne nalaze u memoriji (već na disku) i za koje pokazivač na okvir u tabeli strana ima “nil”
vrednost. Kada se u toku izvršavanja programa traži pristup adresi koja pripada strani koja
nije u memoriji dolazi do prekida programa.
Ova vrsta prekida naziva se stranični prekid (page fault). Postupak u izvršavanju jedne
instrukcije može se prema tome prikazati na sledeći način:
1. Utvrdi da li je adresa kojoj se pristupa u memoriji.
Ako jeste nastavi sa izvršavanjem instrukcije. U suprotnom idi na korak 2.
2. Prekini izvršavanje programa.
3. Nadji slobodan okvir u memoriji.
Ako takav okvir ne postoji izbaci jednu od strana, odnosno oslobodi jedan od okvira koji
su dodeljeni programu.
4. Pronadji na disku stranu kojoj se pristupa i upiši je u slobodan (ili oslobodjen) okvir.
5. Ažuriraj tabelu strana (upiši adresu okvira u koji je smeštena strana).
6. Iniciraj izvršavanje instrukcije koja je izazvala prekid.
Ovde je posebno interesantno da uočimo korak 3.
Naime, ukoliko ne postoji ni jedan slobodan okvir (medju okvirima koje je operativni
sistem dodelio posmatranom programu) neophodno je da se jedna od strana koja se
trenutno nalazi u memoriji izbaci iz memorije.
Izbor takve strane vrši se pomoću odredjenog algoritma zamene. Imajući u vidu
činjenicu da je operacija pronalaženja strane na disku i njeno unošenje u memoriju
vremenski “skupa” operacija, to loš algoritam zamene strana može da izazove česte
stranične prekide što znatno umanjuje performansu sistema za upravljanje memorijom. U
tu svrhu razvijen je veći broj algoritama za zamenu strana čija je zajednička karakteristika
Operativni sistemi: Upravljanje memorijom
48
da na osnovu dosadašnjeg “ponašanja” programa pokušavaju da predvide njegovo
buduće “ponašanje”.
Ovde će se razmotriti dva poznata i često korišćena algoritma zamene strana - FIFO
(First In First Out) i LRU (Least Recently Used).
FIFO algoritam izbacuje stranu koja je najduže boravila u memeoriji. Na Slici 4.11
prikazan je način primene FIFO algoritma u dva slučaja - kada su programu dodeljena
samo dva okvira u memoriji, odnosno kada su mu dodeljena tri okvira.
1*
3
-
1*
3
4
1
-
-
1*
3
4
1*
3
4
5
1
4*
5*
1
3
5
3*
4
5*
1
3
2
1*
3
2
5
3*
2*
5
1
2
1*
3
3
5*
1
3
5*
1
Trag
adresa 1 3 4 1 4 5 1 3 5 2 3 5 1 3 5
Okvir 1
Okvir 2
Okvir 3
1*
3
4
3*
1
-
4*
1
4*
1
5
1*
5*
3
5
1*
5*
3
2
3*
2*
5
1
5*
2
3*
1*
3
5
3*
Trag
adresa 1 3 4 1 4 5 1 3 5 2 3 5 1 3 5
Okvir 1
Okvir 2
(a) Programu su dodeljena dva okvira
(b) Programu su dodeljena tri okvira
Slika 4.11
Na slici je prokazan trag adresa koji predstavlja redosled brojeva strana kojima je
program u toku izvršavanja pristupio. Pri tome su boldirani i podvučeni brojevi strana koje
su izazivale stranične prekide. U okvirima su prikazani brojevi strana koje se trenutno
nalaze u memoriji. pri čemu su “najstarije” stranice koje su kandidati za izbacivanje
označene sa zvezdicom.
Kao što se može i predpostaviti broj straničnih prekida opada sa povećanjem broja
okvira koji su dodeljeni programu (za dva okvira relativna frekvencija straničnih prekida
bila je ∼ 74%, a za tri okvira ∼ 67%). FIFO lagoritam ima medjutim nedostsatak koji se
naziva FIFO anomalija i koji se manifestuje tako da je moguće pokazati da za odredjen
trag adresa pri povećanju memorije koja se dodeljuje programu dolazi do povećanja broja
straničnih prekida..
LRU lagoritam izbacuje stranu koja se najduže nije koristila. Primena ovog algoritma
prikazana je na Slici 4.12 , pri čemu je korišćen isti trag adresa i isti broj okvira kao u
slučaju FIFO lagoritma.
Operativni sistemi: Upravljanje memorijom
49
Razlika izmedju FIFO i LRU algoritma može se uočiti u onim pristupima memoriji kod
kojih je strana kojoj se pristupa već u memoriji. Naime u tom slučaju ta strana postaje
“najsvežija” i neka druga strana postaje kandidat za izbacivanje (peti pristup memoriji u
slučaju (a) na posmatranoj slici). Rezultati ilustrovani ovim primerima pokazuju da je pri
manjem broja okvira moguće da FIFO algoritam pokaže bolje performanse (manji broj
straničnih prekida) dok se sa povećanjem broja okvira LRU algoritam pokazuje bokje
rezultate (relativna frekvencija straničnih prekida za dva okvira iznosi ∼94%, a za tri okvira
pada na ∼47%). Pored toga treba naglasiti da LRU spada u tzv. stak algoritme kod koji
FIFO anomalija nije ni teoretski moguća.
1*
3
-
1*
3
4
1
-
-
1
3*
4
1
3*
4
1
5
4*
1
5*
3
1*
5
4
1*
5
3
2
5
3*
2*
5
3
1
5
3*
2
5*
3
1
5*
3
1*
5
3
Trag
adresa 1 3 4 1 4 5 1 3 5 2 3 5 1 3 5
Okvir 1
Okvir 2
Okvir 3
1*
3
4
3*
1
-
4*
1
4
1*
5*
1
3
1*
5
4*
3*
5
2
5*
5
3*
5*
1
2*
3
3
1*
3*
5
Trag
adresa 1 3 4 1 4 5 1 3 5 2 3 5 1 3 5
Okvir 1
Okvir 2
(a) Programu su dodeljena dva okvira
(b) Programu su dodeljena tri okvira
Slika 4.12
Na kraju treba naglasiti da oba navedena algoritma spadaju u klasu algoritama kod
kojih se programu unapred odredi jedan odredjen, fiksan broj okvira u memoriji.
Za razliku od ovakvih algoritama često se pri,enjuju algoritmi kod kojih se broj okvira
dodeljen program menja (raste i opada) u toku jednog izvršavanja. Najpoznatiji algoritam
takvog tipa je tzv. Working Set (radni skup strana) koji je razvio Dennimg u toku rada na
operativnom sistemu Multics.
Operativni sistemi: Upravljanje memorijom
50
4.5 RAZMATRANJA IMPLEMANTACIJA
Virtualna memorija je strategija dodele memoriju koja dozvoljava da samo deo
programa koji se izvodi bude u radnoj memoriji. Temeljna prednost ovakvog pristupa je da
program može biti i veći od radne memorije. Tako korisnički program može poprimiti
proizvoljnu veličinu, a sistem za upravljanje memorijom preslikava logički prostor korisnika
u ograničeni prostor u radnoj memoriji. Ovakav sistem za upravljanje memorijom nije
jednostavno realizovati. Loša implementacija ovakvog sistema može značajno smanjiti
performanse celokupnog računarskog sistema. U ovom poglavlju razmatraju se realizacija
straničenja na zahtev (demand paging).
Algoritmi opisani u prethodnom poglavlju potrebni su iz razloga što naredbe koje se
izvode moraju biti u glavnoj memoriji. Najjednostavnije je da se celi program upiše u
glavnu memoriju. Prebacivanje (overlay) i dinamičko punjenje rešavaju poslednje
ograničenje, ali zahtevaju dodatne mere od strane programera.
Analize programa ukazuju da obično nije potreban celi program da bi se potrebna
obrada izvela. Tako npr.:
� Programi sadrže procedure za obradu slučajnih ili namjernih grešaka. Budući da se takvi slučajevi relativno retko dešavaju, program izvede potrebnu obradu bez poziva spomenutih procedura.
� Program za polja, liste, tabele, i slične statičke strukture obično rezerviše više memorije nego je stvarno potrebno.
� Pojedine opcije programa relativno se retko koriste. Tako npr. pravnici kad pišu u Word tekst procesoru verojatno nikad neće koristiti Equation editor.
Čak i u slučajevima koji ne spadaju u navedene kategorije, činjenica je da celi program
nije istovremeno potreban. Tako svojstvo da samo dio programa koji se izvodi se nalazi u
memoriji ima niz prednosti:
� Veličina programa nije ograničena veličinom radne memorije. Programer može napisati programa kao da sistem raspolaže s neograničenom memorijom, odnosno programer raspolaže s neograničenim virtualnim logičkim adresnim prostorom. Ovo uveliko pomaže kod pisanja programa.
� Korisnički program može se izvoditi sa znatno manjom dodijeljenom fizičkom memorijom, što omogućava veći stupanja višeprogramskog rada. Time se povećava iskoristivost kao i propusna moć sistema.
� Manje U/I operacija potrebno je za prebacivanje korisničkih programa iz i u memoriju. Tako se korisnički programi brže izvode.
Zaključaj je da izvođenje programa koji nisu cijeli upisani u memoriji ima brojne
prednosti i za korisnika i za računalni sistem.
Virtualna memorija je razdvajanje logičkog adresnog prostora koji vidi korisnik od
fizičkog adresnog prostora u kojem se program izvodi. Ovo razdvajanje omogućava
programeru da raspolaže sa neograničenim logičkim prostorom iako se program stvarno
izvodi u relativno malom fizičkom adresnom prostoru. Virtualna memorija olakšava posao
Operativni sistemi: Upravljanje memorijom
51
programeru, ne samo što raspolaže s neograničenim logičkim prostorom, nego što ne
treba da vodi računa o strukturi programa koju je zahteva o sistem s prebacivanjem ili
dinamičkim punjenjem. Princip virtualne memorije prikazan je slikom 4.13.
stranica 0
stranica 1
stranica 2
stranica 3
stranica n
virtualnamemorija
tablicastranica
fizičkamemorija
sekundarnamemorija
(disk)
Slika 4.13. Prikaz virtualne memorije koja je veća od fizičke memorije.
Virtualna memorija obično se realizuje kao straničenje na zahtev (demand paging).
Moguće ju je primijeniti u sistemima koji koriste podelu memorije na segmente. Nekoliko
sistema rešilo je virtualnu memoriju pomoću segmenata, gdje su segmenti podijeljeni na
stranice. Tako korisnik vidi program podijeljen na segmente, a operativni sistem deli
segmente na stranice. Tako je IBM OS/2 koristio koncept segmentacije na zahtev. Važno
je napomenuti da su algoritmi zamene segmenata znatno složeniji od algoritama zamene
stranica budući su segmenti promjenjive veličine, a stranice fiksne.
4.6 STRANIČENJE NA ZAHTEV (DEMAND PAGING)
Straničenje na zahtev koristi koncept sličan prebacivanju. Proces je pohranjen na
sekundarnoj memoriji, obično disku. Kada se namerava izvesti proces upisuje se samo
jedan njegov dio u radnu memoriju. Kod upisivanja procesa u memoriju uobičajeno se
koristi tzv. lenji prebacivač (lazy swapper) koji upisuje stranicu u memoriju tek kada je ona
potrebna. Termin swapper može se smatrati netačnim jer se on obično odnosi na
prebacivanje celog procesa. Ispravnije je korišćenje termina pegger koji se odnosi na
prebacivanje stranice. Proces se sada može posmatrati kao niz stranica koji se prema
potrebi upisuju u memoriju.
Operativni sistemi: Upravljanje memorijom
52
Ovakav pristup dodeli memorije zahteva i određenu sklopovsku podršku. Prvenstveno
potrebno je razlučiti koje su stranice upisane u memoriju, a koje se samo nalaze na disku.
Ovaj problem rešava se proširenjem tabele stranica bitom prisutnosti koji daje informaciju
da li se stranica nalazi u radnoj memoriji ili ne, slika 4.14
stranica A
stranica B
stranica C
stranica D
stranica E
stranica F
stranica G
stranica H
virtualnamemorija
tablicastranica
fizičkamemorija
sekundarnamemorija
(disk)
0
1
2
3
4
5
6
7
01234567
10100100
4
6
9
0123456789
1011121314151617
A
C
FA
D
G
C
F
B
E
H
bitprisustva
Slika 4.14. Tabele stranica kad sve stranice nisu u radnoj memoriji.
Kada se pristupa pojedinoj stranici, operativni sistem preko tabelee stranica ispituje da
li je adresirana stranica u memoriji ili ne. Ako je stranica u upisana u fizičku memoriju, bit
prisustva je postavljen u jedinicu, tada se izračunava fizička adresa naredbe ili podatka i
pristupa mu se. Ali ako adresirana stranica nije u memoriji tada ju je potrebno upisati u
memoriju i tek onda izvršiti pristup. Procedura pristupa stranici može se opisati na sledeći
način:
� hardver prvo proverava bit prisustva adresirane stranice kako bi se odredilo da li je stranica u memoriji ili ne.
� Ukoliko stranica nije u memoriji (došlo je do tzv. promašaja) generiše se prekid koji dojavljuje operativnom sistemu da treba pronaći stranicu na sekundarnoj memoriji i prebaciti je u radnu memoriju. Obično promašaj rezultira prekidom prava korištenja procesora, te se proces prebacuje u red čekanja na U/I uređaj, u ovom slučaju disk.
� operativni sistem pronalazi slobodan okvir u radnoj memoriji (operativni sistem vodi listu slobodnih okvira).
� Prebacuje se tražena stranica u odabrani okvir. � Osvežava se tabele stranica procesa na način da se stranici pridružuje dodeljeni okvir.
Ovim je praktično proces spreman da nastavi s izvođenjem. � Prekinuta naredba se ponovo izvodi a stranici se pristupa kao da je ona oduvijek bila u
memoriji.
Opisani proces prikazan je slikom 4.15
Operativni sistemi: Upravljanje memorijom
53
stranica D
virtualnamemorija
tablicastranica
fizičkamemorija
sekundarnamemorija
(disk)
2
3
01234567
10100100
4
6
9
0123456789
1011121314
A
C
F
A
D
G
C
F
B
E
H
bitprisustva
load M
prekid
1
2
65
4
3
adresiranje
operacijskisustav
stranica je na disku
stranica uslobodan
okvir
obnovitablicu
stranica
ponovinaredbu
Slika 4.15. Koraci u slučaju promašaja stranice.
U celom ovom procesu važno je primijetiti da se nakon prekida sačuva stanje procesa
(programsko brojač i ostali spremnici opće namjene) te da se nakon unosa stranice u
radnu memoriju te osvježavanja tablice stanja proces može nesmetano nastaviti. Jedina
razlika je u tome što je sada adresirana stranica u radnoj memoriji.
Teoretski postoji verovatnoća da tokom izvođenja jedne naredbe dođe do višestrukih
promašaja. Naime, program se može nalaziti na jednoj stranici, a podaci na drugoj.
Ovakve situacije, koje na sreću nisu učestale, dovele bi do značajnog pada performansi
sistema.
Kao i kod dodele memorije po stranicama, virtualna memorija zahteva značajnu
hardversku podršku kako bi se održale dobre performanse sistema. Uz sklopovlje
potrebna je i dodatna programska podrška. Takođe, za implementaciju ovakvog sistema
dodele memorije potrebne su i određene promene arhitekture računala. Temeljni problem
je potreba za ponavljanjem naredbe ukoliko dođe do promašaja. Do promašaja može doći
u bilo kojoj fazi izvođenja naredbe. Ukoliko do promašaja dođe kod dohvata naredbe
jednostavno se nakon unosa stranice u memoriju ponavlja njen dohvat te nastavlja s
njenim izvođenjem. Ali ukoliko dođe do promašaja tokom dohvata operanda tada je
potrebno ponovo uzeti naredbu, dekodirati je te dohvatiti operand koji je sada u radnoj
memoriji.
Neka se izvodi naredba koja sabira dvije memorijske varijable A i B i rezultat
pohranjuje na treću memorijsku lokaciju C. Naredba se izvodi kroz sledeće korake:
1. dohvati i dekodiraj naredbu,
Operativni sistemi: Upravljanje memorijom
54
2. dohvati operand A, 3. dohvati operand B 4. zbroji A i B, 5. pohrani rezultat u C.
Neka se rezultat C nalazi na lokaciji koja pripada stranici koja trenutno nije u memoriji.
Promašaj tada rezultira procedurom unosa stranice u memoriju, te ponavljanja koraka 1-5.
Program normalno nastavlja s izvođenjem, a ovakve situacije ako nisu učestale neće
značajno uticati na cjelokupne performanse sistema.
Problem može nastupiti ukoliko procesor raspolaže s naredbama koje menjaju
istovremeno sadržaje više memorijskih lokacija. Tako je npr. IBM 370, a i Intel 80x86 ima
naredbe za prebacivanje niza karaktera s jedne na drugu lokaciju. Poseban problem
nastaje ukoliko izvorni i odredišni niz dele neke lokacije, slika 4.16. Ako je promašaj
nastupio nakon što je izmijenjen dio izvornog niza tada nije moguće ponoviti započetu a
prekinutu naredbu.
znak 0znak 1znak 2znak 3znak 2znak 3znak 4znak 5znak 6znak 7
novastranica
vrijeme prekida
znak 0znak 1znak 2znak 3znak 4znak 5znak 6znak 7
novastranica
prije prekida
Slika 4.16 Prebacivanje niza znakova s jedne na drugu memorijsku lokaciju.
Navedeni problem moguće je rešiti na dva načina. Prvi je da se pre prebacivanja
ispitaju početne i krajnje adrese oba niza te da se prema potrebi odmah unesu potrebne
stranice u memoriju. Drugi pristup bila bi primena privremenih bafera u koju bi se pohranile
vrednosti izmenjenih lokacija. U slučaju obnovili bi se sadržaji izmenjenih lokacija i
ponovila bi se naredba.
Sličan problem susreće se kod procesora koji koriste posebne modove adresiranja kao
npr. autoinkrement i autodekrement (npr. PDP 11 ili Motorola 68000). Ovi adresni modovi
koriste sadržaj bafera kao pokazivač na podatak kojem se pristupa, pri čemu se
automatski sadržaj bafera inkrementira ili dekrementira. Autodekrement umanjuje vrednost
pokazivača (sadržaj bafera) pre pristupa operandu, dok aoutinkrement povećava vrednost
pokazivača (sadržaj bafera) nakon pristupa operandu. Tako naredba
Operativni sistemi: Upravljanje memorijom
55
MOV (R2)+,-(R3)
kopira sadržaj memorijske lokacije na koju pokazuje registar R2 na memorijsku
lokaciju na koju pokazuje registar R3, s time da se sadržaj bafera R2 povećava za 2 nakon
upisa vrednosti u memoriju, a sadržaj registra R3 umanjuje se za 2 pre dohvata
operanda. Ukoliko operand na koji pokazuje umanjena vrednost registra R3 nije u memoriji
(promašaj) tada nastupa problem pri ponovljenom izvođenju naredbe. Moguće rešenje je
uvođenje zasebnog privremenog bafera koji pamti prethodni sadržaj bafera tako da je pri
ponavljanju naredbe moguće obnoviti prvobitnu vrednost bafera.
Svakako navedeni problemi postavljaju posebne zahteve na arhitekturu procesora koji
koristi straničenje na zahtev. Sklopovi koji upravljaju memorijom nalaze se između
procesora i memorije i moraju biti potpuno transparentni korisniku. Zato ovakav sistem za
upravljanje memorijom nije moguće realizirati kod svih procesora.
4.7 PERFORMANSE SISTEMA SA STRANIČENJEM NA ZAHTEV
Straničenje na zahtev ima značajan uticaj na performanse računarskog sistema. Bolji
uvid na uticaj ovakve strategije dodele memorije moguće je proceniti pomoću efektivnog
vremena pristupa memoriji (effective access time). Ukoliko se stranica nalazi u memoriji
efektivno vreme pristupa jednako je vremenu pristupa memoriji ma. Ali ukoliko stranica nije
u memoriji potrebno je obraditi prekid, uneti stranicu u memoriju i ponoviti naredbu što
predstavlja znatno duže vreme pristupa tf. Neka je verovatnoća promašaja p (0≤ p ≤ 1).
Efektivno vreme pristupa iznosi:
eat = (1 - p)⋅ma + p⋅tf.
Vreme pristupa memoriji kod današnjih procesora je reda ns, npr. 10ns. Za procenu
vremena pristupa memoriji u slučaju promašaja potrebno je sagledati sve korake koje je
potrebno napraviti, a to su:
1. postaviti zahtev za prekid procesoru, 2. sačuvati stanje prekinutog procesa, 3. odrediti da se prekid odnosi na promašaj stranice, 4. provjeriti da li je dozvoljen procesu pristup toj stranici i pronaći stranicu na disku, 5. postaviti zahtev za pre nos stranice u slobodan okvir što zahteva :
a) čekanje u redu dok se prihvati zahtev za U/I pre nosom, b) čekanje na pronalaženje traženog sektora na disku (vreme traženja ili latentnost), c) pre nos stranice s diska u slobodan okvir,
6. za vreme čekanja na obradu postavljenog U/I zahteva dodeliti procesor nekom drugom procesu,
7. po završetku pre unosa stranice sa diska dojaviti operativnom sistemu da je pre unos obavljen (postavlja se novi zahtev za prekidom),
8. sačuvati stanje prekinutog procesa, 9. odrediti o kojoj vrsti prekida se radi (U/I pre nos s diska završio), 10. uneti promjene u tabela stranica procesa koji je ima promašaj,
Operativni sistemi: Upravljanje memorijom
56
11. čekaj dok proces dobije ponovo pravo na korištenje procesora, 12. obnovi stanje procesa i ponovi prekinutu naredbu.
Naravno, ne moraju se dogoditi svi koraci u svakom slučaju promašaja. Npr. korak broj
6 podrazumijeva da se procesor dodjeljuje drugom procesu kako bi se održala što veća
zaposlenost procesora, ali ona rezultira u dodatnom vremenu potrebnom za obradu
promašaja.
U svakom slučaju za procenu vremena obrade promašaja moraju se uzeti u obzir
sledeće tri radnje:
1. obrada prekida zbog promašaja, 2. unos stranice u memoriju, 3. nastavak prekinutog procesa.
Prvi i teći zadatak mogu se pažljivim kodiranjem sistemskih procedura ograničiti na
nekoliko stotina naredbi, što se može proceniti na vreme od nekoliko mikrosekunda. Drugi
zadatak vremenski je znatno zahtevniji, jer je potrebno pronaći stranicu na disku, postaviti
glavu diska na traženi sektor te prebaciti stranicu u memoriju. Ovo vreme kod današnjih
diskova može se proceniti na deset do dvadeset milisekunda. Prema tome kod promašaja
praktički najveći dio vremena troši se na unos stranice u memoriju. Kod višeprocesnog
rada situacija je nepovoljnija jer ovom vremenu potrebno je dodati prosječno čekanje u
različitim redovima.
Za ilustraciju uzeti će se vreme pristupa memoriji 10ns, a vreme obrade promašaja
25ms. Efektivno vreme promašaja iznosi:
eat = (1 – p)⋅10 + p⋅25 000 000 = 10 + 24 999 990⋅p
Neka je zahtev da efektivno vreme pristupa može biti samo 10% veće od vremena
pristupa memoriji dobiva se dozvoljena verovatnoća promašaja p < 4⋅10-8, odnosno da je
dozvoljen samo jedan promašaj na 25 milijuna pristupa. Ovaj grubi proračun govori da je
važno održati verovatnoća promašaja jako malom kao se ne bi značajno degradirale
performanse celovitog sistema.
4.8 PROBLEM ZAMENE STRANICA
U do sada provedenim razmatranjima pretpostavilo se da u slučaju promašaja
operativni sistem uvijek ima u memoriji slobodan okvir u koji će upisati traženu stranicu.
Naravno u praksi situacija je sasvim drugačija. Tokom rada, a posebno u višeprocesnom
sistemu, memorija se sasvim popuni te je u slučaju promašaja potrebno osloboditi okvir za
novu stranicu izbacivanjem neke od stranica koje su već u memoriji. Kako će biti
naknadno opisano, odabir stranice koju će se izbaciti, tzv. žrtvu (victim) posebno je
osjetljivo pitanje i strategija zamene stranica može značajno uticati na performanse
sistema.
Operativni sistemi: Upravljanje memorijom
57
Prvo, načelno se može proširiti procedura obrade promašaja na sledeći način (slika
9.5):
1. pronalaženje tražene stranice na disku, 2. odabir okvira u koji će se stranica upisati:
a) ako postoji slobodan okvir njega se koristi, b) ako nema slobodnih okvira poseban algoritam odabire žrtvu i prebacuje prema
potrebi odabranu stranicu na disk, ažurira tabela stranica i oslobađa okvir, 3. upisuje traženu stranicu u oslobođeni okvir i ažurira tabela stranica, 4. ponavlja prekinutu naredbu.
Izbacivanje stranice iz okvira zahteva dodatni prenos na disk što dvostruko produžava
vreme obrade promašaja, a time i efektivno vreme pristupa memoriji.
Pogodnost je što nije uvijek nužno žrtvu prebaciti natrag na disk. Ukoliko sadržaj
stranice nije mijenjan, npr. odnosi se na program ili ulazne podatke, tada je sadržaj
stranice na disku i u memoriji isti te nije potrebno vračati stranicu na disk. Dovoljno je
samo sadržaj okvira prepisati sadržajem nove stranice. Informaciju o tome da li se što
mijenjalo u sadržaju stranice moguće je dobiti uvođenjem zasebnog bita, bita izmjene
(modify bit, dirty bit), koji se postavlja u jedinicu ukoliko je išta mijenjano u sadržaju
stranice. Algoritam za zamenu stranica prvo provjerava bitove izmjene stranica koje bi se
mogle izbaciti i odabire one koje nisu mijenjane, odnosno one kojima je bit izmjene nula.
stranica D
virtualnamemorija
tablicastranica
fizičkamemorija
sekundarnamemorija
(disk)
2
3
01234567
10100110
4
6
913
0123456789
1011121314
A
C
F
G
A
D
G
C
F
B
E
H
bitprisustva
load M
prekid
1
2
87
5
4
3
adresiranje
operacijskisustav
stranica je na disku
stranica uoslobođen
okvirobnovitablicu
stranica
ponovinaredbu
izbacujese
žrtva
6
stranice zauzetedrugim procesima
Slika 4.16. Koraci u slučaju promašaja stranice kada nema slobodnih okvira.
Sledeći problem koji je potrebno rešiti je izbor algoritma odabira stranice žrtve koju će
se izbaciti iz memorije.
Operativni sistemi: Upravljanje memorijom
58
4.9 ALGORITMI ZAMENE STRANICA
U praksi se susreću brojne strategije zamene stranica, a koje imaju jedinstven cilj,
zadržati što manji broj promašaja uz prihvatljivu sklopovsku i programsku podršku.
Procenu kvalitete pojedinog algoritma moguće je napraviti proračunom broja
promašaja za konkretan niz logičkih adresa pri čemu se spomenuti niz naziva referentni
niz. Njega je moguće generirati umjetnim putem (npr. generator slučajnih adresa određene
distribucije) ili pomoću snimljenog niza generiranih adresa stvarnih programa. Sledeće što
je potrebno definirati je broj okvira koji mogu procesu stajati na raspolaganju. Očito što je
veći broj raspoloživih okvira po procesu da je verovatnoća promašaja manja, slika 4.17. S
druge strane veći broj okvira po procesu smanjuje mogući broj procesa koji se
konkurentno izvode, odnosno smanjuje stupanj višeprocesiranja.
0
2
4
6
8
10
12
0 1 2 3 4 5 6 7 8 9broj okvira
broj
pro
maš
aja
Slika 4.17. Odnos broja promašaja i broja okvira dodijeljenih procesu.
Algoritmi zamene usporediti će se na sledećem referentnom nizu stranica:
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1,
a procesu su dodijeljena tri okvira.
4.9.1 FIFO ALGORITAM
Algoritam najjednostavniji za implementaciju je zameniti stranicu koja je od stranica u
memoriji prva unesena (First In First Out). Stranice se stavljaju u red kako se unese u
memoriju i kada nema slobodnih okvira izbacuje se ona koja je prva u redu.
Stanja memorije za pretpostavljeni referentni niz stranica i tri dodijeljena okvira po
procesu prikazana su sljedećom tabelom:
Operativni sistemi: Upravljanje memorijom
59
Provedeni analiza pokazuje da je učestala zamjena stranice kojoj se u sljedećoj
pristupa što znatno povećava broj promašaja, a time i efikasnost sistema. Tako je za ovaj
primjer usledilo 15 promašaja.
Uz spomenuti ozbiljan nedostatak ovog algoritma, koji se pak odlikuje jednostavnošću
implementacije uočena je i sledeća anomalija koja se može ilustrujeti na sledećim
referentnim nizom stranica:
Analiza je pokazala da je za tri dodijeljena okvira usledilo devet promašaja. Neka se
broj okvira poveća na četiri:
Za očekivati je bilo da se broj promašaja smanji, ali broj promašaja se povećao. Ovo
se naziva Beladyeva anomalija, a posljedica je zamene stranice koja će biti adresirana u
sledećem pristupu memoriji.
4.9.2 OPTIMALNI ALGORITAM
Analize provedene za FIFO algoritam mogu se iskoristiti za postavljanje optimalnog
algoritma izbora stranice koju će se zameniti. Lako može zaključiti da bi optimalno bilo
zameniti onu stranicu koja će se u budućnosti najkasnije koristiti. Za zadani referentni niz
stranica optimalni algoritam izvodio bi zamenu na sledeći način:
Operativni sistemi: Upravljanje memorijom
60
Primjenom ovog algoritma smanjen je broj promašaja na svega devet, što predstavlja
značajno smanjenje broja promašaja. Nažalost ovakav algoritam zamene stranica praktički
je nemoguće implementirati, budući nije poznato koja će se stranica u budućnosti
najkasnije koristiti.
4.9.3 ZAMJENA NAJKASNIJE KORIŠTENE STRANICE (LRU – LAST RECENTLY USED)
Optimalni algoritam iako nije moguće implementirati koristi može se koristiti i kao
mjerilo kvalitete ostalih algoritama i kao smjernica preostalim mogućim rešenjima. Polazeći
od ideje slične optimalnom algoritmu, predloženo je rešenje zamene stranice koja se u
prošlosti najkasnije koristila (LRU – Last Recently Used). Ovaj algoritam primenjen na
referentni niz stranica izvodio bi zamenu na sledeći način:
Primjenom ovog algoritma broj promašaja je dvanaest, što predstavlja napredak u
odnosu na FIFO algoritam, ali nema tako dobar učinak kao optimalni algoritam. Može se
pokazati da ovaj algoritam ne pati od Beladyeve anomalije. Zato je i najčešće primjenjivan
u operativnim sistemima.
Postavlja se pitanje kod ovog algoritma njegove implementacije, odnosno beježenja i
usporedbe kada je koja stranica adresirana. Moguća su dva načina beježenja vremena
pristupa stranici:
� Polje vremena se dodaje tablici stranica. Pristupom svakoj stranici upisuje se u polje vremena vreme pristupa stranici. Sličan pristup je brojač čiji sadržaj se povećava prilikom svakog pristupa stranici. U svakom slučaju potrebno je dodatno sklopovlje kojim se implementira opisano rešenje. Prilikom potrebe zamene stranice uspoređuju se polja vremena ili vrednosti brojila kako bi se odabrala stranica kojoj se najduže nije pristupalo. Kod primjene brojila potrebno je uzeti u obzir mogućnost preteka brojila.
� Dvostruko vezana lista stranica je drugo moguće rešenje. Stranica kojoj se pristupa postavlja se na početak liste. Ovim pristupom na početku liste nalaze se stranice kojima se nedavno pristupalo, dok na kraju liste stranice kojima se najduže nije pristupalo. Može se primijetiti složenost ovakvog rješenja, posebno što je potrebno prebacivati stranice unutar liste što zahteva neopravdano veliko vreme.
Oba pristupa zahtevaju složenu sklopovsku podršku, dodatnu programsku podršku
koja se mora izvoditi u svakom pristupu memoriji, što je potpuno neprihvatljivo. Zato je
potrebno određenim rešenjima aproksimirati LRU algoritam.
Operativni sistemi: Upravljanje memorijom
61
4.9.4 APROKSIMACIJE LRU ALGORITAMA
Kako je već objašnjeno nije ekonomski opravdano implementirati stvarni LRU
algoritam, ali moguće je napraviti određene aproksimacije istog. Najjednostavnije rešenje
je proširiti tabela stranica dodatnim bitom, tzv. bitom pristupa (reference bit). Sistemski sat
postavlja ovaj bit u nulu u regularnim vremenskim razmacima. Prilikom svakog pristupa
stranici sklopovlje automatski postavlja bit pristupa stranice u jedinicu. Onim stranicama
kojima se pristupalo u prethodnom intervalu postavljeni su bitovi pristupa, a onima kojima
ne ti bitovi su ostali u nuli. Između posljednjih operativni sistem odabire stranicu koju će
zameniti, npr. prema FIFO algoritmu ili slučajnim izborom. Naravno ovakav pristup gruba
je aproksimacija LRU algoritma, ali je jednostavan za implementaciju. Za napomenuti je
potreba odabira veličine intervala poništavanja bitova pristupa. Ukoliko je taj interval
kratak, najvjerojatnije će postojati informacija da se pristupalo samo jednoj stranici, a
ukoliko je prevelik tada se može dobiti informacija da se pristupalo svim stranicama pa se
algoritam degenerira u FIFO algoritam.
Dodatni bitovi pristupa
Prethodni algoritam moguće je unapre diti dodatnim bitovima pristupa. Uz svaki redak
tablice stranica pridružen je npr. osam bitovni posmačni bafera. Kada se stranica upiše u
memoriju, svi bitovi ovog bafera postavljaju se u nulu. Kada se pristupi stranici, sklopovlje
automatski bit najvećeg značenja posmačnog bafera postavlja u jedinicu. Sistemski sat u
regularnim vremenskim intervalima daje naredbu kojom se sadržaj svih bafera pomiče za
jedno mijesio u desno, slika 4.18.
10010101
00010000
10110011
11000011
01010110
00100100
00001100
00000000
postavibit
tablica stranica u tn+1
pomakni udesno
10010101
00010000
10110011
11000011
01010110
00100100
00001100
01001100
tablica stranica u tn
0
1
2
3
4
5
6
7
0
1
2
3
4
5
6
7
Slika 4.18 Realizacija LRU algoritma s posmačnim spremnicima.
Stranica čija vrednost posmačnog bafera je najmanja je najdalje u prošlosti korištena.
Prema slici 4.18 to je stranica broj 4, dok su npr. stranice 0 i 7 otprilike isto daleko u
Operativni sistemi: Upravljanje memorijom
62
prošlosti korištene. Ako npr. ima više stranica s najmanjim brojem može se dodatni odabir
napraviti ili FIFO algoritmom ili slučajnim odabirom.
Broj dodatnih bitova pristupa proizvoljan je i uslovljen kompromisom između
informacije koja se dobiva i troška sklopovlja.
Algoritam druge prilike (second-chance)
Algoritam druge prilike sklopovski je najjednostavnija aproksimacija LRU algoritma. On
koristi samo jedan bit pristupa u tablici stranica, a stranice se zamjenjuju pomoću FIFO
algoritma na sledeći način:
1. za zamenu odabire se stranica po FIFO algoritmu, 2. ispituje se njen bit pristupa
a) ako je on postavljen (stranici se pristupalo) stranici se ostavlja u memoriji ali joj se bit pristupa poništava (daje joj se druga prilika),
b) ako je bit pristupa nula stranica se zamjenjuje 3. ispituje se bit pristupa sledeće stranice u redu.
Slika 4.20 ilustruje ovaj algoritam.
00000011
bitpristupa
tablica stranica nakon izbacivanja
pokazivačna prvu
žrtvu
00110011
bitpristupa
tablica stranica u trenutku promašaja
pokazivačna prvu
žrtvu
ova stranicase izbacuje
Slika 4.20 . Opis algoritma druge prilike.
Poboljšani algoritam druge prilike
Već je u prethodnim razmatranjima spomenuto kako je bolje zameniti stranicu čiji
sadržaj se nije mijenjao jer u tom slučaju nije potrebno vraćati njen sadržaj na disk pa je
vreme zamene smanjeno. Zato se poboljšanje algoritma druge prilike postiže analizom
bita promjene, koji je također sastavni dio tablice stranica. Pomoću bit pristupa i bita
izmjene (bp, bi), odabire se prva stranica prema sledećim prioritetima:
1. (0,0) stranica nije nedavno korištena a sadržaj je nepromijenjen, 2. (0,1) stranica nije nedavno korištena ali je sadržaj mijenjan, 3. (1,0) stranica je nedavno korištena ali sadržaj je nepromijenjen,
Operativni sistemi: Upravljanje memorijom
63
4. (1,1) stranica je nedavno korištena i sadržaj je mijenjan.
Iz liste stranica, kao i u prethodnom algoritmu, odabire se za zamenu prva stranica
najmanjeg prioriteta (1). Ako nema takvih traži se prva stranica prioriteta (2) itd. Može se
primijetiti da je ponekad potrebno obići i više puta cijelu listu stranica. Također, stranicama
koje se nalaze između prethodnog položaja pokazivača i novog položaja poništava se bit
pristupa.
Ovakav algoritam koristio je Mecintosh sistem za upravljanje virtualnom memorijom.
4.9.5 ALGORITMI TEMELJENI NA BROJANJU PRISTUPA STRANICI
Osim opisanih brojni su i drugi algoritmi koji se koriste za zamenu stranica. Tako npr.
uz svaku stranicu može se vezati brojač koje broji broj pristupa svakoj pojedinoj stranici
procesa koja se nalazi u memoriji. Temeljom broja pristupa moguće su sledeći algoritmi
zamene:
� najmanje korištene stranice (last frequently used LFU): stranica kojoj se najmanje pristupalo u prethodnom razdoblju vjerojatno se neće ni koristiti pa je možda najbolje nju izabrati. Ovakav pristup ima nedostatak da stranica kojoj se dosta pristupalo u početnoj fazi izvođenja programa je ubilježila brojne pristupe a praktički je nepotrebna za daljnje izvođenje programa. Tako ona praktički trajno ostaje u memoriji iako je nepotrebna
� najviše korištene stranice (most frequently used MFU): ovaj algoritam ima suprotnu logiku prethodnom jer pretpostavlja da se stranici koja je tek upisana u memoriju najmanje pristupalo, a da je velika verovatnoća da će joj se pristupati i u budućnosti. Nedostatak je što stranice koje imaju neke procedure koje se malo koriste, npr. za korekciju pogrešaka, kada se jednom unesu trajno ostaju u memoriji.
Iz navedenog lako je zaključiti da se opisani algoritmi malo koriste prvenstveno zbog
relativno skupe realizacije ovih algoritama, a anomalije koje oni iskazuju su relativno
ozbiljne.
4.9.6 STVARANJA LISTA SLOBODNIH OKVIRA
Uz spomenute algoritme poboljšanje rada sistema dobiva se stvaranjem liste
slobodnih okvira koji ne pripadaju ni jednom procesu. Kada dođe do promašaja stranice,
stranica koju je potrebno izbaciti odabire se prema prethodno opisanim algoritmima, ali
istovremeno započima upis nove stranice u jedan od slobodnih okvira pre nego se
odabrana stranica izbaci na disk. Ovim pristupom proces može brže nastaviti s
izvođenjem. Nakon što se odabrana stranica prebaci na disk, njoj pripadajući okvir
proglašava se slobodnim i stavlja u listu slobodnih okvira.
Daljnje unapređenje ove ideje je lista izmenjenih stranica procesa, odnosno lista
stranica u kojih se tokom izvođenja upisivalo. U svakom trenutku kada je sklopovlje za
Operativni sistemi: Upravljanje memorijom
64
odabir stranice koju će se izbaciti slobodno odabire se jedna od izmenjenih stranica i
prebacuje njen sadržaj na disk, a ona se označava kao neizmijenjena. Ovim pristupom
povećava se verovatnoća da se prema potrebi pronađe neizmijenjena stranica koju će se
izbaciti.
Nadalje, moguće je uz listu slobodnih okvira zadržati informaciju koja se stranica u
okviru nalazila pre nego što je on označen kao slobodan. Budući da je sadržaj okvira u
kojem se nalazila izbačena stranica ostao nepromijenjen, prema potrebi, ako se ona
ponovo adresira u skoroj budućnosti nije potrebno izvoditi prebacivanje s diska nego se
samo ažurira tablica stranica. Ovaj pristup koristio je VAX/VMS sistem s FIFO algoritmom
zamene stranica.
4.10 DODELA BROJA OKVIRA PROCESU
Problem koji do sada nije razmatran je kako podijeliti okvire među procesima? Koliko
procesa dozvoliti da se konkurentno izvode?
Kod jednokorisničkog sistema situacija je krajnje jednostavna. Određeni broj okvira
zauzima operativni sistem, a sve ostale okvire koristi korisnički program ili programi.
Pozivani programi ili procedure odnosno njihovi dijelovi pune se po stranicama u memoriju
prema zahtevu, a kada se popuni memorija nekim od opisanih algoritama izvodi se
zamjena stranica.
Za razliku od jednokorisničkog sistema, kod višekorisničkog sistema stvar je složenija.
U ovom slučaju više korisnika starta svoje procese koji su različiti prema veličini i strukturi
obrade. Prvo pitanje je kako raspodijeliti slobodne okvire između procesa?
Pre nego se odgovori na postavljeno pitanje potrebno je odrediti minimalni broj
stranica koje proces mora imati da bi se uopće mogao izvoditi. Pri tome se misli na
maksimalni broj stranica unutar koje adresira jedna naredba, a odgovor je direktno vezan
uz arhitekturu procesora. Tako npr. za procesor koji koristi indirektno adresiranje naredba
se može nalaziti u jednoj stranici, adresa lokacije na kojoj je pohranjena adresa operanda
u drugoj, a sam operand u trećoj stranici. Znači da ova naredba za izvođenje zahteva tri
memorijska okvira. Slična analiza može se provoditi i za druge složene naredbe dok je kod
RISC procesora stvar znatno jednostavnija.
Zaključak je da arhitektura računala, ili bolje rečeno arhitektura skupa naredbi
procesora, određuje minimalni broj okvira koji mora biti dodijeljen procesu, dok maksimalni
broj okvira je ograničen samo veličinom radne memorije.
Nakon ovih razmatranja, moguće je potražiti odgovor na postavljeno pitanje kako
raspodijeliti slobodnu memoriju između procesa. Najjednostavniji pristup je tretirati sve
procese jednako i svakom dodeliti jednak broj okvira. Tako ako sistem raspolaže s m
Operativni sistemi: Upravljanje memorijom
65
slobodnih okvira, k ih se može odrediti kao lista slobodnih, a m – k jednoliko raspodijeliti
između n procesa. Tako svaki proces dobiva na raspolaganje (m – k)/n okvira.
Lako je uočiti nedostatak ovog pristupa. Svi procesi nisu jednake veličine i jednakih
zahteva. Jednostavan primjer neka bude sistem sa 60 slobodnih okvira veličine 1K. Neka
se istovremeno izvode dva procesa: jedan ukupne veličine 20K ⇒ 20 okvira i drugi veličine
200K ⇒ 200 okvira. Ravnomjernom raspodjelom okvira oba procesa bi dobila po 30 okvira
što je krajnje nerazumno, jer prvi proces dobiva više okvira nego što mu je potrebno.
Kao poboljšanje može se uvesti dodela proporcionalna veličini procesa. Za sve
procese uzete na obradu izračuna se ukupni virtualni adresni prostor:
∑=
=
n
1i
isS ,
gdje je si memorijski zahtev i-tog procesa. Svakom procesu dodjeljuje se broj okvira
prema sljedećoj formuli:
)km(S
sa
ii −⋅= ,
gdje je m – k ukupni broj slobodnih okvira koji su na raspolaganju korisničkim
procesima. Za prethodni primjer slijedi:
5560220
200a ,560
220
20a ,22020020S 21 =⋅==⋅==+= .
Ovako procesi dobivaju broj okvira proporcionalno svojim zahtevima. Spomenuta
shema može se nadodati i određenim koeficijentima korekcije na način da se procesima s
većim prioritetom dodjeljuje relativno veći broj stranica. Tako za isti primjer neka je prvi
proces važniji od drugoga pa neka mu se dodijeli koeficijent 3 u odnosu na drugi.
Raspodjelu slobodnih okvira izvodimo prema izrazu:
4660260
200a ,1460
300
203a ,2602001203S 21 =⋅==⋅
⋅==⋅+⋅= .
Sada prvi proces dobiva znatno veći broj okvira na korištenje.
Ovdje je potrebno napomenuti da broj okvira koji se dodjeljuju procesu varira u
zavisnosti o stupnju višeprocesiranja.
Sledeće pitanje na koje je potrebno donijeti odgovor je da li zamenu izvoditi samo
unutar okvira dodijeljenih procesu (lokalna zamjena) ili dozvoliti da proces uzima okvire od
drugog procesa(globalna zamjena).
Lokalna zamjena podrazumijeva da se proces izvodi samo unutar dodijeljenog broja
okvira. U ovom slučaju broj okvira koji se dodjeljuje procesu određuje operativni sistem u
trenutku uzimanja procesa na obradu, a koji je usko vezan uz broj procesa koji se trenutno
Operativni sistemi: Upravljanje memorijom
66
obrađuju. Ukoliko se broj slobodnih okvira poveća, kao posljedica završetka nekog
procesa, proces i dalje nastavlja obradu s istim brojem stranica.
S druge strane globalna strategija zamene stranica dozvoljava da proces uzima
stranice od drugih procesa. U ovom slučaju neki procesi većeg prioriteta mogu uzeti
preveliki broj stranica drugih procesa te da njihovo normalno izvođenje dovede se u pitanje
(neprihvatljivo veliki broj promašaja). Ipak, globalna strategija zamene stranica vodi boljoj
iskoristivosti memorije kao i većoj propusnosti sistema. Zato se i ona obično primenjuje.
4.11 RASIPANJE (TRASHING)
Kako je već spomenuto, strategija globalne zamene stranica može dovesti do situacije
da pojedini procesi imaju na raspolaganju neprihvatljivo mali broj okvira što rezultira
učestalim promašajima, a time i smanjenim performansama sistema. Ovakva situacija u
kojoj veći broj procesa se dovede u situaciju da ima na raspolaganju mali broj okvira
naziva se rasipanje (trashing). Zbog učestalih promašaja sistem veliki dio vremena provodi
u izmjeni stranica, a manji je posvećen obradi. Slika 4.21 prikazuje zavisnost iskoristivosti
procesora o stupnju višeprocesiranja u sastavu koji koristi dodjelu stranica na zahtev.
stupanj višeprocesiranja
isko
ristiv
ost
proc
esor
a rasipanje
Slika 4.21. Zavisnost iskoristivosti procesora o stupnju višeprocesiranja.
Očito je da operativni sistem koji koristi straničenje na zahtev, te globalnu strategiju
zamene mora imati mehanizam detekcije rasipanja. Najjednostavnije je detektirati
povećanu frekvenciju promašaja, a problem otkloniti reduciranjem stupnja višeprocesiranja
izbacivanjem nekih procesa iz obrade, slika 4.22.
Operativni sistemi: Upravljanje memorijom
67
gornjagranica
donjagranica
smanjiti broj okvira
povećati broj okvira
frkv
enci
ja p
rom
ašaj
a
broj okvira
Slika 4.22. Zavisnost frekvencije promašaja o broju okvira.
4.12 DODATNA RAZMATRANJA
Odabir algoritma i strategije zamene stranica važna su pitanja koje je potrebno rešiti u
sistemima koji koriste straničenje na zahtev. Uz ova temeljna pitanja nameću se i dodatna
rješenja koja mogu poboljšati rad sistema.
4.12.1 PREDUNOS STRANICA U MEMORIJU (PREPAGING)
Kod startanja procesa, odnosno njegovog prvog unosa u memoriju prema dosadašnjim
strategijama broj promašaja je jako velik. Logično rešenje je prilikom prvog unosa procesa
u memoriju uneti veći broj stranica, a ne samo onu koju prvu proces zahteva.
Također, ukoliko je u nekom trenutku potrebno suspendirati proces iz radne memorije
(npr. zbog rasipanja) zgodno je da operativni sistem zapamti koje je stranice proces
koristio u trenutku gubljenja prava natjecanja za dodjelu procesora kako bi se u trenutku
kada se ponovo ostvare uslovi za nastavak njegovog izvođenja to izvođenje učinkovito
nastavilo. U trenutku ponovnog nastavka izvođenja unesu se sve stranice koje je proces
koristio pre nego je suspendiran kako bi se izbjeglo nepotrebno prekidanje zbog
promašaja.
Predunos ima prednost utoliko što u pojedinim fazama izvođenja procesa umanjuje
broj promašaja.
4.12.2 VELIČINA STRANICA
Veličina stranica ili okvira je veličina na koju projektanti operacijskog sistema rijetko
imaju uticaj. Na nju je moguće jedinu uticati za vreme projektiranja novih sistema. U tom
slučaju potrebno je analizirati uticaj veličine stranice na performanse sistema.
S gledišta tablice stranica bolja je veća veličina stranice jer je za isti proces potrebna
manja tablica stranica. S druge strane manja veličina stranice rezultira boljoj iskoristivosti
memorije. Naime, kako je već opisano kod sistema koji koriste dodjelu memorije po
stranicama postoji samo unutarnja segmentacija memorije koja se prosječno može
Operativni sistemi: Upravljanje memorijom
68
proceniti na polovicu veličine stranice. Tako je prosječno pola veličine stranice po procesu
neiskorištena memorija.
Sledeći čimbenik je brzina unosa stranice u radnu sa sekundarne memorije. Ovo
vreme sačinjava vreme postavljanja glave iznad traženog cilindra (seek time), vreme
pronalaženja sektora, odnosno zakreta diska (latency), te vreme prebacivanja podatka
(transfer time). Prva dva vremena neovisna su o veličini stranice i ovise samo o
mehaničkim svojstvima diska. Tako npr. vreme postavljanja iznosi oko 8 ms, a vreme
postavljanja oko 10ms. Vreme pre nosa ovisi o veličini stranice. Tako za brzinu pre nosa
od 2 Mokteta po sekundi je potrebno svega 0.5ms za pre nos stranice od 1024 okteta.
Tako je za veće stranice potrebno veće vreme pre nosa. Površno gledajući lako se zaključi
da je s aspekta brzine unosa stranice u memoriju povoljnije da je stranica manja. S druge
strane mora se uzeti i vreme unosa preostalim stranica. Tada značajan uticaj ima vreme
postavljanja i pristupa. S tog stajališta može se zaključiti da je bolje što su stranice veće jer
se u tom slučaju prenosi manji broj stranica. Tako npr. za unos 2k programa u memoriju
kad su stranice svega 512 okteta potrebno je: ms731)108(4T1 =++⋅= ,
dok za 2k stranice: ms191)108(1T2 =++⋅= .
S druge strane, ukoliko je veličina stranice manja, u memorijski prostor dodijeljen
programu moguće je upisati veći postotak programa koji se najviše koristi. Praktički, s
manjim stranicama postiže se veća rezolucija pri izboru dijelova programa koji se više
koriste.
Danas veličine stranica variraju između 512 okteta i 4kokteta. Tako npr. Intel 80386
ima veličinu stranice od 4kokteta, Motorola 68030 dozvoljava promjenjivu veličinu stranice
od 256 okteta do 32 kokteta. Povijesno, kako su se razvijali procesori te je memorija
postajala jeftinija, veće brzine i kapaciteta, uz činjenicu da se brzine pristupa disku ne
povećavaju proporcionalno njima, osjeća se trend prema većim stranicama.
4.12.3 STRUKTURA PROGRAMA
Straničenje na zahtev trebalo bi biti transparentno za korisnika. U većini slučajeva
korisniku je svejedno kako piše program i kako se program upisuje u memoriju. Ipak
postoje slučajevi u kojima poznavanje mehanizma straničenja na zahtev može pomoći u
pisanju programa koji će se brže izvoditi. Kao primjer može se navesti inicjalizacija
cjelobrojnog polja veličine 256 x 256. Svaki cjelobrojni broj prikazan je s četiri okteta.
Veličina stranice je 1koktet. Tipičan kod je:
long int A[0..255,0..255];
int i, j;
Operativni sistemi: Upravljanje memorijom
69
for (i=0; i<256; i++)
{ for (j=0; j<256; j++)
A[i,j] := 0;};
ili
for (j=0; j<256; j++)
{ for (i=0; i<256; i++)
A[i,j] := 0;};
Program prevodilac obično slaže polje po redcima tako da slijedom idu A[0,0], A[0,1],
..., A[0,255], A[1,0], ..., A[255,255]. Prema organizaciji stranica svaki redak stane u jednu
stranicu. Neka operativni sistem dodijeli procesu npr. 128 okvira. Tada prvi program ima
svega 256 promašaja, dok drugi 256 x 256 = 65536 promašaja što rezultira znatno dužim
izvođenjem. Razlog je opisan slikom 2.23.
A[0,0]A[0,1]A[0,2]
A[1,0]A[1,1]A[1,2]
A[1,255]
A[255,0]A[255,1]
A[255,255]
A[0,255]
stranicabroj
0
1
255
pristupbroj
1.257513
652812.258514
65282
256.512
65536
A[0,0]A[0,1]A[0,2]
A[1,0]A[1,1]A[1,2]
A[1,255]
A[255,0]A[255,1]
A[255,255]
A[0,255]
stranicabroj
0
1
255
pristupbroj
1.2.3.
256.257.258.259.
512.
6528165282
65536
Slika 2.23. Pristup stranicama dvodimenzionalnog polja.
Operativni sistemi: Upravljanje datotekama
49
5 UPRAVLJANJE DATOTEKAMA
Poseban deo, koji se može posmatrati u svakom a ne samo kompjuterskom sistemu, jeste rukovanje i upravljanje informacijskim celinama i delovima. U kompjuterskom sistemu to je posebno složeno jer se izvorne informacijske celine na različite načine transformišu, prenose, memorišu, rasčlanjuju, sastavljaju, analiziraju i koriste za generisanje novih informacija. Zbog toga možemo prema Madnicku i Donovanu (MADN 74) govoriti o upravljanju informacijskim celinama u kompjuterskom sistemu (Information Management). Ovo kompleksno područe možemo međutim posmatrati kao tri posebna sistema koji ne isključuju jedan drugoga, ali se razlikuju po svojoj softwarskoj realizaciji u kompjuterskom sistemu, po različitim načinima tretiranja informacijskih celina i po različitim informacijskim celinama kojima barataju. Ta tri sistema jesu:
� datotečni sistemi ili sistemi za upravljanje datotekama (File Systems, Filing Systems)
� sistemi za upravljanje podacima (Data Management Systems)
� sistemi za upravljanje bazama podataka (Data Base Management Systems)
Sistemi za upravljanje datotekama rade s nestrukturiranim i neinterpretiranim informacijskim celinama. Njihov je zadatak omogućiti efikasno baratanje informacijskim celinama i to uglavnom pri korišćenju eksternih memorija, ne ulazeći u unutrašnju strukturu tih informacijskih celina niti u njihovo značenje. Izraz »nestrukturirano« odnosi se dakle na unutrašnju strukturu informacijske celine kojom datotečni sistem barata, a ne na strukturu koju same te informacijske celine mogu činiti. Isto tako i atribut neinterpretiranosti ima značenje samo u odnosu na sadržaj informacijske celine. Te informacijske celine kojima datotečni sistem barata nazivamo blokovima.
Sistemi za upravljanje podacima rade sa strukturiranim informacijskim celinama koje čine slogovi i pojedinačni podaci unutar slogova ali ne ulaze u interpretaciju tih informacijskih celina.
Sistemi baza podataka rada i sa strukturiranim informacijskim celinama i s interpretiranim informacijskim celinama.
Ova podela, međutim, više je teoretska jer se u praksi ovi sistemi (osim sistema za upravljanje bazama podataka) međusobno ispripliću u svojim funkcijama i radu, nadopunjuju, pa čak kod mnogih realnih sistema i poistovećuju. Sistem za upravljanje datotekama i sistem za upravljanje podacima jesu delovi operativnog sistema, dok sistem za upravljanje bazorn podataka predstavlja samostojeći software.
U daljnjim razmatranjima biće govora uglavnom o sistemu za upravljanje datotekama. Taj sistem ima sledeće globalne funkcije u operativnom sistemu:
� vođenje evidencije o svim informacijskim celinama koje egzistiraju na eksternim memorijama,
� odlučivanje o tome gde treba informacijske celine memorisati,
� kako ih treba memorisati i ko (koji proces) može te celine koristiti i na koji način
� alociranje resursa (datoteka) i provođenje postupka vezanih uz korišćenje tih resursa,
� dealociranje resursa, odnosno brisanje datoteka.
Sve te globalne funkcije služe za upravljanje i kontrolu rada s datotekama i oslobađaju korisnika (programera) od složenih internih postupaka oko korišćenja datoteka za
Operativni sistemi: Upravljanje datotekama
50
permanentno ili privremeno čuvanje informacija. Datoteke, međutim, koristi i sam operativni sistem. Svi podaci i procedure nisu za korisnika transparentni, i ako bi bilo poželjno da jesu. Štaviše, idealni bi slučaj bio da je čitav sistem pravljanja datotekama i eksternim memorijama transparentan te da korisnik »vidi« memoriju samo u jednom nivou . Takvi sistemi međutim na današnjem nivou znanja nisu još u potpunosti ostvarljivi.
Današnji sistemi za upravljanje datotekama moraju uglavnom osigurati provođenje sledećih konkretnih postupaka:
- kreiranje novih i brisanje postojećih datoteka,
- pristup u datoteke i zaštitu datoteka,
- korišćenje datoteka (čitanje i upisivanje slogova),
- automatsko upravljanje slobodnim i zauzetim prostorom na eksternim memorijama,
- referenciranje datoteka simbolički imenima,
- integritet datoteka,
- deljenje korišćenja između više korisnika (Sharing),
- fleksibilne i raznolike organizacije datoteka,
- dinamičku alokaciju prostora eksterne memorije (poželjno ali ne i nužno).
Pritom imamo opet dva osnovna stanovišta posmatranja. Sa stanovišta korisnika datoteka organizovan je skup slogova podataka. Organizovani skup znači da su slogovi svrstani po određenom redosledu. Te slogove nazivamo logičkim slogovima. Nasuprot tome eksterna memorija podeljena je na blokove kao jedinice za memorisanje podataka. Te blokove često puta nazivamo fizičkim slogovima. Jedan od osnovnih zadataka sistema za upravljanje datotekama jeste da preslika naše logičke slogove u fizičke slogove ili jednostavno rečeno da smesti slogove podataka u blokove eksterne memorije. U literaturi se, međutim, često govori o logičkim i fizičkim slogovima i logičkoj i fizičkoj organizaciji datoteke. Budući da se radi ne samo o smeštaju nego i osiguravanju gore navedenih postupaka, može se reći da sistem za upavljanje datotekama povezuje (preslikava) logičku organizaciju datoteke s fizičkom organizacijom datoteke. Pritom je jedan od osnovnih problema, kao i kod centralne memorije, povezivanje (preslikavanje) simboličke adrese datoteke (imena daoteke) u stvarnu adresu. Međutim, ne samo početne adrese datoteke nego i svakog sloga posebno jer u problemskom programu baratamo slogovima kao jedinicama obrade. Zbog toga treba najpre videti kakva rešenja postoje za taj osnovni problem. I ovde će nam za rešenje problema poslužiti posebne tabele koje nazivamo direktorijumi datoteka (File Directory, File Dictionary, Volume Table of Contents (IBM), File Cataloque) ili imenici.
5.1 DIREKTORIJUM DATOTEKA
Direktorijum ili imenik datoteka jeste tabela koja primarno služi za preslikavanje simboličkog imena datoteke u fizičku adresu. Budući da na nekoj eksternoj memoriji (uzmimo na primer disk) postoji veći broj datoteka, sve će te datoteke biti preko direktorijuma povezane sa svojim simboličkim imenima koje korisnik upotrebljava i naziva jednostavno »ime datoteke«. Zbog toga što u sistemu postoji više diskova (to isto važi i za druge eksterne memorije) i svaki je disk zamenljiv, bilo bi nepraktično i neekonomično čuvati direktorijum za svaki disk u centralnoj memoriji.
Operativni sistemi: Upravljanje datotekama
51
Slika 5.1 - Šematski prikaz korišćenja direktorijuma
Zbog toga se direktorijum jednostavno smešta na početak onog diska kojem pripada. Tako, direktorijum postaje i sam datoteka. Na slici 5 prikazan je takav način povezivanja imena datoteke s njezinom lokacijom na eksternoj memoriji. No u direktorijumu se ne nalazi samo informacija o položaju datoteke na eksternoj memoriji (početna adresa) nego i niz drugih podataka koji služe sistemu za upravljanje datotekama. O tome će, uostalom, biti još govora. Ovaj nam prikaz na slici 5.1 pokazuje kako se, ako je zadato ime datoteke, može pronaći sama datoteka na eksternoj memoriji. Pretraživanjem direktorijuma sistem za upravljanje datotekama može dakle tačno locirali gde se datoteka nalazi i uzeti sve oslale potrebne podatke da može izvršiti operaciju koja je tražena u problemskom procesu. Ovakav sistem preslikavanja simboličkog imena datoteke u početnu adresu datoteke najjednostavniji je mogući način da dođemo do same datoteke, odnosno njezinih fizičkih i logičkih slogova. Ovakav jednostavni princip upotrebe direktorijuma danas se u praksi teško može održati. Naime, zbog velikog broja datoteka koje svaki korisnik na diskovima velikog kapaciteta može imati (stotinak i više) direktorijum bi trebalo vrlo dugo pretraživati dok bi se pronašao upis za traženu datoteku i čime bi znatno porastao interni rad u sistemu. Osim ovog glavnog razloga postoje i drugi kao što su: potreba raznih jednostavnih mera zaštite, deljenje datoteka između više korisnika koji mogu različitim imenima zvati jednu te istu fizičku datoteku, jednostavnija identifikacija i klasifikacija datoteka od strane samog korisnika i sistema, korišćenje složenih datoteka za potrebe samog si stema (smeštaj sistemskih programa i rutina) itd. Zbog (toga se u kompjterskim sistemima upotrebljavaju znatno složeniji mehanizmi. U osnovi oni su, međutim, proširenje ovog jednostavnog principa i to tako da se slažu složenije strukture direktorijuma koje
Simboli~ko ime tražene datoteke
Direktorijum
Datoteka
DAT
DAT
DAT ADR
Operativni sistemi: Upravljanje datotekama
52
mogu zadovoljiti spomenute zahteve uzevši u obzir tehničke mogućnosti samih eksternih memorija.
Najčešći slučaj jeste korišćenje direktorijuma u dva nivoa (two level directory structure), a to zapravo znači podelu podataka u direktorijumu u dva nivoa, pa dobijamo dva posebna direktorijuma, glavni (Master Directory, Master File Directory) i pomoćni (Subdirectory, User File Directory). Kao što je na slici 5.2 prikazano, glavni direktorijum jeste vrsta tabele s pokazivačima (početnim adresama) pomoćnih direktorijuma. U ovakvoj strukturi tek pomoćni direktorijumi imaju pokazivače samih datoteka. Samo simboličko ime datoteke sastoji se od dva dela koja se odvajaju nekim znakom za odvajanje (deilimiter) obično tačkom. Takav način imenovanja datoteka korisno služi i sistemu i korisniku. Sistem ga koristi tako da se prvi deo imena vodi u glavnom direktorijumu i tretira ga kao ime čitavog skupa datoteka (skupno ime) a drugi deo u pomoćnom direktorijumu i tretira ga kao pojedinačno ili individualno ime datoteka.
U glavnom direktorijumu pri korišćenju datoteke sistem za upravljanje datotekama traži samo ukupno ime a u pomoćnom direktorijumu traži pojedinačno ime. Korisnik ima opet mogućnost da klasificira svoje datoteke u skupine (na primer, prema vrsti aplikacije) te čitavoj skupini datoteka daje isto skupno ime a različito pojedinačno ime svakoj datoteci unutar te skupine. Datoteka se može klasificirati proizvoljno a najčešće se to radi na temelju njezine pripadnosti aplikaciji, projektu, programeru ili samom korisniku (simboličko ime korisnika uzima se kao skupno ime datoteke). To je posebno pogodno za datoteke koje koristi sam operativni sistem. Naime, ovakvim načinom rada s datotekama smanjuje se znatno vreme pretraživanja jer u glavnom direktorijumu ima mnogo manje upisa. Nadalje, budući da se glavni direktorijum smanjuje i po opsegu, može ga pri korišćenju neke eksterne memorije privremeno smestiti u centralnu memoriju te je time pronalaženje datoteke još brže. Mogućnosti za izvođenje efikasnije i fleksibilnije zaštite takođe su bolje. Zaštitu je moguće provesti na nivou glavnog direktorijuma ali i na nivou pomoćnog. Svaki korisnik može koristiti ista individualna imena datoteka.
Operativni sistemi: Upravljanje datotekama
53
Slika 5.2 - Šematski prikaz direktorijuma u dva nivoa
U primeru na slici 5.2, u glavnom je direktorijumu upisano niz datoteka sa svojim imenima (A, B,... X). Ta imena možemo nazvati i prezimenima datoteke ili porodičnim imenima jer se često govori i o porodici datoteka. U pomoćnom direktorijumu upisana su individualna imena datoteka (AA, BB,... XX). Označena su sa dva slova radi oznake nivoa. Iz pomoćnih direktorijuma dolazi se u samu datoteku. U našem primeru to su datoteke s imenima A.AA, A.BB, ... A.XX koje pripadaju korisniku A (Ime je korisnika dakle u ovom primeru identično skupnom imenu datoteke), datoteke B.AA, B.BB, ... B.XX koje pripadaju korisniku B itd. Korisnik A i korisnik B mogu dakle svoje datoteke nazivati istim individualnim imenima a da to ne smeta sistemu za upravljanje datotekama.
U direktorijumima se, međutim, ne nalaze samo adresne informacije nego i niz drugih informacija. Tako se u glavnom direktorijumu mogu locirati informacije o dozvoli pristupa drugim korisnicima, dakle informacije koje služe za zaštitu (serijski broj volumena, ime volumena, informacije o pogrešnim stazama itd.). Ostale informacije svrsishodnije je smestiti u pomoćne direktorijume. Te informacije uglavnom su sledeće:
- informacije za identifikaciju (ime datoteke, lozinke itd.)
- informacije o fizičkim karakteristikama (broj dodeljenih blokova, početna adresa, način povezivanja blokova itd.)
- informacije o logičkim karakteristikarna datoteke (vrsta slogova, dužina sloga, format sloga, broj sloga, faktor blokiranja, organizacija datoteke, broj ključeva, pozicije ključeva itd.)
- informacije o pristupu i zaštiti datoteke (dopušteni pristupi, dopušteno deljenje, korisnici itd.)
GLAVNI DIREKTORIJUM
POMO]NI DIREKTORIJUMI
DATOTEKE
Dat
A.BB
Dat
A.AA
Dat
A.XX
Dat
B.AA
Dat
B.XX
Dat
X.AA
Dat
X.XX
A B
adr adr
X
adr
AA BB
adr adr
XX
adr
AA
adr
XX
adr
XX
adr
AA
adr
Operativni sistemi: Upravljanje datotekama
54
- informacije administrativnog tipa (datum kreiranja, vreme čuvanja, datum i korisnik poslednjeg pristupa, datum poslednjeg ažuriranja, podaci o greškama itd.)
Ovi podaci variraju s obzirom na razne vrste sistema u hardwarskom i softwarskom smislu, proizvođače, korisnike i filozofije izgradnje čitavog kompjuterskog sistema.
Čitava struktura koju čine direktorijumi u dva nivoa odgovara strukturi stabla (drva) kao što se može videti na slici 5.3, koja predstavlja istu strukturu direktorijuma koja je prikazana na slici 5.2. Ovde su čvorovima prikazane datoteke direktorijuma, jer i sami direktorijumi nisu ništa drugo nego datoteke posebne vrste. Kvadratima su prikazane datoteke odnosno listovi stabla dok grane stabla označavaju puteve kojima se do pojedine datoteke dolazi, odnosno pokazivače u direktorijumima. Takav način prikazivanja ima za posledicu da pravila koja vrede za takve strukture možemo koristiti u upravljanju datotekama. Nadalje, zaključuje se da na taj način možemo uspostaviti i višeslojne direktorijumske strukture (mutlilevel directory structure). Takve su strukture u nekirn sistemima već i realizovane (MULTICS, ATLAS, IBM OS/360).
Slika 5.3 - Struktura direktorijuma u obliku stabla
Na slici 5.4 prikazan je jedan takav primer. U tom primeru uvedena je još jedna veza (link) koja omogućuje da različitim putem dođemo do iste datoteke. Veza je grana koja ne pokazuje sledeću datoteku (direktorijumsku ili korisničku) nego povezuje upis u jednom direktorijumu s upisom u drugi direktorijum. Takva veza prikazana je na slici 5.4 crtanom strelicom koja se spaja u sredinu grane. Takvim povezivanjem moguće je jednu datoteku nazivati raznim imenima. Takve se složene strukture ređe koriste, jer su i sistemi za upravljanje pomoću njih složeniji. Ako, na primer, brišemo neku datoteku do koje se može doći preko više različitih puteva, treba naravno i te sve puteve brisati jer u protivnom može doći do grešaka. U složenoj strukturi to traži znatna pretraživanja što opet generiše dodatni interni rad. Ako, na primer, želimo da obrišemo datoteku B1.C2.D3, na slici 5.4, morali bismo da izbrišemo i vezu C1.L, jer bi u protivnom pokazivač u direktorijumu PD-C1. pokazivao na nepostojeći upis u direktorijum P.D-C2. Na slici 5.4, nadalje, grana je C2 nepotrebna, jer bi i bez nje put prema datotekama B1.C2.C3 i B1.C2.D3 bio jednoznačno određen. Ona može, međutim, imati značenje ako se u budućnosti želi u tom čvoru priključiti nova datoteka ili grana. Takve grane mogu u složenoj strukturi ostati nakon brisanja nekih datoteka. Treba imati na umu da to znači još jedan dodatni pristup na disk i čitanje direktorijuma prilikom svakog korišćenja tih dveju datoteka. To traži ažuriranje same strukture direktorijuma i optimiranje strukture. Višeslojna struktura direktorijuma
A B X
AA
BB XX AA XX AA XX
GD
PD-B PD-A
PD-X
Dat
A.AA
Dat
A.BB
Dat
A.XX
Dat
B.AA
Dat
B.XX
Dat
X.AA
Dat
X.XX
Operativni sistemi: Upravljanje datotekama
55
zbog toga je prilično složena i najčešće se koristi jednostavna dvoslojna struktura direktorijuma. Ako je potrebna složena višeslojna struktura za korisnika će svakako jednostavnije i efikasnije služiti se sistemom baze podataka.
Slika 5.4 - Primer višeslojne strukture direktorijuma prikazanog u obliku stabla
5.2 BLOKOVI DATOTEKA
Direktorijum primarno služi za pronalaženje datoteke na eksternoj memoriji ali sadrži i niz podataka o fizičkoj organizaciji memorisane datoteke. Datoteka je, naime, podeljena na blokove fiksne duižine. Dužina bloka kreće se od 128 do 512 reči. Svakoj datoteci dodeljuje se određeni broj blokova i u njih se smeštaju logički slogovi. Blokovi, međutim, ne moraju biti kontinuirano smešteni na mediju nego se mogu nalaziti na različitim adresama na samom mediju pa je zbog toga potrebno pronaći način kako da se pronađe svaki pojedini blok datoteke. Taj način pronalaženja blokova koji pripadaju datoteci, odnosno početnih adresa tlh blokova takođe je važan element datotečnog sistema. Prikazaćemo tri načina koji omogućavaju pronalaženje blokova datoteke.
5.2.1 POVEZIVANJE BLOKOVA POMOĆU POKAZIVAČA
(LANČANJE BLOKOVA)
Ovaj se način sastoji u povezivanju (lančanju) blokova u linearnu listu. Svaki pojedini blok mora sadržati pokazivač sledećeg bloka u datoteci. Prvi blok datoteka pokazuje upis
A1 B1 C1
D2
A2 B2 C2 L
A3 B3 C3 D3 E3 F3
G4 H4
GD
PD-B1 PD-A1 PD-C1
PD-C2 PD-A2
PD-D2
SD-B3
A1.B2
A1.A2.A3
A1.A2.B3
C1.D2.E3.G4
C1.D2.E3.H4
B1.C2.C3
B1.C2.D3
C1.L
C1.D2.F3
Operativni sistemi: Upravljanje datotekama
56
(pokazivač) u pomoćnom direktorijumu. Svaki blok sadrži na kraju pokazivač sledećeg bloka u datoteci te je tako moguće doći posredno do svakog pojedinog bloka datoteke. Takav način pronalaženja blokova shematski je prikazan na slici 5.5. Pokazivač (pointer) sadrži dakle fizičku adresu sledećeg bloka na mediju. Samo poslednji pokazivač sadrži upis koji označava zadnji blok datoteke. To može biti nula ili neki drugi znak koji označava kraj datoteke, odnosno poslednji blok.
Takav način povezivanja blokova zahteva sekvencijalno traženje, odnosno korišćenje sekvencijalnih pristupnih metoda, pa je takvo povezivanje blokova pogodno za sekvencijalne datoteke.
Slika 5.5 - Šematski prkaz povezivanja blokova datoteke
5.2.2 POVEZIVANJE BLOKOVA POMOĆU TABELE
Ovakav način identifikiovanja blokova datoteke sličan je prethodnom. I ovde se radi o povezivanju blokova, samo što je povezivanje provedeno upotrebom tabele a ne direktno u samim blokovima. Kao što se može primetiti na slici 5.6, pokazivač početne adrese datoteke iz pomoćnog direktorijuma neće pokazivati više stvarnu početnu adresu nego će pokazivati gde je u tabeli blokova upisan prvi blok koji pripada datoteci. U tabeli blokova, naime, popisani su svi blokovi memorije sukcesivno prema svojim početnim adresama, dakle od nultog do poslednjeg bloka koji je na mediju sadržan. Pritom prvi upis odgovara nultom bloku, drugi upis prvom bloku, odnosno n-ti upis odgovara n-1 bloku na toj eksternoj memoriji (mediju). Sam upis nije ništa drugo nego pokazivač sledećeg bloka koji pripada datoteci. Tako će, na primer, na slici 5.5 prvi blok datoteke biti drugi blok na mediju (treći upis), a poslednji blok koji pripada datoteci biće 14-i blok. Datoteci će pripadati dakle blokovi na mediju u ovom redosledu 2,8,13,10,5,14.
Kao i prethodni, i ovaj je način pogodan za sekvencijalno referenciranje blokova i uslovljava sekvencijalne metode pristupa, jer se do nekog bloka, a to znači i sloga u datoteci, može doći samo posredno preko svih prethodnih blokova. Ponekad se iz pomoćnog direktorijuma povezuje na samo početak datoteke nego i kraj datoteke.
Pomoćni
direktorijum
Blokovi datoteke
0
Tabele povezivanja blokova
0
Pomoćni direktorijum 1
2
8
Operativni sistemi: Upravljanje datotekama
57
Slika 5.5 - Šematski prikaz povezivanja blokova datoteke pomoću tabele blokova
Time se omogućuje lakše i brže proširivanje datoteke (dodavanje novih blokova na kraju datoteke). Povezivanje s krajem datoteke moguće je i u prošlom načinu lančanja blokova.
U odnosu na prošli način povezivanja blokova, ovaj može imati nekih prednosti. Naime, u lančanju blokova, ako treba doći do nekog bloka, potrebno je izvršiti toliko pristupa na dotičnu eksternu memoriju (medij), koliko blokova ima pre traženog bloka. U povezivanju blokova pomoću tabele to nije potrebno. Ako se čitava tabela može smestiti u jedan blok i taj se blok jednim pristupom unese u centralnu memoriju, to u znatnoj meri može smanjiti interno generisani rad, odnosno ubrzati pretraživanje datoteke. Ako to nije moguće, zbog veličine tabele, jer je tabela smeštena u više blokova, što je najčešći slučaj, onda je sigurno povoljnije ako je datoteka smeštena u blokove koji nisu jako razmaknuti, jer tada ni upisi u tabeli neće biti jako razmaknuti, što znači da će biti smešteni u manji broj blokova, a to dalje znači da će se do blokova koji su na kraju datoteke dolaziti i manjim brojem pristupa na eksternu memoriju. Najpovoljniji je slučaj kada je datoteka smeštena u kontinuirani niz blokova. Kod prošlog načina povezivanja slogova nije bilo važno kako su raspoređeni blokovi datoteke na eksternoj memoriji, nego koliko takvih blokova ima u datoteci.
5.2.3 POVEZIVANJE BLOKOVA POMOĆU INDEKSNOG BLOKA
Za povezivanje, blokova koji čine jednu datoteku koristi se poseban blok koji nazivamo indeksni blok. Taj blok sadrži, kao što je to prikazano na slici 5.7, jedan upis za svaki pojedini blok koji pripada datoteci. U tom se upisu nalazi adresa pripadajućeg bloka. Prema tome, u prvom će se upisu nalaziti adresa prvog bloka koji pripada datoteci, u drugom adresa drugog bloka datoteke itd. sve do poslednjeg bloka. Pokazivač u pomoćnom direktorijumu pokazivaće početnu adresu indeksnog bloka.
Ovakvim povezivanjem blokova datoteke dobija se mogućnost pristupa u bilo koji blok datoteke nezavisno od drugih blokova, dakle direktno. Sada ne treba tražiti adresu
Operativni sistemi: Upravljanje datotekama
58
traženog bloka nikakvim posrednim putem nego se ona direktno pronalazi u indeksnom bloku. Ako korisnik specificira ime datoteke i logičku adresu sloga (što znači redni broj sloga u datoteci) ili ključ na temelju kojeg se logička adresa sloga može izračunati, sistem će moći direktno pronaći blok u kojem je smešten taj traženi slog. Naime u glavnom direktorijumu pronalazi se adresa pomoćnog direktorijuma, a u njemu adresa indeksnog bloka, a u indeksnom bloku pronalazi se adresa fizičkog bloka. Pre toga jednostavnim računom treba izračunati u kojem se fizičkom bloku datoteke nalazi traženi slog. Treba zatim poznavati faktor blokiranja slogova. Podelimo li redni broj sloga u datoteci s faktorom blokiranja dobićemo redni broj bloka u kojem je slog smešten. U indeksnom bloku potraži se upis pod tim brojem i u njemu se pronalazi (fizička) adresa bloka.
Slika 5.7-Povezivanje slogova datoteke pomoću indeksnog bloka
Takvo povezivanje blokova omogućuje pristup u blokove (slogove) uz minimalni interno generisani rad. Ako dolazi do brisanja ili dodavanja novih blokova, potrebno je ažurirati indeksni blok. Ako su te promene u sredini ili pri kraju i ako su vrlo česte, to može generisati znatan interno generisani rad.
Indeksiranje teoretski dopušta i složene strukture jer se indeksni blok može rastaviti u više nivoa. Ako jedan indeksni blok nije dovoljan za smeštaj svih potrebnih upisa, on se može protegnuti na neki drugi blok. U tom se slučaju na kraju prvog indeksnog bloka nalazi pokazivač (adresa) drugog indeksnog bloka.
5.2.4 SLOBODNI BLOKOVI
Za potrebe alokacije novih datoteka ili za proširenje starih te oslobađanje blokova prilikom brisanja ili ažuriranja datoteke potrebno je voditi računa o slobodnim blokovima na eksternoj memoriji, odnosno mediju. To znači da i za slobodne blokove (ne zauzete) treba poznati početne adrese. To se provodi na sličan ili isti način kao i kod blokova koji su zauzeti, odnosno pripadaju nekoj datoteci.
Stariji sistemi tretirali su slobodni prostor tako da se svaki kontinuirano smešteni skup slobodnih blokova vodio u direktorijumu kao datoteka ali s oznakom da je taj prostor ne
Pomoni direktorijum Indeksni blok Blokovi datoteke
5.1
Operativni sistemi: Upravljanje datotekama
59
zauzet (free file, dummy file). Takav način vođenja evidencije o slobodnom prostoru ne eksternoj memoriji naziva se automatskim, jer se pomoću njega moglo provoditi alokaciju slobodnog prostora koje se naziva automatskom alokacijom. Automatska alokacija provodi se vrlo slično kao i ona centralne memorije u particijama (dinamičkog tipa) sa gotovo istim problemima (fragmentacija, relokacija i kompakcija), te problemima pri brisanju nekih delova datoteke ili pri proširivanju za vreme korišćenja.
U dinamičkoj alokaciji prostora na eksternoj memoriji svi navedeni problemi otpadaju jer se o svakom slobodnom bloku na eksternoj memoriji posebno vodi računa. To možemo uporediti sa straničenjem kod centralne memorije. Svaki pojedini blok uzima se dakle kao posebna celima. Svi se ti slobodni blokovi mogu, u cilju efikasnog rada, povezati na opisana tri načina i tako se može sa slobodnim prostorom na eksternoj memoriji upravljati.
Pri povezivanju slobodnih blokova u lanac, dodavanje novih slobodnih blokova može se provesti na početku ili na kraju lanca. Isto vredi i za alociranje slobodnih blokova nekoj datoteci. Ako se upotrebljava tabela za povezivanje svih slobodnih blokova to je takođe provedivo. Upotreba indeksnog bloka za povezivanje slobodnih blokova eksterne memorije nije efikasna jer pri dodavanju ili uzimanju više blokova treba menjati pokazivače za svaki pojedini blok dok pri lančanju ili tabeli treba za bilo koji broj blokova, koji se jednoj datoteci alociraju ili se zbog brisanja jedne datoteke povezuju u strukturu slobodnih blokova menjati samo dva pokazivača.
Postoji i poseban način za vođenje samo slobodnih blokova. To je evidencija o slobodnim blokovima pomoću bit-tabele (bit-map). Sastoji se u tome da se svakom bloku pridruži jedan bit iz bit-niza. Niz mora imati onoliko bitova koliko ima ukupno blokova na eksternoj memoriji. Nulti bit iz niza odgovaraće nultom bloku eksterne memorije, prvi bit niza prvom bloku itd. sve do poslednjeg bloka, odnosno bita u nizu. Ako je neki bit postavljen na vrednost 1, onda to znači da je blok zauzet, a ako je bit postavljen na vrednost 0, onda to znači da je odgovarajući blok slobodan. Budući da je veličina bloka fiksna, a redni broj bita u nizu moguće je lako ustanoviti, može se jednostavnim računom pronaći adresa svakog slobodnog bloka. Zbog toga je alociranje slobodnih blokova nekoj datoteci, odnosno dealociranje blokova i povezivanje u niz vrlo jednostavno. Nadalje bit-niz može se smestiti u centralnu memoriju prilikom pretraživanja, odnosno alociranja i dealociranja blokova, što znatno ubrzava upravljanje slobodnim blokovima. Ako je bit-niz predugačak može se raditi i sa delovima takva niza.
U alokaciji slobodnih blokova mogu se takođe primeniti određene strategije. Pokazuje se, naime da nije svejedno koji se blok, odnosno blokovi uzimaju iz strukture slobodnih blokova i dodjeljuju datoteci. Dosad smo spominjali najjednostavniji pristup, a to je uzimanje blokova sa početka ili s kraja lanca (ako se radi s lančanom strukturom). To je smanjivalo interno generisan rad zbog ažuriranja veze u strukturi slobodnih blokova, ali se nije vodilo računa o tome da takvom strategijom mogu biti dodeljeni blokovi koji će zbog svoje fizičke raspodele na mediju prouzrokovati interni rad prilikom korišćenja (jer će se, na primer, kod diskova glave mnogo puta morati pokretati). Moguće je zbog toga postaviti takvu strategiju izbora blokova koji se dodeljuju nekoj datoteci, koja će minimalizirati pokretanja glave pri čitanju blokova datoteke, pa i druge različite strategije.
Stanovitu ulogu ima takođe i veličina blokova, slično kao kod centralne memorije veličina stranica. Pri projektovanju sistema (hardwarea) vodi se o tome računa uzimajući u obzir i neke poznate kriterijume i uticaje, kao što su na primer ovi:
Kod prevelikih blokova dolazi do gubitka prostora jer zadnji blok datoteke u proseku nije nikada popunjen (interna fragmentacija).
Kod premalih blokova i lančanog povezivanja dolazi do gubitaka zbog pokazivača u bloku kojih ima više nego kod velikih blokova. Takođe se može javiti interni rad zbog
Operativni sistemi: Upravljanje datotekama
60
ćešćeg pristupanja na eksternu memoriju.
Veličina bloka mora biti višekratnik jedinice prenosa koju koriste hardwarski delovi pri prenosu podataka u centralnu memoriju.
Pojedini proizvođači imaju i druga rešenja koja ovde nisu pomenuta ili pak modifikacije nekog od pomenutih rešenja.
5.3 ZAŠTITA I ZAJEDNIČKO KORŠĆENJE DATOTEKA
Kod svake datoteke potrebno je osigurati i mere zaštite datoteke.
Zaštita datoteka preduzima se iz više razloga od kojih su najvažniji sledeći:
- onemogućiti neovlašćen pristup, korišćenje ili brisanje podataka, slogova ili čitave datoteke,
- onemogućiti slučajno ili ne namerno brisanje ili promenu ili povredu druge vrste,
- omogućiti korišćenje datoteke različitim korisnicima od kojih svaki na drugi način koristi datoteku a da pritom ne dođe do povrede ili uništenja ili neovlašćenog načina korišćenja,
- osigurati sadržaj datoteke prilikom kvarova i ispada sistema (ovo se često naziva integritetom datoteke).
Prvi i osnovni oblik zaštite jeste ograničeni pristup datoteci. Korišćenjem direktorijuma u dva nivoa (glavni i pomoćni) automatski se dobija jedan od zaštnih mehanizama pristupa u datoteku. Kod sistema u kojima nema zajedničkog korišćenja datoteka to se postiže proveravanjem imena koje korisnik specificira. Ako je to specificirano ime jednako imenu u direktorijumu pristup se dopušta odnosno ako nije identično, zabranjuje. Naravno, ako je direktorijum organizovan u dva nivoa (glavni i pomoćni) pa se ime datoteke sastoji od dva parametra, oba specificirana parametra moraju biti identična s odgovarajućim delovima imena datoteke. To se vidi sasvim jasno na shematskom prikazu strukture direktorijuma na slici 5.3. Mnogi sistemi osim ove jednostavne i implicirane zaštite pružaju mogućnost dodatne zaitite pomoću lozinke.
Lozinka se nalazi upisana u direktorijumu i dok se ne specificira ispravna lozinka ne može se datoteka koristiti bez obzira na to što se zna njezino puno ime.
Zaštita datoteka postaje složenija ako se radi o sistemu u kojem je potrebno provesti zajedničko korišćenje datoteka više korisnika. Takav je uslov sasvim normalan u današnjim sistemima, pa nastaje potreba za profinjenijim sistemom zaštite.
Uobičajena je zaštita u dva vida ili nivoa i to:
� određivanjem klase korisnika,
� određivanjem pristupnih privilegija za pojedinu klasu korisnika.
Pod klasom korisnika obično se podrazumeva podela svih korisnika u tri grupe i to: vlasnik (ili vlasnici) datoteke, sukorisnici datoteke (partneri), svi ostali korisnici. Svakoj od tih klasa obično se želi dodeliti datoteka na korišćenje, ali je to korišćenje za svaku klasu različito. Dok, na primer, vlasnik može izvoditi sve operacije i postupke s datotekom, dotle sukorisnik sme samo čitati i dodavati nove slogove ali ne i brisati slogove, menjati ih ili čak brisati datoteku u celosti. Ostali korisnici pak smeju, na primer samo čitati datoteku. Način na koji sme pojedini korisnik koristiti datoteku nazivamo pristupna privilegija (access privilege). Kao što se može zaključiti, postoje različite pristupne privilegije koje se u sistemu mogu specificirati ovako:
� dopušteno samo čitanje (Read only), oznaka R,
Operativni sistemi: Upravljanje datotekama
61
� zabrana pristupa (No access) koju obično označavamo sa N,
� dopušteno samo izvođenje (Execute only), oznaka E,
� dopušteno samo dodavanje slogova (Append only), oznaka A,
� dopušteno samo ažuriranje (Update only), oznaka U,
� dozvoljeno sve osim promene sadržaja, odnosno zabrana izmene sadržaja (Change protection), oznaka P,
� dopušteno brisanje (Delete), oznaka D
Ove se pristupne privilegije mogu na razne načine kombinovati u zaštitne ključeve. Tako bi, na primer ključ (šifra) DE označavao da korisnik kome je dodeljena takva pristupna privilegija može samo izvoditi sadržaj datoteke (pretpostavlja se da je on takav da je izvođenje moguće, tj. da se radi o programskoj datoteci) i brisati datoteku.
Takve zaštite moguće je i na razne načine ugraditi u sistem za upravljanje datotekama. Spomenućemo samo neke od njih. Opšti je pristup, upotrebom pristupne matrice.
Pristupna matrica je tabela u kojoj se za svaku datoteku može pronaći sve korisnike i videti kakve vrste pristupa pojedini korisnik može koristiti. Tabela je šematski prikazana na slici 5.8.
Slika 5.8 - Šematski prikaz pristupne matrice
Svaki korisnik identificira se prema svojem korisničkom broju ili nazivu a datoteka prema svojem imenu. Traži li se, na primer, čitanje slogova datoteke, u matrici se pronalazi red koji odgovara datoteci i pronalazi kolonu koja odgovara korisniku, a upis koji se nalazi u tom redu i toj koloni označava pristup koji je dopušten za dotičnog korisnika kad koristi dotičnu datoteku. Tako će, na primer, korisnik X moći samo čitati datoteku A.C, kao što se to može na slici 5.8 videti.
Pristupna matrica nije najpogodnije rešenje jer vrlo brzo poraste velika, te zauzima znatan prostor i njezino pretraživanje suviše dugo traje. Drukčije je rešenje moguće provesti tako da se pojedinoj datoteci pridruži (upotrebom pokazivača u glavnom
Sukorisnici
A B ………… X ………..
A.A N RA
A.B
Datoteke
Pristupna
A.C. N A R privilegija
za korisnika X
u datoteku A.C
.
.
.
X.X E E E
Operativni sistemi: Upravljanje datotekama
62
direktorijumu) lista ovlašćenih korisnika s oznakom dopuštenih pristupa.
Takvu listu možemo nazvati pristupnom matricom datoteke (access control list), jer svaka pojedina datoteka ima takvu pridruženu matricu. U ovom je slučaju generisani interni rad manji. Umesto pristupne matrice ovakvog tipa može poslužiti i lozinka. U sistemima gde je, međutim, potrebno održati tajnost podataka u svakom slučaju, koristi se kodiranje upisanih podataka. To znači da su originalni podaci prilikom upisivanja pomoću posebnih, samo korisniku, poznatih transformacija promene i tako upisuju. Samo obrnutim transformacijama moguće je podatke dešifrovati. Pritom je važno da se program za šifriranje/dešifriranje takođe zaštiti jer on sada predstavlja ključ za pristup i korišćenje podataka. Obično se on ne drži permanentno u sistemu nego se unosi samo prilikom korišćenja. Naime osnovni nedostatak i pristupne matrice i lozinke jeste u tome što su permanentno zapisane u sistemu i vešti sistemski programer može do njih dopreti.
Drugi važan aspekt zaštite datoteka jeste integritet datoteka.
Pod integritetom datoteke podrazumevamo očuvanje celokupne datoteke (sadržaja) u
slučaju kvara odnosno hardwarskog ili softwarskog ispada. Integritet datoteka postiže se adekvatnim postupcima koje je moguće provesti ako se čuvaju kopije postojećih datoteka (dump). U principu postoje dva način uzimanja kopija (dumpa) datoteka. Prvi je način kopiranje datoteke i naziva se periodično kopiranje (periodični dump), a drugi je način inkrementalno kopiranje (incremental dump). U periodičnom kopiranju u fiksnim vremenskim razmacima sve se datoteke prepisuju na neki magnetni medij, obično magnetnu traku. Ako tokom daljnjeg rada sistema dođe do uništenja pojedine datoteke ili svih datoteka, može se prethodno stanje rekonstruisati.
Nedostaci periodičnog kopiranja jesu sledeći:
� za vreme uzimanja kopije sistem ne sme koristiti datoteke,
� kopiranje datoteka traje neko vreme, zavisno od datoteka i brzini magnetne trake,
� zbog navedenih razloga ne mogu se uzimati kratki razmaci vremena za uzimanje kopija,
� rekonstruisanje stanja svih datoteka takođe uzima dosta vremena, a u slučaju da su promene datoteka česte, treba i dosta vremena da se dođe do zadnjeg stanja koje je moguće rekonstruisati.
Kod inkrementalnog kopiranja datoteka uzima se periodični sadržaj samo onih datoteka koje su pretrpele neke promene u odnosu na stanje koje je postojalo prilikom uzimanja prethodne kopije. Zbog toga je količina podataka uzetih prilikom svakog inkrementalnog kopiranja mala i kopija se može uzimati češće. Sve se kopije moraju čuvati jer su potrebne za rekonstrukciju. Rekonstrukcija se provodi tako da se uzimaju datoteke inverznim hronološkim redosledom, što znači da se najpre uzima poslednja (najnovija) kopija, zatim sledeća starija itd. Tim se načinom može uštedeti dosta vremena, jer se datoteka uzima sa samo najnovije kopije (kad je bila promenjena) dok se kod starijih kopija one datoteke koje su već jednom rekonstruisane jednostavno ne uzimaju u obzir. Ipak se rekonstrukcija mora provoditi do najstarijeg uzetog stanja, jer uvijek postoji mogućnost da neke datoteke uopšte nisu menjane. Takva rekonstrukcija nije jednostavna i takođe može uzeti dosta vremena sistemu, međutim, rekonstrukcija je bolja nego u periodičnom kopiranju.
Treba napomenuti da se prilikom rekonstrukcije kod dobro izvedenih sistema ujedno provodi i kompakcija datoteka u kontinuirane blokove. Time se znatno smanjuje interni rad u daljnjem korišćenju svake pojedine datoteke koja je pre toga bila raspodeljena po blokovima nekontinuirano razasutim po mediju.
Operativni sistemi: Upravljanje datotekama
63
5.4 OPŠTI MODEL DATOTEČNOG STSTEMA
U posmatranju funkcionisanja datotečnog sistema kao i prilikom konstrukcije datotečnog sistema moguće je postaviti opšti model takva sistema. Takođe kod svakog postojećeg sistema mogu se razabrati komponente sistema koje odgovaraju delovima (modulima) ovog opšteg datotečnog sistema. Pri implementiranju moguće je neke od tih teoretski postavljenih modula sastaviti zajedno ili uklopiti u neke druge delove operativnog sistema. Pre nego se posmatra opšti model datotečnog sistema (sistema upravljanja datotekama) potrebno je posebno istaći dve posebne funkcije koje nalazimo kod svakog sistema za upravljanje datotekama. To je otvaranje (OPEN) i zatvaranje (CLOSE) datoteka.
5.4.1 OTVARANJE (OPEN) I ZATVARANJE (CLOSE) DATOTEKA
Otvaranje datoteke (OPEN) jeste postupak koji otvara »put ka samoj datoteci«. Taj postupak povezuje samu jedinicu i ulazno izlaznu proceduru. Povezivanje se sastoji u tome da se tokom izvođenja OPEN postupka generiše kontrolni blok datoteke (KBD) koji povezuje ulazno/izlazni lanac sa samom jedinicom, odnosno sa KBJ blokom i pokazuje početnu adresu datoteke. Tako se svaki sledeći pristup u datoteku provodi upotrebom ovog KBD bloka, što znači da se ne mora uvek ponovo pretraživati glavni i pomoćni direktorijum. Čitav taj »put« shematski je prikazan na slici 6.1 i 6.2. Inverzna procedura koja se naziva CLOSE ili zatvaranje datoteke briše ovaj »put« kada korišćenje datoteke više nije potrebno. Postupak otvaranja datoteke primenjuje se i prilikom generisanja same datoteke.
Procedura otvaranja datoteke implementira se u opštem slučaju tako da se poziva specificiranjem dva osnovna parametra a to su ime datoteke i vrsta pristupa u datoteku:
OPEN (ime datoteke, vrsta pristupa)
Pod vrstom pristupa podrazumeva se: čitanje (read), upisivanje (write) ili kreiranje
(create).
OPEN procedura izvešće sledeće operacije:
- pretražiti i pronaći u direktorijumu upise za dotičnu datoteku,
- proveriti je li pristup koji se traži dopušten,
- proveriti je li datoteku već otvorio neki drugi proces pa ako je otvorena, proveriti slažu li se vrste pristupa. Ako je otvorena za upisivanje ne može biti otvorena i za čitanje i obratno,
- kreirati kontrolni blok datoteke i upisati potrebne podatke, tj. povezivati U/I lanac sa jedinicom na kojoj je datoteka i sa samom datotekom.
Osnovni podaci koji se nalaze u kontrolnom bloku datoteke jesu sledeći:
- ime datoteke,
- adresa kontrolnog bloka jedinice na kojoj je datoteka,
- adresa prvog bloka datoteke,
- adresa sledećeg bloka,
- vrsta pristupa u datoteku.
U detaljnom izvođenju i prikazu procedura može se nešto razlikovati od ovoga što smo nabrojili. Ovde nismo pomenuli ni na koji se način kreira nova datoteka, odnosno briše