90
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.

Introduction to Operating Systems - Uvod u operativne sisteme, skripta - srpski

  • 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.

Sadržaj

I

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

Operativni sistemi: Upravljanje datotekama

64

neka postojeća .

CLOSE procedura jeste inverzna procedura ovoj proceduri za otvaranje datoteke. Jedini parametar koji je potreban jeste ime datoteke. CLOSE procedura raskinuće vezu U/I lanca sa KBJ blokom i izbrisati KBD blok.