You are on page 1of 79

1.

Uvod u operativne sisteme


Svaki računarski sistem sastoji se od skupa tehničkih komponenti – hardvera, programskog koda –
softvera i podataka koji se obrađuju. Kao što je poznato, hardver predstavlja samu mašinu, dok
softver predstavlja programe. Predmet našeg izučavanja biće operativni sistemi, posebna vrsta
softvera bez koje upotreba same mašine praktično ne bi bila moguća.
Operativni sistem je program koji predstavlja interfejs između hardvera računara i korisnika
računarskog sistema. Njegova svrha je da obezbedi okolinu u kojoj se izvršavaju korisnički programi.
Prema tome, osnovni cilj operativnog sistema je da učini računarski sistem pogodnim za upotrebu.
Drugi cilj je da se korišćenje resursa računarskog sistema odvija na efikasan način.
1.1. Definicija i zadaci operativnog sistema
Računarski sistem se grubo može podeliti na četiri komponente (slika 1.1):
• Hardver (CPU, memorija, U/I uređaji).
• Operativni sistem.
• Aplikativni softver (kompilatori, sistemi za upravljanje bazama podataka, tekst procesori,
grafički porgrami, itd.).
• Korisnici (ljudi, drugi računari ili druge mašine).

Hardver računara
Sl. 1.1. Apstraktni pogled na komponente računarskog sistema.

Hardver računara pruža osnovne resurese. Aplikativni programi definišu načine na koje se ti resursi
koriste za rešavanje nekog od problema korisnika. U sistemu može postojati više različitih korisnika
koji pokušavaju da reše različite probleme. Stoga mogu da postoje različiti aplikativni programi.
Operativni sistem upravlja dodelom hardverskih resursa i vrši koordinaciju upotrebe hardvera između
različitih aplikacija različitih korisnika.
Iz ovih razloga možemo posmatrati operativni sistem kao alokator resursa. Računarski sistem sadrži
različite resurse koji mogu biti hardverski ili softverski kao što su: CPU vreme, memorijski prostor,
prostor za smeštaj datoteka, U/I uređaji itd. Operativni sistem deluje kao menadžer ovih resursa
dodeljujući ih različitim programima i korisnicima na osnovu njihovih potreba tokom izvršavanja
njihovih zadataka. Kako je sasvim moguće da se javi više zahtava za resursima koji često mogu biti
međusobno suprostavljeni, opertivni sistem mora da odlučuje o tome kako će dodeljivati resurse kako
bi se rad računarskog sistema odvijao na nepristrasan i efikasan način.
Ukoliko se usresredimo na upravljačku funkciju operativnog sistema, možemo reći da je operativni
sistem upravljački program koji nastoji da izvršenje korisničkih programa teče bez grešaka. Ovo se
naročito odnosi na upravljanje U/I uređajima.
Generalno, ne postoji potpuno adekvatna definicija operativnog sistema. Razlog za postojanje
operativnog sistema je u tome što su operativni sistemi razuman način da se kreira upotrebljiv
računarski sistem. Možda je lakše definisati operativni sistem definišući šta radi jedan operativni
sistem nego šta je on u stvari.

Operativni sistemi - predavanja 1


Već smo rekli da su dva osnovna cilja operativnog sistema da računarski sistem učini pogodnim za
upotrebu i da obezbedi efikasan rad računarskog sistema. Ova dva cilja su ponekad u kontradikciji. U
prošlosti se efikasnost smatrala važnijom od pogodne upotrebe, tako da se teorija operativnih sistema
skoncentrisala uglavnom na optimalnu upotrebu resursa.
1.2 Začeci operativnih sistema
Na početku, postojao je samo hardver računara. Prvi računari su bili fizički ogromne mašine kojima
se upravljalo sa konzole. Programer bi napisao program i zatim upravljao radom programa sa
konzole. Najpre bi se program ručno uneo u memoriju, bilo preko ploče se prekidačima, papirne trake
ili bušenih kartica. Zatim bi se pritiskom na određene tastere unela početna adresa programa i
započelo njegovo izvršavanje. Programer koji je ujedno bio i operater, pratio bi izvršavanje programa
preko naročitih displeja na konzoli. U slučaju grešaka, programer bi zaustavljao program, ispitivao
sadržaj registara i memorije i otklanjao grešku direktno sa konzole. Izlaz bi se štampao ili bušio na
traku ili karticu radi kasnijeg štampanja.
Mnogi sistemi koristili su šemu rezervacije. Onaj ko bi želeo da koristi računar bi se upisivao u
raspored tražeći sebi slobodno vreme i rezervišući ga. Međutim, nekada je predviđeno vreme bilo
prekratko (u slučaju kada se jave problemi) a nekada ne bi bilo iskorišćeno u potpunosti.

Slika 1.2. Izgled memorije za rezidentni monitor.

Tokom vremena počelo se sa korišćenjem čitača kartica, štampača i magnetnih traka, Razvijeni su
asembleri, louderi i linkeri kako bi olakšali programiranje. Kreirane su biblioteke funkcija. Javljaju se
drajveri uređaja kao specijalni programi, napisani za svaki uređaj, a koji su uzimali u obzir posebnosti
svakog uređaja.
Nešto kasnije, sa pojavom viših programskih jezika, posao programiranja je olakšan, ali je zato
otežan posao operatera. Da bi se, na primer, izvršio neki program napisan u Fortranu, bilo je potrebno
najpre napuniti Fortran prevodilac u računar, tj. montirati odgovarajuću magnetnu traku. Program bi
se čitao sa bušenih kartica i upisivao takođe na magnetnu traku. Prevodilac bi generisao asemblerski
kod koji je morao da se asemblira sličnim postupkom a zatim da se izvrši linkovanje. Posle ovoga bi
se program izvršavao i po potrebi prečišćavao. Pri ovome je vreme postavljanja bilo ogromno.
Rešenje je potraženo na dva načina. Unajmljeni su profesionalni operateri, tako da programer i
operater više nisu bili jedna osoba. Nije više bilo nužno da programeri rezervišu vreme na računaru.
Drugi način je podrazumevao uvođenje paketne obrade. Poslovi slične prirode grupisani su u pakete i
izvršavali jedan za drugim.
Ova rešenja su malo poboljšala iskorišćenost računara. Ostajao je problem u tome što je, prilikom
prekida rada programa, operater utvrđivao da li je prekid bio normalan ili abnormalan, po potrebi

Operativni sistemi - predavanja 2


vršio damp memorije i potom punio čitač kartica novim poslom, ostavljajući procesor neiskorišćenim
za to vreme.
Da bi se i ovaj problem prevazišao, uvedeno je automatsko sekvenciranje poslova i prvi rudimentarni
operativni sistemi. Na taj način vršen je automatski prenos upravljanja sa jednog posla na drugi.
Kreiran je mali program nazvan rezidentni monitor (slika 1.2). Na početku rada računara upravljanje
se predaje rezidentnom monitoru koji je dalje prenosio upravljanje programima. Kada se neki
program završi kontrola se ponovao vraća rezidentnom monitoru koji opet ide dalje na drugi program.
Da bi rezidentni monitor znao koji program treba da se izvršava uvedene su upravljačke kartice koje
su ukazivale monitoru koji program treba da se izvrši. Na primer,
$FTN – izvrši Fortran prevodilac
$ASM – izvrši asembler
$RUN – izvrši korisnički program
Za određivanje granica poslova koristile se se još dve kartice:
$JOB – Prva kartica posla
$END – Poslednja kartica posla
Znak $ odvajao je upravljačke kartice od kartica koje su predstavljale programe ili podatke. Neki
proizvođači su koristili i druge znake (npr. //). Na slici 1.3 vidimo primer skupa kartica za izvršavanje
jednog paketa poslova.

1.3 Poboljšavanje performansi prvobitnih operativnih sistema


Računari su, pogotovu veliki, bili veoma skupe mašine, tako da se zahtevalo da izvršavaju što je
moguće više poslova. Prelazak na paketne sisteme sa automatskim sekvenciranjem poslova bio je
izvršen upravo iz razloga poboljšanja performansi. Ljudi su, u poređenju sa računarom, veoma spori
pa je poželjno da se što više ljudskih operacija zameni softverom operativnog sistema. Međutim i kod
ovog pristupa je CPU ostajao neuposlen. Mehanički U/I uređaji su mnogo sporiji od elektronskih
uređaja. To znači da CPU često čeka na U/I.
1.3.1 Rad off-line
Jedno rešenje problema sastojalo se da se ulaz sa sporih, mehaničkih uređaja iskopira najpre na
magnetnu traku. Kada se traka napuni onda ona služi kao ulaz računarskog sistema. Prilikom izlaza se
na sličan način punila magnetna traka, a štampanje je vršeno kasnije. Takav rad čitača kartica i
štampača naziva se off-line. Postojala su dva pristupa ovom problemu. Uređaji specijalne namene,
kao što su čitači kartica, linijski štampači i sl., pravljeni su tako da je njihov izlaz, tj. ulaz magnetna
traka. Drugi pristup je podrzumevao upotrebu malog računara koji bi bio posvećen kopiranju sa ili na
traku. Taj mali računar je predstavljao neku vrstu satelita većem računaru. Satelitskaobradaje jedan
od prvih slučaja sistema sa više računara koji rade zajedno u cilju poboljšanja performansi. Glavna
prednost off-linerada je u tome što glavni računar nije više bio ograničen brzinom sporih U/I uređaja,

Operativni sistemi - predavanja 3


već samo brzinom mnogo bržih jedinica magnetnih traka. Osim ovoga, programi su na taj način
mogli da se izvršavaju nezavisno od tipa U/I uređaja (device independence). Programi su pisani da
koriste logičkeU/I uređaje, dok se uparavljačkim karticama ili drugim komandama ukazivalo kako se
logički uređaj preslikava na fizički uređaj.
1.3.2 Baferovanje
Još jedno rešenje problema sporosti U/I uređaja je baferovanje. Težnja kod baferovanja je da se i
CPU i U/I uređaju uposle sve vreme. Pošto se podaci učitaju i CPU počinje da radi sa njima, ulazni
uređaj odmah počinje sa narednim ulazom. Uz malo sreće, dok CPU obradi prethodne podatke, novi
ulaz biće učitan. Sličan proces može da se odvija i prilikom izlaza. Baferi su obično sadržavali
blokove podataka koji su se satojali od nekoliko logičkih zapisa. Problem koji se kod implementacije
baferovanja javljao sastojao se u otkrivanju kada je U/I uređaj završio svoj rad što je pre to moguće.
Ovaj problem se rešavao uvođenjem sistema prekida. Takođe se uvodi i direktnipristup
memoriji(DMA).
Baferovanje nije uvek dovoljno da se poveća efikasnost rada računara, naročito kod programa koji su
ekstremno posvećeni U/I aktivnostima ili CPU aktivnostima.
1.3.3 Spooling
Priprema poslova za off-linerad se nastavila neko vreme, ali je ubrzo bila zamenjena u mnogim
sistemima. Sistemi diskova su ušli u široku upotrebu. Problem sa magnetnim trakama je bio što,
recimo čitač kartica nije mogao da upisuje na traku na jednom kraju a CPU da čita podatke sa drugog
kraja, jer je magnetna traka poluadresivi medijum sa ugrađenom sekvencijalnom prirodom pristupa.
Način obrade koji se odvijao pomoću diskova nazivao se Spooling(Simultaneous Peripheral
Operation On-Line). Ovde se disk koristi kao veliki bafer (slika 1.4).

Čitač kartica Linijski štampač Sl. 1.4. Spooling.

Baferovanje preklapa U/I aktivnosti nekog posla sa njegovim CPU aktivnostima. Prednost spoolinga
nad baferovanjem je što je ovde U/I aktivnost jednog posla preklopljena sa CPU aktivnostima drugih
poslova. Ekstremni oblik spoolinga je da se čitav sadržaj magnetne trake iskopira na disk, tako de se
sve operacije obavljaju sa kopijom na disku i to mnogom većom brzinom (ovaj šema se naziva
staging a tape).
Spooling ima direktan uticaj na poboljšanje performansi. Po ceni izvesnog prostora na disku i
nekoliko tabela koje prate sadržaj na disku, omogućeno je preklapanje CPU aktivnosti jednog posla
sa U/I aktivnošću drugog. Osim ovoga, spooling obezbeđuje važnu strukturu podataka: poolposlova.
Pool poslova omogućuje da operativni sistem može da među spremnim poslovima iz poola odabere
koji će se sledeći izvršiti i na taj način da poveća efikasnost. Dok su poslovi dolazili direktno sa čitača
kartica pa i sa magnetne trake, oni su morali da se izvršavaju u sekvencijalnom FIFO poretku.
Međutim, kada imamo nekoliko poslova na brzom uređaju sa direktnim pristupom, kao što je disk,
omogućen je planiranjeposlova(job scheduling).
1.3.4 Multiprogramiranje
Najvažniji aspekt planiranja poslova je sposobnost multiprogramiranja. Ideja multiprogramiranja
sastoji se u sledećem. Operativni sistem bira jedan od poslova iz poola poslova i počinje da ga
izvršava. U određenom trenutku posao će čekati na montiranje trake, na komandu sa tastature,
završetak U/I operacije ili slično. U tom slučaju se operativni sistem jednostavno prebaci na drugi
posao i počinje njega da izvršava. Kada se slična stvar dogodi i sa tim poslom priča se ponavlja. Pre

Operativni sistemi - predavanja 4


ili kasnije će prvi posao završiti svoje čekanje i dobiće ponovo CPU kako bi se nastavio. Dokle god
postoji neki posao koji treba izvršavati CPU nije besposlen. Operativni sistemi sa
multiprogramiranjem su prilično složeni. Da bi mogli da imamo nekoliko poslova spremnih za
izvršavanje, oni moraju da se istovremeno nalaze u memoriji (slika 1.5). To povlači da moraju da
postoje sredstva za upravljanje memorijom. Takođe moramo da imamo i mogućnost kratkoročnog
planiranja poslova (cpu scheduling), planiranja U/I uređaja, upravljanja zastojima, upravljanja
konkurencijom, zaštite i dr.

1.3.5 Deljenje procesorskog vremena (Time Sharing)


Sistemi sa deljenjem procesorskog vremena su rezultat pokušaja da se obezbedi interaktivna
upotreba računarskog sistema po razumnoj ceni. Ovakav operativni sistem koristi planiranje CPU-a i
multiprogramiranje dozvoljavajući svakom korisniku da koristi procesor tokom malog, unapred
definisanog vremenskog intervala. Sada nije problem što korisnicima treba relativno puno vremena
da izvrše unos sa tastature ili pročitaju sa ekrana monitora
rezultate rada programa, jer se upravljanje procesorom prenosi na druge poslove tokom svakog
vremenskog intervala.
1.3.6 Sistemi za rad u realnom vremenu (RealTime Systems)
Još jedan oblik operativnih sistema jesu sistemi za rad u realnom vremenu. Ovakvi sistemi se često
koriste kao kontroleri u specijalnim aplikacijama. Različiti senzori snabdevaju računar podacima.
Računar analizira te podatke i po potrebi podešava upravljanje kako bi promenio ulaz u senzore.
Obrada kod ovakvih sistema mora biti završena u okviru unapred zadanog vremenskog perioda.

Funkcije operativnog sistema


OS predstavlja skup sistemskih programa koji posreduje između korisnika i računarskog hardvera a
clij mu je da:
o Izvršava korisničke programe i olakša rešavanmje korisničkih problema
o Približi korišćenje računarskog sistema i učini ga podesnijim za korisnika
o Omoguči što efikasnije iskorišćenje računarskog hardvera
1. Upravljanje resursima računarskog sistema
Pod resursima podrazumevamo programe, podaci, procesor, memorija, I/O kontroleri i sve ostalo što
se koristi da bi se dobila neka informacija ili izvršila neka radnja. Osnovni cilj svakog OS je da svi
ovi rasursi budu optimalno upotrebljeni.
2. Obezbeđivanje pristupačnog radnog okruženjaza krajnjeg korisnika
Potrebno je da računar koji razume samo jednostavan ali nerazumljiv jezik 1 i 0 približi krajnjem
korisniku i omogući mu da može da upravlja računarskim sistemom putem razumljivih naredbi
bliskih jeziku kijm govorimo. Primer upis datoteke na HD računara.
3. Automatsko funkcionisanje računarskog sistema
OS mora da omogući funkcionisanje računarskog sistema bez dodatne intervencije korisnika.
Osnovni razlog za to je sporost korisnika, tako da bilo koja njegova intervencija u toku rada OS
učiniče isti sporim i neefikasnim a samim tim i neadekvatnim za rešavanje mnogih problema. Primer:
punjenje memorije sa podacima ili programima.
4. Mogućnost planiranja i raspoređivanja poslova (scheduling)

Operativni sistemi - predavanja 5


Radi preciznije dodele procesa i procesora uvode se kontrolne naredbe koje treba da upravljaju
celokupnim radom računarskog sistema (job control language).
5. Multiprogramiranje
Tehnika koja nam omogučuje da na jednom računaru pokrenemo više programa od jednom tj. njihovo
istovremeno izvršavanje.
6. Eliminisanje zavisnosti U/I operacija
Izvršavanje U/I operacija je znatno sporije od procesora pa je potrebno da OS te operacije izoluje tj.
odvoji od procesora kako bi on mogao da za to vreme radi neke druge stvari. U tu svrhu koristimo
dve hardverske strukture i to: kanal i tehniku prekida. Kanal predstavlja uređaj koji kontroliše jedan
ili više perifernih uređaja i po pravilu on se realizuje putem DMA (Direct Memory Access)
kontrolera. DMA je sposoban da vrši prenos podataka između perifernih uređaja a da pri tom ne
angažuje procesor za to. Tehnika prekida se koristi da se procesor obavesti ili da neki uređaj zahteva
opsluživanje ili pak da je neka radnja koju procesor nije izvršavao završena,
Karakteristike Operativnih sistema
1. Konkuretnost
Predstavlja postojanje više simultanih, paralelnih aktivnosti koje se istovremeno izvršavaju. Javljaju
se mnogi problemi koje tu treba razrešavati kao:uzajamno ne mešanje, korišćenje zajedničkih resursa,
sinhronizacija aktivnosti koje zavise jedne od druge, prelazak sa jedne na drugu aktivnost i td.
2. Deoba resursa
U većini slučajeva konkurentne aktivnosti koriste zajedničke resurse ili informacije pa samim tim oni
moraju da budu deljivi (shared). Postoji više razloga da se oni dele a na prvom mestu to je
ekonomičnost korišćenja tj. znatno se smanjuje cena jednog računarskog sistema.
3. Postojanje dugotrajne memorije
Da bi smo mogli da opslužimo viče korisnika tj. da više programa istovremeno izvršavamo
neophodan preduslov je da imamo mogućnost trajnog skladištenja kako podataka tako i programa na
nekom medijumu sa velikom brzinom pristupa istom. To se rešava putem uređaja sa velikim
kapacitetom tj. sekundarnom memorijom. Mnogi problemi se tu javljaju koje OS treba da razreši kao:
obezbeđenje jednostavnog pristupa podacima, brzina upisivanja i očitavanja podataka, sigurnost
podataka i zaštita od grešaka i td.
4. Nedeterminizam
OS mora da se ponaša deterministički tj. kada izvršava isti program sa istim podacima on mora uvek
da da isti rezultat bez obzira kada se vremenski taj program odvija. Sa druge strane on mora da se
ponaša i nedeterministički jer mora da odgovori na mnoge zahteve i događaje koji mogu da se dogode
potpuno ne planirano u toku rada kao što su: razni nepredvidivi prekidi, zahtevi za dodelu nekih
resursa, greške u toku izvršavanja programa).
Poželjne osobine Operativnog sistema
1. Visok nivo efikasnosti
2. Visok nivo pouzdanosti
3. Jednostavnost održavanja
4. Prihvatljiva veličina
Vrste Operativnih sistema
OS možemo podeliti na različite vrste što sve zavisi od kriterijuma koji se koristi i to:
o Prema broju korisnika: Jednokorisnički(single user) i višekorisnički (multyuser)
o Prema broju simultanih aktivnosti: jednoprocesni (single tasking) i višeprocesne(multitasking)
o Prema nameni i načinu obrade poslova: sistemi sa grupnom obradom (bach), interaktivni(time
sharing) i kombinovani.
o Prema funkcionalnim osobinama računarskog sistema: OS za velike računarske sisteme, OS za
sisteme sa deljenjem vremena, OS za stone računare, OS za višeprocesorske sisteme, mrežne OS,
distribuirane OS, udružene sisteme, OS za upravljanje u realnom vremenu, ručni OS (handheld
system), ugnježdeni OS (embedded).
Struktura Operativnog sistema
Jedan računarski sistem posmatramo kao skup komponenti sa tačno definisanim ulogama i
međusobnim vezama između softverske i hardverske koponente sistema. Uloga operativnog sitema je

Operativni sistemi - predavanja 6


da definiše sve te veze i omogući da se na najefikasnij način softverskim alatima upravlja
hardverskim komonentama. Uglavnom svi operativni sistemi imaju strukturu kao na slici br.1
1. Interpretacija komandnog jezika
2. Planiranje i evidencija
3. Upravljanje podacima
4. Upravljanje U/I uređajima
5. Upravljanje memorijom
6. Jezgro ( kernel )
1. Jezgro operativnog sistema je najbliže hardveru. Ono upravlja sistemom prekida računara i vrši
obradu prekida, planira procese (upravlja procesorom ili procesorima ako ih ima više), vrši
obradu procesa (manipulaciju nad procesima), njihovu sinhronizaciju i medjusobnu
komunikaciju. Jezgro vodi računa o procesoru kao resursu operativnog sistema. Kod nekih
operativnih sistema ovaj najniži sloj se naziva upravljanje procesima ( kod LINUX-a imamo i
upravljanje procesima i jezgro OS gde je jezgro nešto širi pojam). Ovde operativni sistem radi u
zaštićenom ražimu rada ( kernel mode) gde je hardverski onemogućena izmena koda koji se
izvršava. Sabv ostali softver radi korisnićkom ( user mode) gde je moguće manjati programski
kod.
2. Upravljanje memorijom odnosi se na upravljanje glavnom (operativnom) memorijom. Zadaci
koje OS na ovom nivou treba da izveši su: realizacija strategije dodele memorije, dodela
memorije, realizacija strategije oslobađanja memorije i osloba\anje memorije. Svaki računarski
sitem ima samo jednu memoriju i ona se posmatra kao jedna celina iako se sastoji iz nekoliko
delova. Operativni sistem maora da ima u vidu da se memorija sastoji od fizički različitih
komonenti koje su izrađene različitim tehnologijama, zatim da se u memoriji nalaze i programi i
različiti podaci kao i sam operativni sistem. U višekorisničkom sistemu sve se to umnožava sa
brojem korisnika pa se tu javlja i potreba da OS vodi računa i zaštiti pojedinih delova memorije
od neovlašćenog upada i narušavanja integriteta podataka.
3. Upravljanje U/I uređajima odnosi se na obezbeđivanje nezavisnosti uređaja i efikasnosti
njihovog rada, realizaciju strategije dodeljivanja i oslobađanja uređaja kao i samu njihovu dodelu.
4. Upravljanje podacima Ova komonenta treba da omogući korisniku što lakše korišćenje i
manipulaciju podacima koji se nalaze u memoriji. Osnovna uloga ovog dela OS je da vodi računa
o organizaciji podataka koji se smeštaju u vidu datoteka koje su oragnizovane kao adresari
(direktorijumi) i obićni fajlovi kao i o njihovoj zaštiti. Uloga ovog dela je da vodi računa i o
sekundarnoj memoriji kao i njenoj defragmentaciji tj. Upravljanje prostorom na disku.
5. Planiranje i evidencija Ovaj deo obuhvata aktivnosti koje su vezane za uvođenje novih poslova
u sistem i pravljenje poretka u kom će se oni izvršavati. Dakle, vrši se izbor posla, realizuje
strategija dodele resursa i određuje prioritet njihovog izvršavanja.Pod evidencijom se
podrazumeva evidentiranje korišćenja resursa. Ova komonenta je vrlo bitna kod složenijih sistema
gde imamo višekorisnićki rad (multiuser mode).
6. Interpretacija komandnog jezika – može biti totalno van operativnog sistema ali je funkcijski tu.
Zavisno od vrste računarskog sistema korisniku može biti na rspolaganju određeni komandni
jezik. On podrazumeva interaktivni rad a ako te interakcije nema onda se koristi neki jezik za
obradu polova – jezik za upravljanje poslovima.
Projektovanje Operativnih sistema
Navešćemo tri osnovne koncepcije kod projektovanja OS koje su zastupljene:
1.Monolitni sistemi
Predstavlja najčešću realizacij OS u prošlosti. Monolitni OS je realizovan kao skup procedura koje se
po potrebi mogu međusobno pozivati bez ikakvih ograničenja. Zbog toga ovakva organizacija OS
dobila je naziv velika zbrka(big mess). U ovakvom OS možemo da razlikujemo tri osnovna skupa
programa i to: glavni program koji obrađuje sistemske zahteve, skup sistemskih procedura koje se
pozivaju prilikom sistemskih poziva i skup pomoćnih procedura koje koriste sistemske porcedure.
2.Slojevita realizacija
Ovde je OS podeljen na hijerahijski organizovane slojeve gde svaki sloj može da poziva samo
funkcije iz nižih tj podređenih slojeva. Svaki sloj ima tačno određenu funkciju i upravlja tačno
određenim resursima. Tako na primer kod prvog slojevitog OS THE nulti sloj upravlja procesorom,

Operativni sistemi - predavanja 7


prvi sloj upravlja memorijom, drugi sloj upravlja komunikacijom između različitih procesa i
komandnog interpretera, treći sloj upravlja U/I operacijama a četvrti sloj je zadužen za korisničke
programe koje ne interesuju niti upravljanje procesorom niti memorijom niti pak komunikacija
između procesa.
3.Arhitektura mikrojezgra
Mikrojezgro (microkernel) predstavlja veoma savremen koncept u relizaciji savremenih OS. Osnovna
zamiso je da se napravi minimalno jezgro visokih performansi koj će biti jako pouzdano i robusno tj.
spremno da odgovori na sve zahteve jednog računarskog sistema. Sve ostale funkcije jezgra smeštaju
se u korisnički prostor. Tu se nalaze korisnički moduli koji mogu međusobno da komuniciraju ali
samo preko sistema poruka (message passing). Ovakvom strukturom omogučili smo da se takvi OS
jednostavno mogu proširiti novim modulima jer se njihovim dodavanjem ne narušava osnovno dobro
zaštićeno jezgro. Pored toga ovakvi OS su lako prenosivi na druge računarske platforme a što je
najvažnije postignuta je znatno veća pouzdanost i sigurnost u odnosu na ostale OS drugačije
arhitekture.
Virtuelne mašine
Ovde je potrebni istači još jednu softversku strukturu koja je vezana za razvoj OS i koju je lansirao
IBM. Radi se o virtuelnoj mašini koja ima velike prednosti pri realizaciji novih OS. Struktura
virtuelnih mašina definisana je na sledeći način: na najnižem nivou nalazi se hardver, a iznad njega
monitor virtuelnih mašina tj. poseban sistem koji obezbeđuje niz virtuelnih mašina koje predstavljaju
tačne kopije tog hardvera. Sada se na te kopije tj. virtuelne mašine mogu instalirati različiti operativni
sistemi koji izvršavaju različite programe. Sve hardverske operacije koje ti OS šalju prema svojim
virtuelnim mašinama prihvata monitor virtuelnih mašina i realizuje ih u skladu sa hardverom ispod
sebe. Svaka virtuelna mašina realizovana je slojevito i ona tretira realni hardver i realno jezgro kao da
je to hardver za operativni sistem koji ona predstavlja. OS stvara iluziju o višestrukim procesima koji
se izvršavaju na svom virtuelnom procesoru i svojoj virtuelnoj memoriji. Virtuelne mašine
obezbeđuju kompletnu zaštitu sistemskih resursa, pošto su sve one međusobno izolovane i ne mogu
direktno deliti resurse.

Operativni sistemi - predavanja 8


U sistemskim programima može da se prepozna jedna grupa programa programski sistem koji
obezbeđuje automatizaciju procesa razvoja programa. Taj sistem treba da obezbedi programeru
različite komponente u zavisnosti od modela programa koji programer želi da realizuje tj. Služi za
efikasno izvođenje razlićitih opštih funkcija. On treba da obezbedi samo automatizaciju procesa
unošenja, korekcije i testiranja programskog koda. U sistemske programe spadaju:
- jezički procesori tj. prevodioci : asembler, makroasembler, kompajleri i interpretatori
- predprocesori i postprocesori – predprocesori su sistemski programi koji treba da pripreme naš
program za rad u nekom okruženju – vrše pripremu za ulazak u neki drugi program. Suprotno ovome
izvršavanje nekih operacija nad izlaznim podacima kao što je: formatiranje, izbacivanje nepotrebnih
delova kao i optimizacija programskog koda,vrše sistemski programi poznati kao postprocesori.
- generatori na osnovu opisa neke operacije generišu program koji izvršava tu operaciju. Oni se
prave za uske oblasti jer se danas još uvek nemoguće napraviti neki opšti generator.
- dibageri (prečišćavaći) pomažu programeru u procesu pronalaženja grešaka u programskom kodu
na asembleru, visokom ili vrlo visokom prog.jeziku. Dibager je usko vezan određeni programski
jezik. Mogu biti apsolutni ili simbolički u zavisnosti od toga kako pristupaju adresama u programu.
- editori omogućavaju unos i ažuriranje programa i podataka ali raznih drugih dokumenata kao što
su: slike, grafikoni, matematičke formule i td. Za njih je bitno znati kako je projektant zamislio model
editovanog dokumenta: da li je on alfanumerički, bitmapiran, vektorski ili se sastoji iz više objekata.
- sredstva za testiranje programa – pomažu kod testiranja programskih rešenja kako bi oni mogli
da odgovore postavljenim zahtevima.
- linkeri ili povezivači objednjuju nezavisne komonente-module u jednu programsku celinu.
- loaderi ili punioci unose program u operativnu memoriju i pokreću njegovo izvršavanje.
Postoje i određeni uslužni programi koji spadaju u programski sistem a koji nisu od fundamentalnog
značaja za razvoj programa tj. Bez njih je moguće napisati i pokrenuti neki program i njihova je uloga
samo da pomažu programeru i prošire mogućnosti operativnog sistema. Tu pre svega spadaju
programi za sortiranje podataka, za rad sa datotekama, adresarima, za štampanje podataka,
konverziju, preglede, arhiviranje i kriptovanje podataka. Takođe se sve više koriste sistemi za
upravljanje bazama podataka, sistemi za komunikaciju, sistemi za računarsku grafiku kao i
multimedijalni sistemi. Ove komponente se takođe ubrajaju u sistemske programe i sve se češće
javljaju u proširenim operativnim sistemima.

Sve komponente programskog sistema se izvršavaju pod nadzorom operativnog sistema. Sa razvojem
računara programski sistem postaje sve složeniji i složeniji. Svakom programskom jeziku odgovara
jedan program nazvan jezički procesor koji sve programe napisane na tom jeziku preslikava u oblik
koji računar prepoznaje i direktno ih izvršava ili interpretira. Prevodioci su jezički procesori koji
prihvataju programe napisane na nekom programskom jeziku i generišu funkcionalno ekvivalentne
programe na nekom drugom jeziku. Pojam procesor, u softverskom smislu, upotrebljava se da označi
računarski program koji vrši obradu drugih računarskih programa.
Ako se radi o programima, nakom izlaska iz editora kojim je napisan izvorni kod, isti se uvodi u
odgovarajući prevodilac-kompajler. Rezultat kompilacije je objektni kod koji još uvek nije spreman
za izvršavanje. U procesu nastanka jednog programa mogu se koristiti više programa koji mogu biti
tipa glavnog programa ili potprograma, a mogu se koristiti i sistemske biblioteke. Sve njih povezuje
linker ćija je osnovna uloga da formira program koji će biti spreman da se izvršava nakon njegovog
punjena u operativnu memoriju. Takav program se naziva izvršna jedinica ( bound unit ). Punilac ili
loader tu izvršnu verziju programa prebacuje u operativnu memoriju i inicira njegovo izvršavanje.
Linker i loader se često mogu naći implementirani kao jedinstvena softverska komponenta.
Resursi su hardverska sredstva (procesor, disk, štampač, operativna memorija) ili struktura podataka
(semafor, slog u bazi podataka) koji su na raspolaganju procesima, a kojima upravlja operativni
sistem. Računar ima mnogo sredstava i to više primeraka istog sredstva (na primer tri diska). Sredstvo
u jednom trenutku može koristiti samo jedan proces, a u vremenskom multipleksu više procesa
ukoliko tip resursa to dozvoljava. Resursi mogu biti:
- višestruko korišćeni (reusable) kao što su centralni procesor, operativna memorija, U/I
kanali, U/I jedinice, fajlovi, programi i td.
- jednostruko korišćeni (consumable) kao što su poruke i signali.

Operativni sistemi - predavanja 9


Višekorisnički (multiaccess ili multiuser) operativni sistemi su sistemi koji dopuštaju simultani
pristup računaru sa dva ili više terminala.
Multiprogramski sistemi se karakterišu time da više aktivnih programa mogu istovremeno
konkurisati za resurse sistema.
Jednoprocesorski sistem (uniprocesor) je računarski sistem koji ima samo jedan centralni procesor.
Čak i kada ražunar ima hardverske mogučnosti da paralelno izvršava ulaz/izlaz sa glavnim
programom (ima U/I procesor ili komunikacioni procesor) u jednom vremenskom intervalu se može
izvršavati samo jedan program i na njemu može raditi samo jedan korisnik pa se takav računar smatra
jednoprocesorskim.
Višeprocesorski sistem (multiprocessor) je računarski sistem koji ima dva ili više centralna
procesora koji istovremeno učestvuju u rešavanju istog problema.
Višeprocesorski operativni sistem (multiprocessor operating systems ili multitasking operating
systems) su sitemi projektovani tako da mogu konkurentno da izvršavaju više procesa ili zadataka.
Paketna obrada (batch processing) je obrada kod koje se programi izvršavaju serijski bez interakcije
između korisnika i programa. Programi i podaci se unapred pripremaju na spoljnim medijumima i
organizuju u vidu paketa koristeći naredbe JCL (Job Control Language).
Obrada u vremenskoj podeli (timesharing) je obrada koja obezbeđuje da više korisnika
istovremeno radi na sistemu pri čemu mogu koristiti isti ili različiti program.Dopušta se da veći broj
korisnika radi konkuretno deleći resurse sistema u vremenskom multipleksu.

Operativni sistemi - predavanja 10


3 čas
3. Upravljanje procesima

Upravljanje procesima predstavlja osnovni zadatak svih operativnih sistema koji omogučavaju
multiuser i multitasking. Prebacivanjem CPU-a sa procesa na proces se povećava produktivnost
računarskog sistema. U ovoj glavi ćemo se upoznati sa osnovnim principima planiranja procesa i
algoritmima planiranja procesa.
Proces je program koji se izvršava tj. program postaje proces u trenutku kada počne da se izvršava.
Svaki program mora imati kod i podatke, a svaki proces mora imati i neke sistemske podatke na
osnovu kojih se razlikuje od ostalih procesa i na osnovu kojih OS može da upravlja tim procesom.
Proces je osnovni element koji se koristi kod gradnje OS. Gledano sa strane OS proces je najmanji
entitet koji se može planirati i koji ima svoj kod i podatke. U kodu se mogu ravnopravno naći
mašinske naredbe i sistemski pozivi. Proces ima neka svoja obeležja tj. atribute i to su: prioritet,
pravila pristupa (ko može pristupiti procesu), identifikacija ( podrazumeva adresu programa koji se
izvršava a predstavlja proces).
Sve procese u OS možemo podeliti na sinhrone i asinhrone. Bez obzira na tip procesa, svi procesi
moraju međusobno da sarađuju pa samim tim mora da postoji određena sinhronizacija među njima.
Ako bi mogli da u jednom trenutku zamrznemo stanje u OS videli bi stotine prisutnih procesa koji
upravljaju razlićitim resursima i nalaze se u razlićitim stanjima.Međutim, tu ne postoji nikakva
anarhija, već se sve to odvija po određenom protokolu koji je definisao da se korisniku omogući da
što efikasnije izvrši ono što želi i da postigne što optimalnije iskorišćenje svih raspoloživih resursa.
Sve su ovo oprečni zahtevi koji su prouzrokovali da OS mogu da rade u različitim režimima rada u
zavisnosti od toga kome treba dati veći prioritet: oprimalnom usluživanju korisnika ili oprimalnom
iskorišćavanju resursa. Pošto program postaje proces tek kada počne da se izvršava

3.1 Koncept multiprogramiranja


Najvažniji koncept u modernim operativnim sistemima je multiporgramiranje. Kada u memoriji
postoji više programa istovremeno, tada oni mogu da dele CPU. Ovim se povećava opšta efikasnost
sistema i obavlja više poslova za kraće vreme. Ideja multiprogramiranja je relativno prosta. Jedan
posao se izvršava sve do momenta kada mu zatreba neka U/I aktivnost kada čeka da se njegov U/I
zahtev zadovolji. Umesto da CPU bude neuposlen tokom ispunjenja U/I zahteva, operativni sistem
prenosi upravljanje nad CPU-om na drugi posao.
Koristi od multiprogramiranja odslikavaju se u povećanoj iskorišćenosti CPU-a i većoj ukupnoj
propusnoj moćiposlova. Propusna moć je iznos izvršenog posla u datom vremenskom intervalu.
3.2 Koncept planiranja poslova
Planiranje je osnovna funkcija operativnog sistema, jer se skoro svi računarski resursi planiraju pre
upotrebe. CPU je jedan od osnovnih računarskih resursa, pa je njegovo planiranje centralno u
projektovanju operativnog sistema.
3.2.1 Osnovni koncepti
CPU izvršava veliki broj poslova ili zadataka. Dok je njegova glavna aktivnost izvršavanje
korisničkih programa, CPU se takođe koristi i za druge sistemske aktivnosti. Svaka akcija
računarskog sistema se inicira od strane CPU-a. CPU mora da odgovori na trapove, programske
zahteve i U/I prekide. Stalni problem kod operativnih sistema je kako nazivati sve aktivnosti CPU-a.
Paketni sistemi izvršvaju poslove dok sistemi sa deljenjem procesorskog vremena imaju korisničke
programe. ^ak i kod jednokorisničkih sistema korisnik može biti u stanju da izvršava više programa
istovremeno: jedan interaktivni i više paketnih programa. Kad se izvršava samo jedan program,
operativni sistem može da obavlja sopstvene interno programirane aktivnosti. Po mnogo čemu su sve
ove aktivnosti slične pa ih zovemo jednim zajedničkim imenom: procesi. Proces je program koji se
izvršava. Uspešnost planiranja poslova zasniva se na osobini procesa da njihovo izvršenje predstavlja
ciklus CPU aktivnosti i U/I aktivnosti. Proces neprestano prelazi iz jednog u drugo od ovih stanja
(cpu burst i I/O burst). Trajanja CPU aktivnosti su merena, i mada se prilično razlikuju od procesa do
procesa i od računara do računara, ona pokazuju hipereksponencijalnu krivu frekvencije (slika 3.1).
Postoji veliki broj veoma kratkih CPU aktivnosti i mali broj veoma dugih.

Operativni sistemi - predavanja 11


frekvencija

trajanje
Sl. 3.1. Histogram trajanja CPU aktivnosti.

Tokom svog izvršenja program menja stanje. Stanje procesa definisano je trenutnom aktivnošću.
Izvršenje procesa je alternativna sekvenca CPU i U/I aktivnosti, koja počinje i završava se CPU
aktivnošću. Svaki od procesa može biti u jednom od sledećih stanja: novi, aktivan, čeka ili
zaustavljen (slika 3.2).

Kako više procesa može da deli CPU, to


aktivni proces može da čeka da mu se dodeli
CPU ili da se na njemu izvršava. Stanje kada
proces čeka da mu se dodeli CPU naziva se
spreman, a kada mu se dodeli CPU onda je on
u stanju izvršavanja.

pointer Stanje
procesa
Broj procesa
Programski
brojač

Registri

Memorijske
granice
Lista otvorenih
fajlova
Broj procesa

•••

3.3. Upravljački blok procesa (Process control block)

Svaki proces je u operativnom sistemu predstavljen njegovim upravljačkim blokom procesa (ponekad
se zove i upravljački blok zadatka ili posla). PCB je sadrži:
•Stanje procesa.
•Sadržaj programskog brojača.
•Sadržaj registara CPU-a.
• Informacije o upravljanju memorijom (bazni i granični registri memorijske oblasti ili stranična
tabela).
• Informacije o nalozima (iznos CPU vremena i stvarnog vremena, vremenska ograniženja, broj
naloga, broj procesa, itd.).
• Informacije o stanju U/I (U/I zahtevi, U/I uređaji dodeljeni procesu, lista otvorenih datoteka, i dr.)
• Informacije o planiranju CPU-a (prioritet procesa, pointeri na redove procesa i dr.)

Operativni sistemi - predavanja 12


PCB se mora smestiti u monitorsku memoriju. Ovom memorijom se može upravljati na nekoliko
načina. Najjednostavniji način je da se unapred odredi maksimalni broj procesa i statički dodeli
dovoljno prostora za svaki PCB. Dinamička dodela memorije je obično bolja, što se tiče fleksibilnosti
i boljeg iskorišćenja memorije, ali zahteva složenije algoritme noseći i opasnosti od mogućih grešaka
od pogrešnog dodeljivanja memorije.
3.2.2 Redovi procesa
Cilj multiprogramiranja je da se u svakom trenutku neki proces izvršava kako bi se maksimizirala
iskorišćenost CPU-a. Kod jednoprocesorskih mašina najviše jedan proces se u jednom trenutku može
izvršavati. Ako u sistemu postoji više procesa, svi ostali će morati da čekaju dok se procesor ne
oslobodi i dodeli nekom od njih. Spremni procesi drže se u redovima spremnih procesa. U opštem
slučaju, to je povezana lista čiji su elementi PCB-ovi procesa u redu. Redovi spremnih procesa ne
moraju biti nužno FIFO strukture. Osim redova spremnih procesa, u sistemu postoje i redovi uređaja
u kojima procesi čekaju da im se dodeli neki U/I uređaj. Opšta šema planiranja poslova je u obliku
dijagrama redova kao na slici 3.4.

Planeri
Operativni sistem ima više planera (schedulers). Dva su osnovna: dugoročni i kratkoročni. Dugoročni
planer (ili planer poslova) određuje koji će se poslovi propustiti u sistem radi obrade. U paketnim
sistemima ima više poslova koji su u sistemu nego onih koji mogu da budu izvršeni. Poslovi koji
čekaju kopiraju se na disk. Dugoročni planer bira poslove iz pula poslova i puni ih u memoriju radi
izvršenja. Kratkoročni planer (planer CPU-a) bira jedan od tih poslova koji su u memoriji i spremni
su za izvršenje i dodeljuje mu procesor.
Osnovna razlika ova dva planera je u frekvenciji njihovog izvršenja. Kratkoročni planer vrlo često
bira proces koji će se izvršavati i zato mora da bude veoma brz. Dugoročni planer se izvršava znatno
ređe. On upravlja stepenom multiprogramiranja (brojem procesa u memoriji). Ukoliko je taj stepen
stabilan, srednja brzina dolaska poslova u sistem je jednaka srednjoj brzini izlaska iz sistema. Prema
tome, dugoročni planer se aktivira samo kada neki posao napušta sistem. Zbog dugog intervala
između dva izvršenja, dugoročni planer ima na raspolaganju duže vreme za izbor posla. Takođe je
bitno da dugoročni planer taj izbor izvrši pažljivo i da napravi dobru mešavinu poslova orijentisanih
ka CPU-u i onih orijentisanih ka U/I aktivnostima.
Operativni sistemi - predavanja 13
U nekim sistemima dugoročni planer može i da ne postoji ili može da bude minimalan. Na primer,
sistemi sa deljenjem procesorskog vremena često nemaju dugoročni planer, već se svaki novi proces
šalje u memoriju kratkoročnom planeru. Stabilnost ovih sistema zavisi ili od fizičkih ograničenja ili
od razumnog ponašanja korisnika.
Neki sistemi, naročito oni sa virtuelnom memorijom ili sa deljenjem procesorskog vremena, mogu da
imaju još jedan, srednji nivo planiranja. Taj srednjoročniplanerje prikazan na slici 3.6

Ključna ideja je da je ponekad korisnije ukloniti proces iz memorije kako bi se smanjio stepen
multiprogramiranja. Posle izvesnog vremena procesi se mogu ponovo vratiti u memoriju. Ova šema
naziva se swapping(prebacivanje), a izvodi se sa ciljem da se poboljša mešavina poslova ili da bi se
oslobodila memorija u slučaju zagušenja.
Još jedna komponenta je uključena u funkciju planiranja i naziva se dispečer. Dispečer je modul koji
u stvari daje upravljenje nad CPU-om procesu koji je izabran od strane kratkoročnog planera. Ova
funkcija obuhvata punjenje registara procesa, prebacivanje u korisnički režim rada i skok na
odgovarajuću lokaciju u korisničkom programu kako bi se on nastavio. Ova komponenta mora da
bude što je moguće brža.
3.3 Algoritmi planiranja
Planeri CPU-a odlučuju o tome kojem od spremnih procesa treba dodeliti CPU. Postoji više različitih
kriterijuma planiranja.
3.3.1 Kriterijumi performansi
Različiti algoritmi imaju različite osobine i mogu da favorizuju jednu vrstu procesa u odnosu na
druge. Prilikom izbora određenog algoritma za određenu situaciju moraju se imati u vidu osobine
algoritama. Postoji više kriterijuma na osnovu kojih se mogu porediti algoritmi planiranja. Ti
kriterijumi su sledeći:
• Iskorišćenost CPU-a. Kako je CPU veoma skup uređaj, nužno je držati ga stalno uposlenim.
Iskorišćenost CPU-a može da varira od 0% do 100%. U realnim sistemima ona se obično kreće od
40% do 90%.
• Propusna moć. Ako je CPU zauzet, onda on obavlja neki posao. Propusna moć je mera koja
predstavlja broj poslova koji se mogu završiti u jedinici vremena. Za duge poslove ona može da
iznosi jedan posao po satu, dok za kratke poslove propusna moć može da bude desetak poslova u
sekundi.
• Vreme obilaska. Ovo vreme je vreme koje protekne od momenta prijavljivanja posla do njegovog
završetka i predstavlja sumu vremena koje posao provede u čekanju da uđe u memoriju, čekanju u
redu spremnih procesa, vremena tokom kojeg se izvršavao na CPU-u i vremena tokom kojeg je
obavljao U/I operacije.
• Vreme čekanja. Ovo je ukupno vreme koje proces provede u redu čekanja spremnih procesa.
• Vreme odziva. U interaktivnim sistemima vreme obilaska nije baš najbolji kriterijum, jer proces
često na početku proizvede neki izlaz i nastavlja svoje izvršenje izračunavajući nove rezultate dok se
korisniku prikazuju prethodni rezultati. Druga mera, koja se naziva vreme odziva, predstavlja vreme
koje protekne od prijavljivanja posla dok se ne proizvede prvi izlaz programa, ne računajući vreme
potrebno da sa taj izlaz zaista i prikaže na nekom izlaznom uređaju.
Kada izaberemo kriterijum na osnovu kojeg vršimo poređenje algoritama, obično želimo da dobijemo
optimalne performanse, maksimizirajući iskorišćenost CPU-a i propusnu moć a minimizirajući
vremena obilaska, čekanja i odziva. U najvećem broju slučajeva optimiziraju se srednje vredosti, ali
će nekada biti potrebno da se optimiziraju minimalne, odnosno maksimalne vrednosti ovih mera.

Operativni sistemi - predavanja 14


3.3.2 FCFS algoritam
Najednostavniji algoritam planiranja poslova je FCFS (First-Come-First-Served). Procesor se najpre
dodeljuje onom procesu koji ga je prvi zahtevao. Implementacija ovog algoritma se lako vrši
korišćenjem FIFO redova. Kada se proces ubacuje u red spremnih procesa njegov PCB se stavlja na
kraj reda. Kada se procesor oslobodi on se dodeljuje prvom procesu iz reda. Međutim, performanse
ovog algoritma su veoma slabe. Posmatrajmo sledeća tri posla prikazana u tabeli.

Vreme
Posao
izvršavanja
1 24
2 3
3 3

Ako su ovi poslovi pristigli u redosledu navođenja i opslužuju se na osnovu FCFS algoritma, rezultat
ovoga vidimo u sledećoj Gantovoj karti.

Vreme obilaska za prvi posao je 24, za drugi 27 a za treći 30. Srednje vreme obilaska je 27. Ako
pretpostavimo da su poslovi pristigli u redosledu 2, 3, 1, dobićemo sledeću Gantovu kartu.

Sada je srednje vreme obilaska jednako 13, što predstavlja značajno smanjenje. Srednje vreme
obilaska za ovaj algoritam u opštem slučaju nije minimalno moguće, a može značajno da varira u
zavisnosti od konkretnog slučaja.
Pored ovoga, posmatrajmo performanse FCFS algoritma u dinamičkoj situaciji. Pretpostavimo da
imamo jedan posao orijentisan CPU aktivnostima i više poslova orijentisanih U/I aktivnostima.
Moguć je sledeći scenario. Posao orijentisan CPU aktivnostima dobiće CPU i držaće ga doke se ne
izvrši. Za to vreme, svi ostali poslovi će završiti njihove U/I aktivnosti i biće u redu spremnih
procesa. Dok čekaju u redu, U/I uređaju su besposleni. Kada se posao koji je držao CPU izvrši i pređe
na U/I aktivnost, ostali poslovi koji imaju kratke periode CPU aktivnosti a duge periode U/I
aktivnosti, će se brzo izvršiti i vratiti U/I aktivnostima. Sada je CPU besposlen. Posao orijentisan
CPU aktivnostima se vraća u red spremnih procesa i dodeljuje mu se procesor i priča se ponavlja.
Ova situacija, gde svi procesi čekaju da jedan dugačak proces oslobodi CPU, naziva se efekat
konvoja. Rezultat tog efekta je slaba iskorišćenost i CPU-a i U/I uređaja.
3.3.3 SJF algoritam
Različit pristup planiranju poslova prisutan je kod SJF (Shortest-Job-First) algoritma. Kod ovog
algoritma se svakom poslu pridružuje i podatak o dužini njegovog sledećeg CPU ciklusa. Kada je
procesor slobodan on se dodeljuje onom poslu kod koga je ta dužina najmanja. Ukoliko postoje dva
ili više poslova iste dužine, kao sekundarni kriterijum koristi se FCFS. Razmotrimo sledeći skup
poslova prikazan u tabeli.
Vreme
Posao
izvršavanja
1 6
2 3
3 8
4 7

Upotreba SJF algoritma daje sledeću Gantovu kartu.

Operativni sistemi - predavanja 15


Srednje vreme obilaska koje se ovde dobija je 13. Ovaj algoritam je dokazano optimalan, jer daje
minimalno srednje vreme čekanja za neki skup poslova. U dokazu se pokazuje da premeštanje kraćeg
posla pre dužeg smanjuje vreme čekanja kraćeg posla u većoj meri nego što povećava vreme čekanja
dužeg posla (vidi sliku 3.7). Prema tome, smanjuje se srednje vreme čekanja.

Sl. 3.7. Dokaz da je SJF algoritma optimalan.


Problem kod ovog algoritma je upravo u određivanju dužine sledećeg zahteva za CPU-om. Kod
dugoročnog planiranja poslova u paketnim sistemima možemo da koristimo granicu vremena
rezervisanog za posao. Tako je korisnik motivisan da tačno proceni trajanje posla, jer što je manja
granica koju zada to će se njegov posao brže izvršiti. Ovaj algoritam se najčešće koristi kod
dugoročnog planiranja. Na žalost, i pored optimalnosti, ne može se primeniti na kratkoročno
planiranje CPU-a. Nema načina da se odredi trajanje sledeće CPU aktivnosti. Jedan pristup je da se
pokuša sa aproksimacijom ovog algoritma. Iako ne možemo da znamo trajanje sledeće CPU
aktivnosti, možemo da predvidimo njenu dužinu.
Obično se za ovo predviđanje koristi eksponencijalna sredina prethodnih aktivnosti. Ako je tn trajanje
n-te CPU aktivnosti a τn+1 predviđeno trajanje naredne, onda je
(1) α
τn+1 =αtn+(1-α) τn , 0≤α≤1

Vrednost t sadrži najskoriju poznatu informaciju; τn sadrži davnu prošlost u sebi. Parametar α
upravlja relativnim težinama nedavne i davne prošlosti u predviđanju. Ako je α= 0, tada je τn*1= τn, i
nedavna prošlost nema efekta. Za vrednost parametra α= 1, τn*1= tn, pa je samo najskorija CPU
aktivnost od važnosti. Najčešće je α= 1/2, tako da i nedavna i dalja prošlost imaju podjednaku težinu.
Da bi razumeli eksponencijalnu sredinu razvićemo prethodnu formulu zamenjujući vrednosti za τn.
n+1 =αtn+ (1-α)αtn−1 +K+(1-α)j tn−j +K
Kako su i α i (1-α) manji od 1, to je svaki sledeći sabirak manje težine od prethodnog.

3.3.4 Algoritam sa prioritetima


SJF algoritam je specijalni slučaj opštijeg algoritma sa prioritetima. Prioritet se pridružuje svakom
poslu, a CPU se dodeljuje poslu sa najvišim prioritetom. Poslovi sa istim prioritetom se opslužuju po
FCFS algoritmu. SJF je u stvari algoritam sa prioritetima gde je prioritet p jednak recipročnoj
vrednosti predviđenog trajanja τCPU aktivosti, tj. p =1/τ. Prioriteti se mogu definisati interno ili
eksterno. Interno definisani prioriteti koriste neku merljivu veličinu za izračunavanje prioriteta
procesa. Na primer, vremenske granice, memorijski zahtevi, broj otvorenih fajlova, kao i odnos
srednjeg trajanja U/I aktivnosti i srednjeg trajanja CPU aktivnosti su neke od veličina koje se mogu
koristiti za izračunavanje prioriteta. Eksterni prioriteti postavljaju se na osnovu kriterijuma koji su
spoljašnji u odnosu na operativni sistem, kao što su vrsta i iznos plaćene naknade za korišćenje
računara, važnost naručioca posla, kao i slični faktori, uglavnom političke prirode. Glavni problem sa
ovim algoritmom je pojava umiranjaod gladi. Može se desiti da neki proces sa niskim prioritetom,
zbog čestog pristizanja poslova višeg prioriteta u sistem, nikada ne dobije priliku da se izvršava.
Moguće je da se takvi procesi izvrše tek kada se smanji opterećenost sistema (na primer, tokom
vikenda), ili da im se ne dodeli CPU sve do prestanka rada sistema. Postoje glasine da je 1973. godine
na MIT-u, kada je računar IBM 7094 trebao da bude zamenjen, pronađen posao niskog prioriteta koji
je prijavljen na sistem 1967. godine i još uvek se nije izvršio.
Drugo rešenje ovog problema je starenje.Tehnika starenja predviđa da se postepeno povećava
prioritet onih poslova koji dugo čekaju u sistemu.
3.3.5 Algoritmi sa prekidanjm
Do sada opisani algoritmi su algoritmi bez prekidanja. Kada se kod takvih algoritama jednom dodeli
procesor nekom procesu, onda ga on zadržava sve dok se ne izvrši do kraja ili dok ne obavi U/I
zahtev. FCFS algoritam je po svojoj prirodi algoritam bez prekidanja, ali se druga dva mogu
modifikovati da budu algoritmi sa prekidanjem. SJF algoritam može biti realizovan i bez prekidanja i
Operativni sistemi - predavanja 16
sa prekidanjem. Dilema nastaje kada novi posao stiže u red spremnih procesa dok se prethodni posao
izvršava. Novi posao može da ima kraći CPU ciklus nego što je potrebno za dovršetak posla kome je
već dodeljen procesor. SJF sa prekidanjem će prekinuti posao koji se trenutno izvršava, dok SJF bez
prekidanja dozvoljava da se dovrši tekući posao. Varijanta SJF algoritma sa prekidanjem naziva se
SRTF (Shortest-Remainig-Time-First). Planiranje procesa na osnovu prioriteta takođe može biti sa i
bez prekidanja. Kada posao pristiže u red spremnih procesa njegov prioritet se poredi sa prioritetom
posla koji se izvršava. Ako je prioritet novog posla viši, tekući posao će se prekinuti i procesor
dodeliti novom poslu. U varijanti bez prekidanja novi proces ostaje u redu spremnih procesa do
završetka tekućeg posla.
Algoritmi bez prekidanja (naročito FCFS) nisu pogodni za sisteme sa deljenjem procesorskog
vremena, gde je neophodno da svaki korisnik dobije deo procresorskog vremena u pravilnim
intervalima.
3.3.6 Kružni algoritam
Kružni algoritam (round-robin) je algoritam projektovan specijalno za sisteme sa deljenjem
procesorskog vremena. Definiše se mala jednica vremena (kvantum vremena) koja se kreće između
10 i 100 milisekundi. Red spremnih procesa realizovan je kao kružni red. Planer procesa svakom
procesu iz reda dodeljuje CPU na korišćenje tokom intervala koji je manji ili jednak kvantumu
vremena. Kada se ovaj algoritma implementira, red spremnih procesa se realizuje kao FIFO red
procesa. Novi proces se dodaje na kraj reda. Planer procesa bira prvi proces iz reda, postavlja tajmer
na vreme od jednog kvantuma i dodeljuje CPU procesu. Moguće je da se desi jedna od dve stvari.
Proces može da ima CPU ciklus kraći od vremenskog kvantuma. U tom slučaju on sam oslobađa
CPU izdajući U/I zahtev ili terminiranjem. Procesor se zatim dodeljuje narednom poslu iz reda
spremnih procesa. U drugom slučaju, tajmer će, po isteku kvantuma vremena, da izazove prekid.
Registri prekinutog procesa se pamte u njegovom PCB-u, i proces stavlja na kraj reda. Iza toga,
planer procesa bira naredni proces iz reda spremnih procesa. Performanse ovog algoritma veoma
zavise od kvantuma vremena. Ako taj kvantum vremena teži beskonačnosti, ponašanje ovog
algoritma teži ponašanju FCFS algoritma. Ukoliko je vremenski kvantum veoma mali (na primer 1
mikrosekunda), round-robin se naziva deljenje procesorai teoretski izgleda da svaki od nprocesa u
redu ima sopstveni procesor koji je nputa sporiji od stvarnog procesora. Ovakvo rešenje primenjeno
je hardverski kod računara CDC 6600 za implementaciju deset perifernih procesora sa jednom ALU i
upravljačkom jedinicom i deset skupova registara. Hardver izvršava jednu instrukciju za jedan skup
registara, zatim ide na sledeći. Medjutim, sa stanovišta softvera postoje drugi problemi. Na kraju
svakog kvantuma vremena tajmer generiše prekid. Prebacivanje procesora sa jednog na drugi proces
zahteva pamćenje sadržaja svih registara starog procesa i punjenje registara za novi proces. Ovaj
zadatak se naziva prebacivanje konteksta. Prebacivanje konteksta je sa stanovišta izvršavanja procesa
potpuno nekoristan posao. Trajanje prebacivanja konteksta zavisi od brzine memorije, broja registara
i postojanja specijalnih instrukcija. Poželjno je da je kvantum vremena znatno duži od vremena
potrebnog za prebacivanje konteksta. Vreme obilaska takođe zavisi od kvantuma vremena. Ono je
kraće ako većina poslova svoju CPU aktivnost završava za jedan kvantum vremena. Sve nas ovo
navodi da je bolje imati duži kvantum vremena, ali to onda konvergira ka slabom FCFC algoritmu. U
praksi se najčešće teži da kvantum vremena bude u 80% slučajeva bude duži od trajanja CPU
aktivnosti.
3.3.7 Višenivovski redovi
Ova klasa algoritama planiranja kreirana je za situacije kada se poslovi mogu lako klasifikovati u
različite grupe. Na primer, uobičajena je podela na poslove u prvom planu (interaktivni) i poslove u
pozadini (paketni). Ova dva tipa poslova imaju sasvim različite zahteve u pogledu vremena odziva i
mogu da imaju različite algoritme planiranja, a uz to interaktivni poslovi mogu imati eksterno
dodeljen viši prioritet od poslova u pozadini. Kod ovog algoritma je red spremnih procesa podeljen u
više redova. Poslovi koji pristižu svrstavaju se u odgovarajući red. Svaki red ima sopstveni algoritam
planiranja, a između samih redova postoji fiksiran prioritet. Na taj način posao koji je prvi u svom
redu može dobiti procesor na korišćenje isključivo ako je red višeg prioriteta prazan.
3.3.8 Višenivovski redovi sa povratnom spregom
Normalno se kod višenivovskih redova čekanja poslovi dodeljuju redovima po njihovom ulasku u
sistem. Poslovi ne mogu prelaziti iz reda u red. Kod višenivovskih redova sa povratnom spregom

Operativni sistemi - predavanja 17


dozvoljeno je kretanje poslova između redova. Ideja je da se izdvoje poslovi sa različitim
karakteristikama CPU aktivnosti. Ako posao koristi previše CPU vremena premešta se u red sa nižim
prioritetom. Ovaj algoritam ostavlja poslove orijentisane U/I aktivnostima i interaktivne poslove u
redovima višeg prioriteta (vidi sliku 3.8).

Operativni sistemi - predavanja 18


ASINHRONI KONKURENTNI PROCESI
PROCES
Proces je jedna od osnovnih stvari u OS. Postoje neke ne sasvim precizne definicije procesa.
Proces je program u izvršenju, je jedna od njih. Postoji više bitnih stvari koje su
neophodne za izvršenje procesa. Stanje brojača naredbi je bitan deo. Za proces je bitno koja je sledeća
instrukcija, a one koje su se izvršile više nisu bitne. Ceo rad do tada je akumuliran negde u memoriji.
Stanje varijabli je drugi važan deo. Kada se procesu dodeli memorijska lokacija ona ne treba da se
menja do kraja izvršavanja tog procesa. Za pristup podacima potrebno je čuvati početnu i krajnju
memorijsku zonu rezultata, a takođe i stanje registara. Posebno je važan registar flag-ova. Tu se
čuvaju informacije o rezultatu predhodnih operacija(da li je rezultat negativan, nula, da li je došlo do
prekoračenja...). Zbog toga je važno sačuvati flag-ove, a i stanje steka je neophodno čuvati. CPU ne
može da radi bez steka. To je glavni hardverski dodatak CPU. Pristup steku se vrši po LIFO sistemu.
Stek je neophodan za realizaciju sistema prekida, kao i za prelazak na podprogram. Takođe se može
koristiti za prenos argumenata u podprogram. Obično postoji jedan sistemski stek koji se inicijalizuje
po uključenju računara u strujno kolo i koristi ga isključivo sistem, a njegov sadržaj ne sme biti
menjan od strane korisnika. Postoji još jedan, manje službeni, stek preko kojeg se obično prenose
parametri u podprograme. U sistemima može postojati još stekova koji se obično zovu pomoćni, a i
sam korisnik može da definiše svoj stek. Za ispravano korišćenje steka neophodno je čuvanje pointera
na stek. Svi ovi podaci se koriste za informacije o stanju procesa.
Kod MP OS više programa se izvršava konkurentno, a ne paralelno što je moguće jedino na
multi procesorskim sistemima. Programi se izvršavaju malo po malo. Izvršava se deo jednog
programa pa drugog pa sledećeg i tako u krug. Kako je vreme prelaska sa jednog na drugi program
veoma malo, gledano spolja programi se izvršavaju paralelno. Procesi se mogu nalaziti u tri stanja.
Izvršnom, spremnom i blokiranom. Život jednog procesa prolazi kroz te tri faze. Prelaz iz jednog u
drugo stanje kontroliše kernel. Proces prelazi u blokirano stanje kada izda I/O zahtev. Program koji
kontroliše rad proces izvršava se na raznim nivoima. Na najnižem nivou samo dodeljuje vreme
procesima. Na višem nivou se bavi dodeljivanjem memorije, koliko procesa može biti u memoriji...
Tipičan program radi dok ne dođe do I/O zahteva, a onda sam sebe blokira. Kada završi I/O prelazi u
spremno stanje.
Postoje razni termini za procese. U BATCH sistemima zvali su se JOB. U TS sistemima
termin je bio TASK. Danas je popularan termin TRED, što je ime za pojedine faze jednog istog posla.
CHILD procesi su takođe TRED-ovi.
Suspendovanje procesa vrši isti deo kernela koji vodi brigu o dodeli memorije procesima.
Kada ima suviše procesa u memoriji ovaj program suspenduje jedan ili više procesa na određeni
vremenski interval dok se sistem ne odguši. Ovo se vrši jer ukoliko ima previše procesa u memoriji
za svaki od tih procesa u memoriji ima malo koda što dovodi do zagušenja sistema jer CPU po obradi
instrukcija iz memorije mora da čeka da se nove učitaju sa diska. Proces iz suspendovanog stanja se
po pravilu vraća u spremno stanje. Teoretski je moguće da proces pređe iz suspendovanog u izvršno
stanje ali se to ne radi u praksi, isto važi i za obrnut slučaj. Blokirani procesi mogu biti suspendovani,
ali korak nazad nema smisla. Proces koji je blokiran prvo obavi I/O, a zatim prelazi u suspendovano
stanje. Programu koji se brine o svemu ovome omogućavaju rad sistem prekida i stek.
Sistem prekida je hardverski sistem na CPU. Njegov rad je sličan procesu prelaska na
podprogram, ali se u nekim stvarima razlikuje. SP radi slično programu koji treba da se izvrši. Izvrši
se i vrati se na memorijsku lokaciju odakle je pozvan. Razlika u radu je u tome što su podprogrami
kontrolisani od strane programera, i tačno se zna kada će biti prelaz na podprogram. SP su asinhroni
signali. Nisu kontrolisani, ne zna se kada će uslediti zahtev za SP.
SP je osnovni mehanizam CPU-a koji omogućava MP. Suštinska razlika imeđu SP-a i
prelaska na podprogram je u načinu programiranja. Programi koji koriste SP su nezgodni za testiranje
i dokazivanje da su korektni. Najveći problem je u tome što čovek misli sekvencijalno. Logika pri
pisanju paralelnih i asinhronih programa se razlikuje od logike koju čovek koristi pri razmišljanju.
Dokazivanje korektnosti asinhronih programa se vrši pomoću kontra primera. Ranih 70-ih svi
mikroprocesori imaj ugrađen SP. Obično svaki CPU ima više SP. Glavni je no mascable, hardverski
SP koji ne može da se isključi. Koristi se za slučajve pada sistema(npr. Nestanak struje). Pored ovog,
postoji običan interupt koji se vezuje na neki pobuđivač i koji može da se isključi.

Operativni sistemi - predavanja 19


Postoje dva tipa sistema prekida. Potpuni i brzi. Prilikom potpunog prekida na stek se prenose
svi podaci. Adresa povratka, sadržaj svih registara, flag-ovi i možda još nešto ako je potrebno. Ovo je
uobičajen način prekida. Nekada je potrebno prekid realizovati brzo. Ukoliko se po prekidu obavlja
neki mali posao za koji se zna tačno šta radi gubljenje vremena je prenošenje na stek svih podataka
izuzev adrese povratka. U tom slučaju programer moda da vodi računa šta se radi u toku prekida i da
pazi da se sačuva sadržaj svih registara. Ovo je korisno za prekide koji se generišu prilikom
učitavanja karaktera sa tastature. Onda se na steku čuva samo sadržaj registra u koji će se učitati
karakter koji stiže sa tastature.

ASINHRONI PROGRAMI
Prilikom pisanja programa na papiru uobičajeno je da se korisnti neki pseudo programski
jezik. Službene reči PARBEGIN i PAREND se koriste za pisanje programskih delova koji se
izvršavaju asinhrono. Prilikom pisanja asinhronih programa imamo više problema.
Prvi problem je komunikacija dva računara koji nemaju zajednički sat, a jedina veza im je
jedna žica. CPU ovih računara žicu posmatra kao jedan jedno-bitni registar. To je zato što CPU
svemu pristupa na uniformni način(npr. sve posmatra kao fajl). Sinhroni način slanja između ova dva
računara bi bio u praksi problem ako bi jedan slao veliki niz 0 ili 1. Problem je jer pri velikim
brzinama neće oba sata isto raditi tako da će doći do greške. Tri žice(jedna za podatke i dve
kontrolne) su minimum za asinhronu razmenu podataka. Problem je napraviti programe za slanje i
primanje.

Pošiljalac Primalac
X = Novi; while(A == 0);
A = 1; Novi = X;
while(B == 0); B = 1;
A = 0; while(A == 1);
while(B == 1); B = 0;

Ovo je jedini način za asinhrono slanje podataka između računara pomoću tri žice. X je žica
kojom se šalju bitovi, A kontrolna od pošiljaoca ka primaocu, B kontrolna obrnuto. Program na
pošiljaocu radi tako što pošalje jedan bit i javi drugom da je poslao, a zatim čeka da drugi primi bit.
Kada drugi primi bit, prvi čeka da drugi bude spreman da prihvati sledeći bit pa tek onda šalje i tako u
krug. Drugi prvo čeka da prvi pošalje, zatim primi i čeka da mu prvi javi da je video da je primljen
bit. Onda drugi javlja da je spreman da prihvati sledeći bit.
U kritičnoj sekciji u jednom trentuku može da bude samo jedna procedura. Da procedura u
kritičnoj sekciji ne bi bila prekinuta mora se onemogućiti prekid. Rešenje sa isključivanjem interapta
se ne primenjuje često, jer više softverskih delova u današnjim računarima zavisi od sistema prekida.
Kao što su OS, keš memorija, kontrola tastature... Najveći problem ovde je taj što nije dobro
definisano šta je kritična sekcija. Isključivanje interapta se primenjuje u situacijama kad je u kritičnoj
sekciji mali broj instrukcija. Opštije rešenje treba da zadovolji nekoliko uslova.

 Uzajamna isključivost, ne mogu dva procesa u isto vreme da budu u kritičnoj sekciji.
 Uslov progresa, proces koji nije u kritičnoj sekciji i ne želi da uđe u nju ne treba da ometa druge
procese da uđu u nju.
 Uslov konačnog čekanja, mora da postoji granica koliko jedan proces može da čeka.

Ranije se za ovo tražilo čisto softversko rešenje. Ono može na bilo kojoj platformi da se
implementira. Kasnije se okreće hardverskim rešenjima koja se sastoje iz niza nedeljivih mašnskih
instrukcija.

SOFTVERSKA REŠENJA
Postoji više ovakvih rešenja. Neka je u glavnom programu deklarisana promenljiva naredu
tipa integer koja se postavi na vrednost 1. Onda dva paralelna procesa imaju listing.

Operativni sistemi - predavanja 20


Proces 1 Proces 2
. .
. .
while(naredu == 2); while(naredu == 1);
// Kritična sekcija // Kritična sekcija
naredu = 2; naredu = 1;

Ovo rešenje ispunjava samo uslov uzajamne isključivosti, zove se alternirajući svič. Ovde,
ukoliko jedan proces ne želi da uđe u krtičnu sekciju on onda blokira drugi. Ovo rešenje je dobro za
problem sinhronizacije.
Druga ideja je da se uvede promenljiva moze, tipa boolean.

Proces 1 Proces 2
. .
. .
while(moze == 0); while(moze == 0);
moze = 0; moze = 0;
// Kritična sekcija // Kritična sekcija
moze = 1; moze = 1;
Kod ovog rešenja se javlja problem da nije zadovoljen uslov uzajamne isključivosti. Jedan
proces vidi da je ulaz u kritičnu sekciju slobodan, ali nije stigao da spreči drugi proces da takođe uđe
u kritičnu sekciju. Zato se uvode dve promenljive hoce1 i hoce2 umesto moze, istog tipa.
Proces 1 Proces 2
. .
. .
hoce1 = 1; hoce2 = 1;
while(hoce2); while(hoce1);
// Kritična sekcija // Kritična sekcija
hoce1 = 0; hoce2 = 0;

Kod ovog rešenja se javlja problem ukoliko je jedan proces mnogo brži od drugog. Tada taj
proces može ponovo ući u kritičnu sekciju jer je drugi toliko sporiji da nije stigao da uđe. Ispunjen je
samo prvi uslov. Ovde dolazi do uzajamnog zaključavanja.
1965. se pojavljuje Dekerov algoritam za dva procesa. U praksi se obično radi sa više procesa.
Proces 1 Proces 2
. .
. .
hoce1 = 1; hoce2 = 1;
while(hoce2) while(hoce1)
if(naredu == 2) { if(naredu == 1) {
hoce1 = 0; hoce2 = 0;
while(naredu == 2); while(naredu == 1);
hoce1 = 1; hoce2 = 1;
} }
// Kritična sekcija // Kritična sekcija
naredu = 2; naredu = 1;
hoce1 = 0; hoce2 = 0;

81. se pojavljuje Pitersonov algoritam koji radi slično Dekerovom. U glavnom programu se
deklarišu dve globalne promenljive tipa boolean i jedna tipa integer i njima se dodeli nula.
Paralelni proces ima sledeći listing.

Proces 1 Proces 2
. .
. .

Operativni sistemi - predavanja 21


hoce1 = 1; hoce2 = 1;
naredu = 2; naredu = 1;
while(hoce2 && naredu == 2); while(hoce2 && naredu
== 2);
// Kritična sekcija // Kritična sekcija
hoce1 = 0; hoce2 = 0;

Objašnjenje rada ovog algoritma za razliku od Dekerovog je veoma jednostavno. Da bi se ušlo


u kritičnu sekciju, najavim da hoću, dam prednost drugom i čekam dok ovaj hoće i ima prednost.
Ovde je obezbeđeno da procesi naizmenično ulaze u kritičnu sekciju bez obzira na njihovu brzinu.
Mana ovog algoritma je što je ovo rešenje samo za dva procesa. Takođe, ovo je čisto softversko
rešenje pa je samim tim sporije.

HARDVERSKA REŠENJA
Ideja za hardverska rešenja je da se naprave mašinske instrukcije koje su u stanju da rade dve
stvari istovremeno bez mogućnosti prekida. Te instrukcije su. TAS - Test And Set. FAA - Fetch And
Add. SWAP - zameni mesta.
TAS operiše sa dve promenljive. Sintaksa je A = TAS(B) prebacuje B u A i 1 u B.
Promenljive A i B moraju biti boolean tipa.
FAA operiše sa dve promenljive. Sintaksa je FAA(A, B) prebacuje B u A i B+A u B, gde
je A kod izraza B+A staro A, pre promene vrednosti. Ovde A i B nemoraju biti boolean tipa.
SWAP operiše sa dve promenljive. Sintaksa je SWAP(A, B) menja mesta A i B.
Kod hardverskog rešenja u glavnom programu se deklariše jedna promenljiva tipa
boolean(zauzeto) i setuje se na nulu, a u svakoj proceduri lokalna promenljiva takođe tipa
boolean(nemože).
Proces 1
.
.
nemoze = 1;
while(nemoze)
nemoze = TAS(zauzeto);
// Kritična sekcija
zauzeto = 0;
Ovde se, takođe, umesto TAS može koristiti SWAP. Loša strana rešenja uz korišćenje TAS
instrukcije je ta što je to hardversko rešenje. To je uslovna mana jer nemaju svi CPU ugrađenu tu
instrukciju. Prednost je ta što radi brže i može raditi za n procesa bez ikakve modifikacije. Dok su
predhodni algoritmi bili isključivo za dva procesa. Mana je što nema garancije koliko će neki proces
da čeka. Statistički ovaj algoritam dobro radi, ali teorijski uslov konačnog čekanja nije zadovoljen.
Ukoliko se želi garancija konačnog čekanja algoritam se mora modifikovati. U glavnom
programu se mora deklarisati niz tipa boolean(ceka[n]) koji se setuje na nulu, i promenljiva tipa
integer(zauzeto) koja se setuje na nulu.
Proces i
.
.
ceka[i] = 1;
while(ceka[i] && TAS(zauzeto));
ceka[i] = 0;
// Kritična sekcija
j = i+1;
while(j != i && ceka[j] == 0)
j = (j+1) mod n;
if(i == j)
zauzeto = 0;
else

Operativni sistemi - predavanja 22


ceka[j] = 0;
Ovo rešenje je sporije. Procedura je neefikasna jer svima nudi da pređu u kritičnu sekciju, što
dovodi do trošenja CPU vremena. Iako ovaj algoritam garantuje konačno čekanje on se ne koristi u
praksi.
Uopštenje Pitersonovog algoritma za n procesa predstavlja Lamportov algoritam(pekarski
algoritam). Za implementaciju ovog rešenja biće nam potrebno par definicija. Definišemo da je (A,B)
< (C,D) ako A<C ili A=C i B<D. max(A1, A2, ..., An) = K takvo da je K  Ai , i = 1..n. U glavnom
programu se deklariše niz tipa integer(broj[n]) i niz tipa boolean(uzima[n]) i oba se setuju na
nulu. Listing procedure.

Proces i
.
.
uzima[i] = 1;
broj[i] = max(broj[0], ..., broj[n-1]);
uzima[i] = 0;
for(j=0; j<n; j++) {
while(uzima[j]);
while(broj[j] != 0 && ((broj[j], j) < (broj[i], i));
}
// Kritična sekcija
broj[i] = 0;

Postoje razni problemi koji se rešavaju ovim algoritmima. Kao što je problem ograničenog
bafera. Jedan proces vrši upis u bafer dok drugi čita. Mora se voditi računa da se sadržaj bafera ne
prepiše pre nego što drugi proces pročita, a takođe da proces koji čita ne pročita više puta isti sadržaj.
Ovaj i slični problemi se moraju rešiti prilikom izgradnje OS.

SEMAFORE
Semafore predstavljaju način da se Dekerov algoritam lepše upakuje. Svi algoritmi se
zasnijvaju na ideji aktivnog čekanja, što dovodi do slabijeg iskorišćenja CPU. Zato se dolazi na ideju
da kad proces ulazi u mrtvu petlju oslobodi CPU, a kad bude slobodan da uđe u kritičnu sekciju
nastavi sa korišćenjem CPU vremena. Semafore rešavaju problem aktivnog čekanja, tako je statistički
ispalo. Aktivno čekanje nije uvek zlo. Ako je aktivno čekanje vrlo kratko onda nema smisla ukljanati
ga. Generalna ideja je da aktivno čekanje treba uklanjati, ali ne po svaku cenu.
Semafora je struktura koja može da blokira proces do određenog vremena i da ga propusti
posle određenog vremena. Jedna od definicija semafore je ta da je semafora specijalna varijabla nad
kojom mogu da se vrše samo dve operacije P i V, pored standardnih operacija kreiranja i uništavanja.
Za ove operacije se koriste još imena down(s) i up(s), ili wait(s) i signal(s). Operacija P smanjuje
varijablu za jedan do nule, a ako je nula ništa ne radi. Operacija V povećava za jedan varijablu do
jedan, a ako je jedan ništa ne radi. Varijabla S je zaštićena, kada jedan proces radi sa njom ni jedan
drugi nema pristup. Ako se semafora implementira kao deo kernela onda se definiše kao slog koji se
sastoji iz dva dela. Prva promenljiva je tipa integer, a druga je lista procesa koji čekaju. Ovim se
isključuje aktivno čekanje. Tada operacije P i V imaju sledeći oblik.
P: s--;
if(s<0) { // Proces traži da uđe u kritičnu sekciju
// Proces se stavlja na listu i čeka, a o ostalom se brine kernel
}
V: s++;
if(s0) {
// Skida se jedan proces sa liste i javlja se kernelu da taj proces propusti
}

Operativni sistemi - predavanja 23


Jedan od klasičnih problema je problem kružnog bafera. To je niz sa dva pokazivača. Za ovo
rešenje je važno da se pazi da pokazivač procesa koji upisuje bude uvek ispred pokazivača procesa
koji čita.
Proces Proizvođač Proces Konzumer
. .
while(kolicina == n); while(kolicina == 0);
// Stavi element // Uzme element
kolicina++; kolicina--;

Ovde se javlja problem prilikom rada sa promenljivom kolicina, jer ako je njena vrednost 5 po
obavaljanju inkrementa(dekrementa) ne može se tačno predvideti njena vrednost. Kako se ove
operacije sastoje od nekoliko mašinskih instrukcija prekid neke od njih može dovesti do pogrešnog
rezultata tako da promenljiva može uzeti vrednosti 4,5,6. Rad sa promenljivom kolicina se mora
ograditi u kritičnu sekciju.
Modifikacija ovog rešenja se može napisati uz pomoć semafora. Potrebna je jedna semafora
tipa boolean koja obezbeđuje da samo jedan proces može da radi sa baferom. Pazi se da se bafer ne
prepuni ili ne čita prazan. Potrebne su još dve brojačke semafore, jedna broji prazna, a druga puna
mesta. Imena semafora će biti mutex(uobičajeno ime za semaforu koja obezbeđuje ekskluzivan
pristup), pun, prazan.

Glavni Program
mutex = 1;
pun = 0;
prazan = n;
parbegin
proizvođač;
konzumer;
parend;

Proces Proizvođač Proces Konzumer


. .
proizvede(); .
down(prazan); down(pun);
down(mutex); down(mutex);
stavi_element(); uzme_element();
up(mutex); up(mutex);
up(pun); up(prazan);

Prilikom stavljanja ili uzimanja elementa iz bafera mora se još paziti i na pokazivače i njihovu
poziciju. Modifikacija ovog problema je problem čitača i pisača. Dok jedan pisač radi sa bazom ne
sme više ni jedan drugi proces da pristupa bazi. Dok može više čitača da pristupa bazi, ali ne sme ni
jedan pisač. Ovo rešenje pored mutex semafore sadrži i mpis koja ograničava pristup čitaču, i
varijablu koja broji čitače. Mpis = 1, brcit = 0.
Proces Čitač Proces Pisač
. .
down(mutex); down(mpis);
brcit++; piše;
if(brcit == 1) up(mpis);
down(mpis);
up(mutex);
čita;
down(mutex);
brcit--;
if(brcit == 0)
up(mpis);

Operativni sistemi - predavanja 24


up(mutex);
Ovde je sinhronizacija između pisača jednostavna. Problem je taj što čitači imaju potpuni
prioritet što može dovesti do predugačkog čekanja čitača.
Realizacija brojačke semafore pomoću dve binarne. Potrebne su dve semafore s1 i s2 i jedna
varijabla c.
down(c) up(c)
down(s1); down(s1);
c--; c++;
if(c<0) { if(c0)
up(s1); up(s2);
down(s2); else
} up(s1);
up(s1);

KRITIČNI REGIONI
Kritična Sekcija je deo koda kome može imati pristup samo jedan proces. Kritični Region je
implementacija pristupa Kritičnoj Sekciji na višem PJ. Ovde se koriste deljene varijable. Deklaracija
se vrši.

var x : shared tip


var bafer : shared record
skladiste : array [0..n-1] of tip;
slsl, nruz, imaih : integer
end.

Ovo je primer deklarisanja deljenih varijabli gde su slsl i nruz sledeći slobodan i na redu za
uzimanje iz primera procedura za proizvođača i potrošača. Pristup deljenim varijablama je moguć
samo u delu programa koji je označen sa službenom rečju region.

region x while (true) s1;


region x while (true) s2;

U toku izvršavanja s1 i s2 ne mogu biti prekinuti(atomsko rešenje), ali se ne garantuje u


kojem će se redosledu izvršiti. Ako s1 i s2 povećavaju x za jedan posle izvršenja oba procesa x će
sigurno biti uvećano za dva, ne može se javiti mogućnost da bude uvećano samo za jedan. Kod
ovakvog rešenja smanjuje se mogućnost greške.

Proces Proizvođač Proces Potrošač


region bafer while(imaih<n) { region bafer
while(imaih>0) {
skladiste[slsl] = novi_pod; novi_uzeti =
skladiste[nruz]; slsl++ mod n; nruz++
mod n;
imaih++; imaih--;
} }

MONITORI
Kod rešenja sa monitorima koriste se specijalne varijable koje su uslovne, tipa condition.
Nad njima su definisane samo dve operacije, wait i signal. Sintaksa ovih operacija je x :
wait ili wait(x). Ovo nisu brojačke semafore. Signal budi proces ako neki proces čeka, a ako ne
signal će biti izgubljen. Monitori su strukture koje imaju procedure za inicijalizaciju, rad sa signalima
i procesima koji čekaju da budu probuđeni.
Slanje prouka se koristi kod povezanih sistema sa posebnim CPU koji ne dele istu memoriju.
Ovde se javlja veliki broj problema koje treba rešiti. Kome se šalje poruka, na čije ime, da li je

Operativni sistemi - predavanja 25


dozvoljena različita dužina poruka, da li će primaoc da primi poruku... Rešenje se svodi na korišćenje
Internet adresa. Ukoliko širi krug kompjutera razmenjuje poruke uvode se i domeni.
Rešenje problema potrošača i proizvođača uz pomoć monitora.

monitor pro_pot
pun, prazan : condition;
imaih : integer;

proces entry stavi { proces entry uzmi


{
if(imaih == n) if(imaih == 0)
wait(pun); wait(pun);
stavinovi(); uzminovi();
imaih++; imaih--;
if(imaih) if(imaih == n-1)
signal(prazan); signal(pun);
} }

IPC (Inter Processor Communication) su standardni problemi ovog tipa. Jedan od zadataka je.
Za okruglim stolom sedi pet filozofa i pred svakim je tanjir, a između svaka dva je viljuška. Da bi
neko jeo treba da ima dve viljuške. Potrebno je simulirati rad filozofa. (malo razmišlja, malo jede).
Potrebno je deklarisati niz s(0..4) tipa semafora, mutex i niz stanje(0..4).

Proces i
while(true) {
razmislja();
uzmeviljuske(i);
jede();
vrativiljuske(i);
end;
parbegin
filozof(0);
.
filozof(4);
parend.

Proces uzmeviljuske(i) Proces vrativiljuske(i)


down(mutex); down(mutex);
stanje[i] = gladan; stanje[i] = razmislja;
test(i); test(levi);
up(mutex); test(desni);
down(s[i]); up(mutex);

Proces Test(i)
if(stanje[i] == gladan && stanje[levi] != jede &&
stanje[desni] !=
jede)
up(s[i]);

Ovde se mora uvesti neka vrsta prioriteta jer trojica mogu da izgladne drugu dvojicu.
Ovim je obezbeđen paralelizam da mogu dvojica da jedu, i da ne može jedan samo da se
smenjuje. Ne može se desiti da jedan, ako je brz, prestane da jede, ali opet brzo uzme viljuške, a onaj
drugi koji je spor neće moći da jede, jer ma koliko da je spor on će jednog trenutka doći do toga da
pokuša da uzme viljuške pa će proći proces test i time da najavi da he gladan te da vidi levo i desno

Operativni sistemi - predavanja 26


da li su slobodne viljuške. Ako nema viljuški onda će on da najavi čekanje, ali sada pošto je najavio
čekanje ima prednost pošto drugi spuste viljuške.
Ako su dva nesusedna brza i zgodno se izmenjuju oni mogu da izgladne onog između sebe.
Oni ne mogu da monopolizuju sami da stalno jedu jer moraju da nude levom i desnom, ali oni mogu
da rade to da uvek daju levom i kad on zavrđi oni opet da dobiju viljuške. Izgleda da onaj između njih
nikad neće moći da jede.

Kružni bafer je sličan primeru sa proizvođačem i potrošačem. Ako pisač hoće da upiše u bafer
dužine n 10 000 podataka njegov brojač će ići od 1 do 10 000 po modulu n. isto tako će ići i brojač
čitača, sa ograničenjem da što mora biti manji od brojača pisača. Takođe brojač čitača ne sme da
zaostane za brojačem pisača više od n jer će pisač upisati podatke preko podataka koje čitač još nije
pročitao.

Problem čitača i pisača. Često se javlja tamo gde ima više procesa zainteresovanih za čitanje i
pisanje. Praksa pokazuje da čitača može da ima više, a pisač može da bude samo jedan u jedno
vreme, a ni čitači ne smeju u to vreme da čitaju jer će da pročitaju pogrešno.
Postoje razna rešenja kojim redosledom da se zadovoljavaju zahtevi koji pristignu. Jedna
varijanta je da se pisačima da apsolutna prednost, da se svi durgi procesi prekidaju kada dođe zahtev
za pisanje. To nije najbolje rešenje jer čitanje ne traje dugo i nema smislga prekidati ga. Možemo da
uvedemo da oni što čitaju ne mogu da budu prekinuti. Problem je ako mnogo čitača jedan za drugim
zahtevaju čitanje, time sprečavaju pisača da piše. Zato se pribegava kompromisnom rešenju. Oni koji
stignu čekaju da završe svi koji su ispred njih, a čekaju.
Problem je kada pisač izađe kome da da prednost. Standardnije rešenje je da se prednost da
čitaču jer ako prednost da pisaču, pisača može da bude mnogo i da čitača dugo drže blokiranog.
Rešenje je da se čitači koji su stigli pre pisača ne prekidaju.

Dead Lock
Proces je u Dead Lock-u ako čeka na događaj koji se nikada neće desiti. Ili ako proširimo na sistem:
sistem je blokiran ako sadrži proces koji je blokiran. To se obično dešava kada jedan proces drži ono što je
potrebno durgom, a drugi ono što je potrbno prvom. Treba definisati neke resurse koji se zovu REUSABLE.
Resursi su hardverski (disk, memorija, procesor) i softverski (semafore, datoteke, slogovi u bazama). Oni se
dele na:
PREEMPTIVE – koji se mogu prekidati
NON-PREEMPTIVE – koji se ne mogu prekidati

Ovi prvi su CPU, memorija. Procesu nije bitno da li će dobiti vreme sada ili malo kasnije i da
li će dobiti komad memorije na ovom ili onom mestu. Njemu je samo važno da dobije određenu
količinu vremena i memorije. Tipičan primer drugih resursa je štampač, jer ne sme da se prekida
pošto rezultati štampanja ne bi imali smisla. Do blokiranja može doći sa takvim uređajima. Postoje
četiri neophodna uslova koji dovode do blokiranja:

 Mutual Exclusion – u jednom momentu jedan resurs može da drži samo jedan proces
 Wait and Hold – proces drži resurse sa kojima radi, a yahteva one koji mu trebaju. Štampa
na štampaču, a zahteva podatke iz baze.
 No Preemtion – jedan posao se vrši neprekidno
 Kružno Čekanje – postoji lanac procesa koji čine krug sa uslovima čekanja. Jedan drži
neke resurse, a čeka čeka neke durge koje drži neko durgi, a taj drugi zahteva neke koje
drži neko treći… poslednji zahteva one resurse koje drži onaj prvi.

Ako se bilo koji od ovih uslova ukloni neće doći do blokiranja. Postoje razni stepeni rešenja za
otklanjanje blokiranja.

 Sprečavanje – to su duboke sistemske mere kojima se isključuje mogućnost blokiranja


 Izbegavanje – to je nešto blaža forma. Nije sve u napred osigurano da ne dođe do
blokiranja

Operativni sistemi - predavanja 27


 Detekcija i oporavljanje – obuhvata otkrivanje zablokiranosti, uništavanje procesa koji su
blokirani i eventualno, ako je to moguće, spašavanje nečega od njihovog prethodnog rada
 Ne preduzimanje ničega – statistički razumno ako se Dead Lock retko pojavljuje i ako se
ne radi o mnogo važnim poslovima

Postoje razne politike kako se može izbeći blokiranje koje se svode na eliminisanje jednog od tri
uslova pretposlednje liste. Prvi uslov se ne uzima u obzir jer se ne može eliminisati. Moguće politike su:

 Ne daj nikad nikome ništa – do blokiranja neće doći zato jer niko ništa ne radi ali to je
isuviše visoka cena
 Serijalizacija – mogu da idu jedan za drugim. Nekakav red postoji, ali je slaba
iskorišćenost resursa
 Dodeljivanje svih resursa odjednom – svaki proces ima listu resursa koje zahteva. Ako se
procesu može dodeliti sve što zahteva onda će to i da mu se dodeli, ako ne onda će da čeka
momenat kad to bude moguće
 Rad sa klasama resursa – svakoj klasi resursa se dodeljije jedan broj. Proces koji drži
resurse nekih klasa može da dobije samo resurse iz viših klasa.
 Bankervo algoritam – prilično je liberalan, ali je više od teoretskog značaja. Dobio je ime
jer liči na sistem davanja zajmova. Bitno za ovaj algoritam je koncept sigurnoga stanja.
Sigurno stanje je ako postoji način da procesi završe svoj posao. Ne znači da ako stanje
nije sigurno da će doći do blokiranja, već da može doći. Ovaj algoritam je teorijski dobar,
ali u praksi ima ozbiljna ograničenja. Svi procesi u napred moraju da saopšte svoje
maksimalne zahteve i onda će na osnovu toga da im se dodeljuju resursi, a realni procesi
unapred takve stvari ne znaju.

Otkrivanje Dead Locka


Rešenje je dobijeno korišćenjem grafova. Neka nam procese predstavljaju kvadratići, a resurse
krugovi, a klase resursa veliki krugovi. Ako neko nešto drži onda ide strelica od kružića pre njemu. Šta ko drži
predstavlja se strelicom od kruga ka procesu. Procedura za otkrivanje blokiranja se sastoji u traženju procesa
koji može da bude zadovoljen. Ako se nađe proces koji može biti zadovoljen onda će on jednog trenutka da
završi i otpusti ono što je držao tako da graf može da se redukuje. Ako se takvim postupkom graf redukuje na
nulu onda sistem nije blokiran, inače se javlja blokiranje pa je moguće jedan od zablokiranih procesa uništiti.
Ovo se može programski implementirati.

Upravljanje Procesorom
CPU spada u priemtiv resurs (koji mogu da se prekidaju). Da bi se CPU prebacio sa jednog procesa
na drugi mora se uraditi context switching(pamćene svih registara, akumulatora, flagova…). Kod starijih CPU
programer je morao svaku od ovih operacija posebno da obezbedi, a kod novijih postoji jedna instrukcija koja
obavi sve to.
U memoriji je napunjeno više programa koji trebaju biti izvršeni i sada je pitanje na koji
način. Dispečar niskog nivoa određuje kakvu politiku treba voditi pri dodeljivanju CPU procesima.
On odlučuje kome će dodeliti svaku sledeću mikrosekundu.
Postoje razni kriterijumi na osnovu kojih on dodeljuje CPU raznim procesima. Jedan od njih
je pravednost, što znači da niko ne čeka predugo. Sledeći je maksimalna iskorišćenost sistema ili
maksimalni protok, da računar obradi što više poslova za izvesno vreme. Takođe se može zahtevati
maksimalni odziv sistema. Ako ima više procesa da trenutno izvršava njihove zahteve. Važno je i
blago padanje sistema, što podrazumeva da sistem postepeno reaguje na preopterećenost. Nije dobro
da kad se preoptereti odmah padne. Postepeno padanje podrazumeva sve slabije vreme odziva. Do
najboljeg rešenja se ne može doći maksimalnim zadovoljenjem kriterijuma, jer su neki od njih u
izvesnom smislu kontradiktorni. Dobro rešenje mora imati kompromisni karakter koje zavisi od
okruženja sistema, tipa procesa… Dva kriterijuma su uvek suprotstavljena. To su maksimizovanje
propusne moći i minimizovanje odziva. Prvi zahtev se zadovoljava tako što se svi resursi maksimalno
iskoriste(preopterete). Drugi u spurotnom slučaju. Najbolji odziv će viti ako resursi nisu uposleni.

Prva i najjednostavnija politika dodeljivanja CPU je da se CPU dodeljuje procesima kako


pristižu. FIFO. To je politika bez prekidanja – kada jedan proces dobije resurse drži ih sve dok ne

Operativni sistemi - predavanja 28


završi rad. Red procesa se formira kako koji zahtev pristiže i oni se opslužuju tim redom. Mane su
neefikasnost i nepravednost.

Druga politika, koja je takođe bez prekida, je da se prednost da kraćim procesima u cilju da se
minimizuje ukupno vreme čekanja. Neka je jedan proces dužine N, a drugi 0,1N. Drugi provede u
sistemu 0,1N, a prvi 1,1N sekundi, pa će prosečno vreme provedeno u sistemu biti 0,6N sekundi, dok
je u spurotnom 1,05N sekundi.
Može se uvesti i druga mera pravednosti. Umesto prosečnog vremena čekanja uvodimo
prosečno nezadovoljstvo. Stepen nezdovoljstva će da zavisi od toga koliko dugo će da traje neki
proces. Matematički se to može izraziti kao (w+t)/t gde je; w – vreme provedeno u sistemu; t – vreme
koje je proces trebao da provede u sistemu. Politika favorizovanja kraćih poslovazove se SJF.
Sledeća politika je SRTF. Na red dolazi onaj koji ima najkraće preostalo vreme. Ako neki
proces radi i pojavi se neki koji će da radi kraće nego što je ovom preostalo, onda taj što je radio ide u
red, a taj kraći dobija CPU dok ne završi ili dok se ne pojavi neki treći koji će raditi kraće vreme nego
onaj što se trenutno izvršava. Teoretski ovo je najoptimalnija politika. Ipak, ovde su zanemareni neki
elementi iz stvarnosti pa zato prethodne politike neće biti tako dobre. Zanemarno je vreme
prekuljučivanja sa jednog procesa na drugi. U prkasi se najčešće ne zna koliko će neki proces da traje.
60-ih kada je izmišljen time sharing prva ideja je bila da se svakom od procesa da po mali
komad vremena. Ta politika se zove round robin. U praksi se pokazalo da ona favorizuje kratke
procese ne znajući da su kratki.
Moguće su još neke druge razne discipline od kojih se jedna svodi na princip stepena
nezadovoljstva. Radi se o tome da se prednost da onome čiji je stepen nezadovoljstva najveći. Ta
politika daje prioritet onima koji duže čekaju, ali i kraćim procesima.
Često korišćena politika u starija vremena je bio sistem višeslojnih prioritetnih redova, gde
postoji jedan red visokog prioriteta, gde se dobijaju mali kvantumi, pa sledeći višeg prioriteta gde se
dobijaju veći kvantumi… Proces kruži kroz jedan sloj određeno vreme, pa onda propadne u niži sloj
ako nije završio. Svim procesima se na početku veruje da su kratki, ako nisu onda propadaju u niži
sloj. Proces u nižim slojevima dobijaju ređe vreme, ali u većim kvantumima. Tu se postavlja pitanje
nakon kog vremena će procesi da propadaju iz jednog u drugi sloj. Jedna politika je da red nižeg
prioriteta može da dobije CPU samo kada je red iznad prazan.
Arhitektura Procesora
Sam CPU sadrži 14 registara (kod PC-a). Ima 4 akumulatora koji 16-bitni i zovu se A, B, C i D. pošto
oni mogu da se koriste i kao 8-bitni, da bi naglasili da su 16-bitni zovu se AX, BX, CX i DX. Kao osmobitni se
koriste AH, AL, BH, BL… Od CPU 80386 pa na dalje oni su 32-bitni i zovu se EAX, EBX, ECX i EDX.
Akumulatori među sobom nisu sasvim ekvivalentni već svaki od njih ima još po neku posebnu namenu.
CPU ima i stek pointere SP i BP(Base Pointer). SP je sistemski i nesme da se dira, BP služi za
neki pomoćni stek. Nad stekovima su definisane operacije push i pop, pa se on po tome razlikuje od
ostalih registara.
Postoje dva registra koji se nazivaju string-index registri i služe za neke operacije sa
stringovima i neke druge stvari. To su index-registri i zovu se SI(source index) i DI(destination
index). Koriste se kada treba niz obrnuti pa se jedan koristi za polazni a drugi za rezultujući niz.
Sledeća četiri registra služe za adresaciju i zovu se segment registri. Njima se reguliše pristup
memoriji. Oni se pojedinačno zovu:
Code Segment koji pokazuje gde se nalaze programi
Data Segment koji pokazuje na podatke
Stack Segment za stek
Extra Segment se koristi za šta mi hoćemo

Postoje još dva registra i to su:


Instruction Pointer tj. Brojač naredbi
Flags u kome se nalaze flegovi

Programiranje na mašinskom jeziku sastoji se od pozivanja ugrađenih funkcija i punjenja


registra. Proizvođač CPU obezbeđuje tabelu dostupnih funkcija i njihovih efekata, a programer ih
samo poziva kao interapte.

Operativni sistemi - predavanja 29


Upravljanje memorijom
Memorija je neophodan resurs. CPU i memorija čine osnonve komponente računara.
Memorija može da se podeli na: radnu i fiksnu. U radnoj se nalaze neki podaci sa kojima se
radi. Stvari se suštinski nisu izmenile od 1945. Organizacija memorije i komunikacija u njoj ostale su
iste više decenija do danas. Menjao se kapacitet i brzina memorije. Stvar koja se od početka nije
menjala je to da je memorija organizovana u bajtove, a najmanja jedinica memorije kojom može da se
manipuliše je bit. Bitovi su mogli i drugačije da budu organizovani, ali izabran je sistem da jedan bajt
je osam bitova.
Bajt nije dovoljno velika jedinica pa se više bajtova udružuju u veće memorijske jedinice koje
se zovu reči. Već 60-ih 32-bitna reč je predstavljala standard u velikim računarima. Posle toga su se
pojavili PC koji su u početku bili 8-bitni, zatim 16-bitni, da bi danas standard bio 32-bitni računar.
Na prvi pogled se čini da su 16-bitni računari najpogodniji jer se integer prestavljao i
predstavlja sa 2 bajta. To je zadovljavalo brojače, a ranije se računar koristio samo u svrhe
izračunavanja. Kasnije dolazi do obrade znakova pa se uvode posebni kodovi, kao što je ASCII za
koji je potreban samo jedan bajt. Sa 32 bita mogu se predstavljati celi brojevi i brojevi u pokretnom
zarezu. Sa ovakvim predstavljanjem brojeva praktične potrebe se u potpunosti pokrivaju. U poslednje
vreme se pojavljuju 64-bitni računari sa moćnim CPU.

Razlika između CISC-a i RISC-a


RISC je u prevodu skraćenica od redukovani set instrukcija, a CISC od kompletni set instrukcija. U
CISC-u postoji veliki set instrukcija, razni adresni modovi. Kod RISC-a je osnovna ideja bila da se broj
instrukcija smanji, a osnovni moto je jedna instrukcija jedan ciklus. Isntrukcija za računar nije osnovna jedinica,
već takt, ali za programera je instrukcija osnovna jedinica, pa se u RISC-u išlo na to da bude jedna instrukcija
jedan takt. Takođe imaju prednost da mogu da učitaju nekoliko instrukcija unapred, pa da imaju paralelno
izvršavanje. U praksi se sada dobija nekakva kombinacija. CISC nije odumro, ali ni RISC nije preovladao.
Danas CISC u sebi sadrži neke osobine RISC-a, tako da su današnji CISC-ovi daleko od onih u prošlosti.
Sa idejom da se instrukcije na neki način redukuju, dobija na značaju ideja o 64-bitnom
registru, jer pomaže kada se mnogo toga učitva odjedanput, paralelnog izvršavanja i analiziranja i
jednog i drugog.

6. Upravljanje memorijom
Kod sistema koji mogu da imaju više procesa u memoriji, ti procesi dele memoriju kao jedan od
najvažnijih resursa računara. U ovoj glavi ćemo razmotriti različite načine za upravljanje memorijom.
Algoritmi za upravljanje memorijom variraju od primitivnog pristupa “gole” mašine do strategija
straničenja i segmentacije. Svaki od ovih pristupa ima svoje prednosti i mane.
Memorija je jedan od najbitnijih resursa za rad modernih računarskih sistema. Kao što se može videti
sa slike 6.1, i CPU i U/I sistem komuniciraju sa memorijom.

Sl. 6.1. Centralni položaj memorije u računarskom sistemu.


Memorija je dugačak niz reči ili bajtova koji imaju svoje adrese. Interakcija sa memorijom se odvija
kroz niz čitanja ili upisa u lokacije sa određenom adresom. CPU pribavlja instrukcije i podatke iz
memorije i smešta podatke u memoriju.
U većini slučajeva korisnički program prolazi kroz nekoliko koraka pre svog izvršenja. Adrese se
mogu predstavljati na različite načine u toku tih koraka. Adrese u izvornom programu su u opštem
slučaju simboličke (nazivi promenljivih). Kompilator obično povezuje te simboličke adrese sa
relokatibilnim adresama. Editor veza ili punilac povezuje te relokatibilne adrese sa apsolutnim
adresama. Svako povezivanje je preslikavanje iz jednog adresnog prostora u drugi.
Program se na kraju preslika u apsolutne adrese i napuni u memoriju radi izvršenja. Tokom izvršenja
programa pristupa se njegovim instrukcijama i podacima generisanjem njihovih apsolutnih adresa.
Kada se program završi njemu dodeljen memorijski prostor se proglasi slobodnim i naredni program
može da se napuni i izvrši.

Operativni sistemi - predavanja 30


Tipičan ciklus izvršenja instrukcije će, na primer, najpre pribaviti instrukciju iz memorije. Instrukcija
se dekodira i po potrebi pribavljaju operandi iz memorije. Posle izvršenja instrukcije nad operandima
rezultati se smeštaju nazad u memoriju. Zapazimo da jedinica memorije vidi samo niz memorijskih
adresa ne znajući kako su one generisane (koji adresni način rada je upotrebljen) i šta predstavljaju
(podatke ili instrukcije). Prema tome, možemo da zanemarimo kako program generiše memorijske
adrese, već nas interesuje sam niz memorijskih adresa koje generiše program koji se izvršava.

6.1 Gola mašina


Do sada najjednostavniji algoritam za upravljanje memorijom je nepostojeći. Korisnik ima na
raspolaganju golu mašinu i ima potpunu kontrolu nad čitavim memorijskim prostorom (slika 6.2).
Ovaj pristup zaista ima neke prednosti. On obezbeđuje maksimalnu fleksibilnost korisniku i
maksimalno je jednostavan uz minimalnu cenu. Ne postoji potreba za posebnim hardverom niti za
sistemskim softverom.
Međutim, ovaj sistem ima i ozbiljne nedostatke, jer ne pruža nikakve usluge. Korisnik ima potpuno
upravljanje nad računarom, ali operativni sistem nema upravljanje nad prekidima, nema rezidentnog
monitora da obrađuje sistemske pozive ili greške, i nema prostora dodeljenog sekvenciranju
upravljačkih kartica ili poslova.
Zbog svojih ograničenja se ovaj pristup koristi samo kod specijalnih sistema gde korisnici zahtevaju
fleksibilnost i i jednostavnost i gde će korisnici želeti da programiraju sopstvene rutine za podrušku.
0
Korisnik
32K
Sl. 6.2. Gola mašina.

6.2 Rezidentni monitor


Sledeća jednostavna šema je da se memorija podeli na dva dela, jedan za korisnika i jedan za
rezidentni monitor operativnog sistema (slika 6.3). Postoji mogućnost da se rezidentni monitor smesti
ili na početak ili na kraj memorije. Glavni faktor koji utiče na odluku o tome je u opštem slučaju
lokacija vektora prekida. Kako je vektor prekida često na početku memorije, obično se i rezidentni
monitor smešta na početak memorije.

6.2.1 Zaštitni hardver


Ako se monitor nalazi u nižoj memorijskoj oblasti a korisnički program koji se izvršava u višoj,
moramo da zaštitimo kôd i podatke monitora od slučajnih ili namernih izmena od strane korisničkog
programa. Ovu zaštitu pruža hardver i može se implementirati na nekoliko načina. Opšti pristup je
prikazan na slici 6.4. Svaka adresa koju generiše korisnički program se poredi sa sadržajem zaštitnog
registra. Ukoliko je ona manja od sadržaja zaštitnog registra generiše se trap (adresna greška) i
operativni sistem preduzima odgovarajuće akcije (obično se terminira korisnički program uz
izdavanje odgovarajuće poruke o grešci).

Operativni sistemi - predavanja 31


Svaka memorijska referenca koju generiše korisnički program mora da se proveri što usporava
pristup memoriji. Operativni sistem koji se izvršava u monitorkom načinu rada ima neograničeni
pristup i monitorskoj i korisničkoj memoriji.
Načini na koje se implementira zaštitni registar se razlikuju. Jedan pristup je da se u hardver ugradi
konstantna vrednost zaštitne adrese. Ovo rešenje nije fleksibilno pa se često koristi poseban zaštitni
registar koji sadrži zaštitnu adresu. Vrednost u zaštitnom registru može se menjati privilegovanim
instrukcijama u monitorskom načinu rada.

6.2.2 Relokacija
Sledeći problem koji treba razmotriti je punjenje korisničkog programa. Iako adresni prostor počinje
od adrese 0, prva adresa u korisničkom programu nije 0, već prva adresa posle vrednosti u zaštitnom
registru. Ova promena može da utiče na adrese korišćene u korisničkom programu. Povezivanje
instrukcija i podataka sa memorijskim adresama može se izvršiti ili u vreme kompilacije ili u vreme
punjenja. Ako je vrednost zaštitne adrese poznata u vreme kompilacije može se generisati apsolutni
kôd. Ovaj kôd će početi od zaštitne adrese i prostiraće se nagore. Međutim, ako se vrednost zaštitne
adrese promeni potrebno je ponovno prevođenje programa. Alternativa je da kompilator generiše
relokatibilni kôd. Tada se povezivanje odlaže do momenta punjenja. U tom slučaju, kod promene
zaštitne adrese, potrebno je samo ponovno punjenje programa. U oba slučaja, vrednost zaštitne adrese
mora da bude statička tokom izvršenja programa. Ali, ima slučajeva
kada je poželjno da se menja veličina monitora tokom izvršenja programa, a time i zaštitna adresa.
Takav kôd se ponekad naziva tranzientnimonitorski kôd.

Postoje dva načina da se modifikuje osnovna šema da bi se omogućila dinamička promena veličine
monitora. Operativni sitem računara PDP-11 koristio je pristup prikazan na slici 6.5. Korisnički
program se punio u višu memoriju prema graničnoj adresi. Neiskorišćeni prostor u sredini
omogućavao je širenje bilo monitora bilo korisničkog programa.
Opštiji pristup, korišćen kod računara CDC 6600, je da se odloži povezivanje adresa do vremena
izvršenja. Ova šema dinamičke realokacije zahteva nešto drugačiju hardversku podršku, kao što je

Operativni sistemi - predavanja 32


prikazano na slici 6.6. Zaštitni registar se sada zove relokacioniili bazniregistar. Vrednost u baznom
registru se dodaje svakoj adresi koju generiše korisnički proces u momentu kada se pošalje u
memoriju. Uočimo da korisnik nikada ne vidi stvarne fizičke adrese. Korisnički program radi sa
logičkimadresama, dok hardver za memorijsko preslikavanje pretvara logičke adrese u fizičke.
Kod ovog hardvera promena u vrednosti granične adrese zahteva jedino izmenu baznog registra i
premeštanje korisničke memorije na korektne lokacije u odnosu na novu vrednost granične adrese. Sa
jedne strane, troši se značajno vreme za kopiranje memorije, ali je moguća izmena granične adrese u
svakom trenutku.

Primetimo da ovde imamo dva različita tipa adresa: logičke (u opsegu od 0 do max) i fizičke (u
opsegu od R+0 do R+max ako je R vrednost granične adrese). Korisnik generiše jedino logičke
adrese i misli da program radi na lokacijama od 0 do max. Operativni sistem može da pristupa
fizičkoj memoriji direktno u monitorskom režimu rada. Sve informacije koje se prenose od
korisničkog programa operativnom sistemu moraju se eksplicitno relocirati od strane operativog
sistema pre nego što se upotrebe.
Koncept logičkog adresnog prostora koji se preslikava u fizički adresni prostor je ključan za pravilno
upravljanje memorijom.

6.3 Prebacivanje (swapping)


Upravljanje memorijom sa rezidentnim monitorom nije mnogo upotrebljivo obzirom da je po svojoj
prirodi jednokorisnička šema. Ipak, to je bila osnovna šema i u prva dva tajm-šering sistema: CTSS i
Q-32. Ovi sistemi su koristili rezidentni monitor pri čemi je ostatak memorije bio raspoloživ
korisniku koji se trenutno izvršavao. Kada se prelazilo na sledećeg korisnika tekući sadržaj korisničke
memorije se upisivao na sekundarni memorijski medijum (disk ili doboš) a memorija sledećeg
korisnika se učitavala. Ova šema se naziva prebacivanje ili swapping(slika 6.7).
Prebacivanje zahteva brzu jedinicu sekundarne memorije, koja je dovoljno velika da prihvati
memorijske slke za sve korisnike, a da je pri tom moguć direktan pristup tim memorijskim slikama.
Red spremnih procesa se sastoji od svih procesa čije su memorijske slike na sekundarnom medijumu i
koji su spremni za izvršenje. Posebna sistemska promenljiva ukazuje na to koji je proces trenutno u
memoriji. Kada planer procesa odluči da izvrši neki proces on poziva dispečera. Dispečer proverava
da li je taj proces u memoriji; ako nije, prebacuje proces koji je trenutno u memoriji na disk a učitava
željeni proces. Potom se vrši punjenje registara kao i obično i upravljanje prenosi izabranom procesu.
Očigledno je da je vreme potrebno za prebacivanje konteksta prilično veliko. Da bi iskorišćenost
CPU-a bila bolja poželjno je da vremena trajanja CPU aktivnosti procesa budu znatno duža od
vremena prebacivanja. Glavna komponenta vremena potrebnog za prebacivanje konteksta je vreme
prenosa, a ono je direktno proporcionalno količini memorije koja se prebacuje. Stoga se teži da se
prebacuje samo onaj deo memorije koji je zaista potreban (dužina korisničkog programa može biti
manja nego što je iznos memorije namenjen korisničkim programima). Osim ovoga, efikasnost
prebacivanja se poboljšava sa poboljšanjem performansi jedinica sekundarnih medijuma.

Operativni sistemi - predavanja 33


Sekundarna memorija
Sl. 6.7. Prebacivanje dva korisnika na sekundarni memorijski medijum.
Efekat prebacivanja u odnosu na vreme prebacivanja konteksta se može dalje poboljšati preklapanjem
prebacivanja i izvršenja programa. Posmatrajmo sliku 6.8. Cilj je da se preklopi prebacivanje jednog
procesa sa izvršenjem drugog. Tako CPU nije besposlen dok traje prebacivanje jednog procesa.

Primetimo da pošto tekući korisnički program oslobodi CPU, moramo da sledeći korisnički program
pomerimo iz bafera 2 u korisničku oblast memorije. Program koji se izvršavao takođe mora da se
pomeri u jedan od bafera radi prebacivanja.
Ako se tako ne postupi, možemo da izvršavamo program iz bafera 2 pomeranjem zaštitne adrese.
Prethodni korisnički program (u korisničkoj oblasti) je tada izložen nepravilnoj modifikaciji od strane
programa u baferu 2. Prema tome, moramo da vršimo prebacivanje unutar memorije.

6.4 Višestruke particije


Konfiguracija memorije koja je proizišla iz preklopljenog prebacivanja je efektivno ista kao i
konfiguracija memorije kod multiprogramiranja, jer imamo više od jednog programa u memoriji u
isto vreme. Kod multiprogramiranja se CPU prebacuje sa jednog na drugi od tih programa. Problem
koji se tiče upravljanja memorijom je u dodeli memorije tim programima kada oni treba da se izvrše.
Memorija se deli na izvestan broj oblasti il particija. Svaka oblast može da sadrži jedan program koji
se izvršava. Na taj način stepen multiprogramiranja je ograničen brojem oblasti. Kada je neka oblast
slobodna bira se program iz reda poslova i puni u slobodnu oblast. Kada se program završi
memorijska oblast postaje raspoloživa za neki drugi program.
Moguće su dve osnovne šeme za upravljanje memorijom. Svaki od ova dva pristupa deli memoriju na
izvestan broj oblasti ili particija. Osnovna razlika između ova dva pristupa je u tome da li su te oblasti
statičke ili dinamičke. Ove šeme su dodela memorije u neprekidnim particijama fiksne dužine(MFT) i
dodela memorije u neprekidnim particijama promenljive dužine(MVT).
0
Monitor

Operativni sistemi - predavanja 34


Korisnik
1
Donja
granica

Korisnik
2
Gornja
granica

Korisnik
3

Korisnik
4

128K

Sl. 6.9. Dva granična registra koji definišu logički adresni prostor.
Kao i ranije, potrebno je obezbediti zaštitu kôda i podataka iz jedne oblasti od programa iz druge
oblasti. Kako sada imamo više korisničkih programa u memoriji to je potrebno da imamo mogućnost
da zaštitimo memorijski prostor pre i posle programa koji se izvršava. Ova zaštita se može obaviti
korišćenjem dva registra, kao na slici 6.9. Ta dva registra sadrže gornju i donju granicu adresa koje
korisnički program može legalno generistati, i mogu se definisati na dva načina:
•Granični registri. Vrednosti najmanje i najveće fizičke adrese. Legalne adrese nalaze se unutar tih
granica.
•Bazni i granični registar. Vrednost najmanje fizičke adrese i granica opsega logičkih adresa.
Legalne korisničke adrese su u opsegu od 0 do granice opsega koje se dinamički relociraju na fizičke
adrese u opsegu od bazne adrese do zbira bazne adrese i granice opsega logičkih adresa.

6.4.1 Particije fiksne dužine (MFT)


Poslovi koji pristižu u sistem smeštaju se u red spremnih poslova. Planer poslova vodi računa o
memorijskim potrebama svakog posla i raspoloživim memorijskim oblastima kako bi odredio kojim
poslovima da dodeli memoriju. Kada se poslu dodeli memorijski prostor, on se puni u odgovarajuću
particiju. On se tada može nadmetati za dobijanje CPU-a. Kada se posao završi, on oslobađa
prethodno dodeljenu memorijsku oblast koja se onda može napuniti drugim poslom iz reda poslova.
Kod dodele memorije moguće su različite strategije. Kod jedne od njih se svi poslovi prilikom ulaska
u sistem klasifikuju prema memorijskim zahtevima. Ove zahteve može da specificira sam korisnik ili
se mogu određivati automatski. Svaka particija ima sopstveni red poslova u kome su poslovi čiji
memorijski zahtevi odgovaraju veličini dotične particije. Same particije mogu biti međusobno
različite po veličini. Drugi pristup je da se svi poslovi smeštaju u jedan red. Planer poslova bira
sledeći posao koji će se izvršiti i čeka dok se memorisjka oblast odgovarajuće veličine ne oslobodi.
Očigledna varijanta ove šeme je da se spreči da memorijske particije budu prazne. Tako se posao koji
čeka da se oslobodi njemu odgovarajuća particija preskače ukoliko postoji slobodna particija koja
odgovara nekom drugom poslu. Ovde se postavlja pitanje da li posao treba da čeka na oslobađanje
njemu najpribližnije particije po veličini ako postoji veća raspoloživa particija, ili da se taj posao
napuni u tu particiju pri čemu smanjujemo čekanje ali trošimo znatno više memorijskog prostora nego
što je potrebno. Ova dilema predstavlja izbor izmeću strategija najboljeg poklapanja (best-fit-only) i
najboljeg raspoloživog poklapanja (best-available-fit).
Ako posao zahteva m memorijskih reči on se može izvršiti u particiji veličine n reči (n ≥m). Razlika n
-m predstavlja internufragmentaciju. Eksterna fragmentacijase javlja kada je neka particija slobodna
ali je previše mala za sve poslove koji čekaju, pa tako uvek ostaje neiskorišćena. Oba tipa
fragmentacije se javljaju kod MFT strategije.

Operativni sistemi - predavanja 35


6.4.2 Particije promenljive dužine(MVT)
Osnovni problem kod MFT je određivanje najbolje veličine particija kako bi se minimizirale interna i
eksterna fragmentacija. Na žalost, sa dinamičkim skupom poslova koji treba da se izvrše
najverovatnije ne postoji optimalna podela memorije. Rešenje ovog problema je da se dozvoli
dinamička promena veličine memorijskih particija. Ovaj pristup se naziva dodela memorije u
višestrukim neprekidnim particijama promenljive dužine. Upravljanje memorijom na osnovu MVT
strategije je prilično jednostavno. Operativni sistem kreira tabelu koja ukazuje koji delovi memorije
su slobodni a koji zauzeti. Na počeku je čitava memorija raspoloživa za korisničke porgrame i
posmatra se kao jedan veliki blok raspoložive memorije koji se naziva rupa. Kada naiđe posao kome
treba memorija traži se dovoljno velika rupa za taj posao. U slučaju da se ona pronađe, poslu se
dodeljuje samo onoliko memorije koliko mu je potrebno, dok se ostatak rupe ostavlja raspoloživim za
buduće zahteve. Kada se posao završi on oslobađa memoriju, koja tada postaje rupa. Ako je ta nova
rupa susedna drugoj rupi one se ujedinjuju u jednu veću rupu. Najčešći algoritmi za dodelu memorije
su prvo poklapanje(first-fit) i najboljepoklapanje(best-fit). Primetimo da je razlika između MFT i
MVT u softveru, dok je hardver identičan. Još jedan problem se javlja kod MVT. Kod jako malih
rupa je potrebno više memorije za odgovarajuću stavku u tabeli nego što je sama veličina rupe. U tom
slučaju se, kod dodele memorije koja ostavlja mali deo neke rupe slobodnim, umesto proglašavanja
malih ostataka memorije za rupe, one dodeljuju tom zahtevu praveći mali iznos fragmentacije.
Iskorišćenost memorije je u opštem slučaju bolja kod MVT nego kod MFT. Međutim, postoji
problem eksterne fragmentacije koji može biti veoma izražen. Jedno rešenje ovog problema je
kompakcija. Cilj je da memorija preuredi tako da se sve slobodne particije smeste zajedno u jedan
veliki blok. Primetimo da kompakcija nije uvek moguća. Ako se relokacija vrši statički komapakcija
nije moguća. Ona je moguća samo kod dinamičke relokacije, u vreme izvršenja, korišćenjem baznog i
graničnog registra.
7. Virtuelna memorija
6.5 Straničenje
MVT šema pokazuje problem eksterne fragmentacije. Generalno, ova situacija se javlja kada
raspoloživa memorija nije kontinualna već je podeljena na više rasejanih blokova. Kako memorija
koja se dodeljuje nekom poslu mora da bude kontinualna, takav memorijski prostor se ne može
iskoristiti. Kompakcija je jedan od načina da se prevaziđe ovaj problem. Međutim,
straničenjedozvoljava da memorija jednog programa bude nekotinualna, čime se omogućuje da se
programu dodeljuje fizička memorija gde god je ona raspoloživa.
Hardverska podrška straničenju je ilustrovana na slici 6.10.

stranična tabela
Sl. 6.10. Hardver potreban kod straničenja.

Operativni sistemi - predavanja 36


Svaka adresa koju generiše CPU deli se na dva dela: broj stranice (p) i stranični ofset (d). Broj
stranice se koristi kao indeks u straničnoj tabeli. Stranična tabela sadrži bazne adrese svake stranice u
fizičkoj memoriji. Ova bazna adresa se kombinuje sa straničnim ofsetom da bi se definisala fizička
memorijska adresa koja se šalje jedinici memorije.
Stranični model memorije je prikazan na slici 6.11. Fizička memorija je podeljena u blokove fiksirane
veličine koji se nazivaju okviri. Logička memorija se takođe podeljena na blokove iste veličine koji
se nazivaju stranice. Kada se program izvršava njegove stranice se pune u bilo koji raspoloživi okvir,
a stranična tabela vrši translaciju korisnikovih stranica u memorijske okvire.
broj okvira

0 11 2 2
3
3
stranična tabela
4
5
Logička memorija

67
fizička memorija
Sl. 6.11. Stranični model logičke i fizičke memorije.

Veličina stranice, kao i okvira, definisana je hardverski i obično je neki stepen broja dva. Ako je
veličina stranice P, tada logička adresa U daje broj stranice p i ofset d na sledeći način:
p = U div P
d = U mod P
Izbor stepena dvojke za veličinu stranice čini translaciju logičke adrese u broj stranice i ofset veoma
jednostavnim. Ako je veličina stranice 2n, tada nižih n bitova predstavlja ofset a preostali viši bitovi
broj strane.
Kada posao pristigne u sistem, planer poslova ispituje njegovu veličinu. Veličina posla izražena je u
stranicama. Planer poslova ispituje raspoložive memorijske okvire. Ako posao zahteva n stranica,
onda n straničnih okvira mora da bude slobodno. Prva stranica posla puni se u jedan od dodeljenih
okvira, a broj okvira se smešta u straničnu tabelu za taj posao. Sledeća strana se puni u sledeći okvir
itd.
Kod straničenja nema eksterne fragmentacije. Svaki slobodni okvir može da bude dodeljen. Međutim,
postoji izvesna interna fragmentacija, jer obično poslednji okvir dodeljen poslu ne mora da bude pun.
Razmotrimo hardversku implementaciju stranične tabele. U najjednostavnijem slučaju ona se
implementira kao skup specijalizovanih registara. Dispečer CPU-a puni te registre baš kao što puni i
ostale registre. Instrukcije koje pune ili modifikuju straničnu tabelu su privilegovane i samo
operativni sistem može da ih izvrši.

Operativni sistemi - predavanja 37


Upotreba registara za implementaciju stranične tabele je zadovoljavajuća ako je stranična tabela
relativno mala. Kod mašina kod kojih to nije slučaj se stranična tabela drži u memoriji, a bazni
registar stranične tabele(Page Table Base Register – PTBR) ukazuje na straničnu tabelu. Izmena
stranične tabele zahteva jedino izmenu tog registra čime se smanjuje vreme prebacivanja konteksta.
Problem kod ovog pristupa je vreme potrebno za pristupanje lokacijama korisničke memorije. Ako
želimo da pristupimo lokaciji i, moramo najpre da pristupimo straničnoj tabeli koristeći PTBR i
indeks koji odgovara stranici za i. Ovo znači da moramo da pristupimo memoriji. Kada iz stranične
tabele dobijemo broj okvira koji se kombinuje sa ofsetom strane možemo da pristupimo željenoj
lokaciji u memoriji. Prema tome za pristup nekoj memorijskoj lokaciji potrebno je obaviti dva
pristupa memoriji. Time se memorija praktično usporava dva puta.
Standardno rešenje ovog problema je da se koristi specijalna hardverska memorija malog kapaciteta,
koja se obično naziva asocijativna memorija. Skup asocijativnih registara sačinjava memoriju velike
brzine koja ima mogućnost istovremenog pretraživanja sadržaja svih registara. Ovakva memorija
jeste veoma brza, ali je i veoma skupa pa mora biti relativno malog kapaciteta. Asocijativna memorija
sadrži svega nekoliko stavki iz stranične tabele i to one najaktuelnije. Kada CPU generiše logičku
adresu, odgovarajuća strana se traži u asocijativnoj memoriji. Ako se ona nalazi u njoj, odgovarajući
broj memorijskog okvira je odmah raspoloživ i može se pristupiti željenoj lokaciji u memoriji. U
slučaju promašaja moramo da ipak potražimo željenu stavku u delu stranične tabele koja je u
memoriji.
Procenat uspešnog pronalaženja željene stavke u asocijativnoj memoriji naziva se faktor pogotka (hit
ratio). Ako je faktor pogotka 80%, a vreme pretraživanja asocijativne memorije 50ns i vremen
pristupa memoriji 750ns, tada možemo izračunati efektivno vreme pristupa memoriji kao
ef = 0.80*(50+750) + 0.20*(50+750+750).
Još jedna prednost straničenja je mogućnost deljenja zajedničkog kôda. Ukoliko je kôd tzv. reentrant
tipa, tj. ne vrši samomodifikaciju, onda je moguće da više korisnika koristi istu kopiju tog kôda u
memoriji. Takvi programi su editori, kompilatori, asembleri, sistemi baza podataka itd.
Zaštita memorije kod straničenja vrši se zaštitnim bitovima koji su pridruženi svakoj stranici. Ti
bitovi se čuvaju u straničnoj tabeli. Jednim bitom se može definisati da li se dotična stranica može i
čitati i modifikovati ili samo čitati. Kako svaka memorijska referenca ide preko stranične tabele radi
određivanja broja memorijskog okvira, tom prilikom se i proverava da li se traži upis u stranicu koja
je smočitajuća. Još jedan bit se obično pridružuje svakoj stavci u straničnoj tabeli. Ovaj bit služi da se
izazove trap ukoliko je generisana ilegalna adresa (valid/invalid bit). Operativni sistem postavlja
vrednosti za sve stranice da bi dozvolio ili zabranio pristup pojedinim stranicama.
6.6 Segmentacija
Kod straničenja je neizbežno da se razdvaja korisnički pogled na memoriju i stvarna fizička
memorija. Korisnikov pogled na memoriju nije isti kao stvarna fizička memorija, već se samo
preslikava na nju. To preslikavanje omogućava razliku između logičke i fizičke memorije.
Opšte je mišljenje da korisnici ne vide memoriju kao linearan niz reči, već kao skup segmenata
različite dužine. Segmentacija je šema za upravljanje memorijom koja podržava takav korisnički
pogled na memoriju. Logički adresni prostor je kolekcija segmenata. Svaki segment ima ime i dužinu.
Adrese specificiraju kako ime segmenta, tako i ofset unutar segmenta. Prema tome, korisnici
specificiraju svaku adresu pomoću dve veličine: imena segmenta i ofseta (kod straničenja su korisnici
specificirali samo jednu adresu koja se hardverski delila na broj strane i ofset , što je bilo nevidljivo
za programera). Radi jednostavnosti, segmenti se referenciraju brojem segmenta a ne imenom
segmenta.
Iako sada korisnik ukazuje na objekte u programu pomoću dvodimenzionalne adrese, fizička
memorija je još uvek jednodimenzionalni niz reči. Zbog toga se mora definisati implementacija
preslikavanja dvodimenzionalne korisničke adrese u jednodimenzionalnu fizičku adresu. Ovo
preslikavanje je realizovano preko segmentne tabele.
Upotreba segmentne tabele je ilustrovana na slici 6.12. Logička adresa se sastoji od dva dela: broja
segmenta s i ofseta unutar segmenta d. Broj segmenta se koristi kao indeks u segmentnoj tabeli.
Svaka stavka u segmentnoj tabeli ima baznu adresu segmenta i granicu segmenta. Ofset d u logičkoj
adresi mora da ima vrednost između 0 i granice. Inače se generiše trap adresna greška. Ukoliko je

Operativni sistemi - predavanja 38


ofset legalan on se sabira sa baznom adresom segmenta čime se dobija adresa željene reči u fizičkoj
memoriji.
Segmentna tabela

Trap adresna greška


Sl. 6.12. Hardver za podršku segmentaciji.

Kao i stranična tabela, i segmentna tabela može biti smeštena u asocijativnoj memoriji ili u
operativnoj memoriji. Kada je broj segmenata relativno veliki nije izvodljivo čitavu segmentnu tabelu
držati u asocijativnim registrima, već se ona smešta u memoriju. Bazni registar segmentne
tabele(Segment Table Base Register -STBR) ukazuje na segmentnu tabelu. Kako broj segmenata koje
koristi program može da varira, koristi se i registar dužine segmentne tabele(Segment Table Length
Register – STRL). Za logičku adresu (s,d) se najpre proverava da li je broj segmenta s legalan (s <
STRL). Potom se broj segmenta dodaje sadržaju STBR-a čime se dobija memorijska adresa
odgovarajuće stavke u segmentnoj tabeli. Ta se stavka čita iz memorije i proverava ofset da li je u
okviru granica segmenta, a zatim se izračunava fizička adresa željene reči kao suma bazne adrese
segmenta i ofseta.
Kao i kod straničenja, ovo preslikavanje zahteva dva obraćanja memoriji po jednoj logičkoj adresi što
usporava rad računarskog sistema dva puta, ukoliko se nešto ne preduzme. Obično se koristi skup
asocijativnih registara koji sadrže najaktuelnije stavke segmentne tabele. Relativno mali broj ovih
registara (8 do 16) može smanjiti vreme pristupa memoriji tako da ono ne bude duže više od 10-15%
nego kod pristupa memoriji bez preslikavanja.
Naročita prednost segmentacije je što je zaštita memorije pridružena segmentima. Kako segmenti
predstavljaju semantički definisane delove programa, verovatno je da će se sve stavke segmenta
koristiti na isti način. Prema tome, neki segmenti sadrže instrukcije a neki segmenti sadrže podatke. U
modernim računarskim arhitekturama nema instrukcija koje su samomodifikujuće, tako da se
segmenti koji sadrže insrukcije mogu definisati kao samočitajući ili samoizvršavajući. Hardver za
memorijsko preslikavanje će proveriti zaštitni bit pridružen svakoj stavci segmentne tabele da bi se
zaštitili od ilegalnih pristupa memoriji.
Još jedna prednost segmentacije je mogućnosti deljenja kôda ili podataka. Svaki posao ima svoju
segmentnu tabelu pridruženu njegovom PCB-u a koju koristi dispečer da definiše tabelu hardverskih
segmenata kada se posao daje CPU-u. Segmenti se dele kada stavke u segmentnim tabelama dva
različita posla ukazuju na istu fizičku lokaciju. Deljenje se javlja na nivou segmenata, tako da se
mogu deliti i programi koji se sastoje od više segmenata.
Planer poslova treba da nađe i dodeli memoriju za sve segmente korisničkog programa. Ova situacija
je slična straničenju osim što su segmenti promenljive dužine. Kao i kod MVT, dodela memorije
predstavlja problem dinamičke dodele memorije, i može se rešiti korišćenjem best-fit ili first-fit
algoritama. Segmentacija može da izazove eksternu fragmentaciju kada su svi blokovi slobodne
memorije isuviše mali za smeštaj segmenta. U tom slučaju posao može jednostavno da sačeka dok se
dovoljno memorije ne oslobodi ili se može izvršiti kompakcija. Kako je segmentacija po svojoj
prirodi algoritam za dinamičku relokaciju memorije, kompakcija se može vršiti u svakom trenutku.
I straničenje i segmentacija imaju svoje prednosti i nedostatke. Moguće je kombinovati ove dve šeme
kako bi se poboljšale njihove karakteristike. Tako se dobijaju šeme segmentirano straničenje i
stranična segmentacija.

Operativni sistemi - predavanja 39


8. Upravljanje ulazno-izlaznim jedinicama
Sve ulazne i izlazne uređaje u jednom računaru možemo podeliti na:
1. blokovske
2. znakovne
3. specijalni
Razlike u:
- jedinice pristupa (blok/znak),
- načina pristupa (direktan/sekvencijalni) i
- upravljanja (statičko/dinamičko).
Klasifikacija uređaja na znakovne i blokovske ne obuhvata sve uređaje (sat, miš, ...)

Drajver (driver) je softver koji upravlja uređajem. Obično, jedan drajver može da opsluži više
primeraka uređaja iste klase. Drajveri uređaja koji nisu ni blokovski ni znakovni se razlikuju od
drajvera klasifikovanih uređaja. Van drajvera su vidljive samo operacije, kao što su, na primjer,
operacije ulaza ili izlaza, koje omogućuju jednoobrazno korišćenje ulaznih i izlaznih uređaja. Tipične
operacije drajvera blokovskih uređaja su:
1. operacija inicijalizacije i
2. operacije ulaza i izlaza blokova (koje koristi sloj za upravljanje datotekama).
Tipične operacije drajvera znakovnih uređaja su:
1. operacija inicijalizacije,
2. operacije ulaza i izlaza znakova i
3.upravljačka operacija (omogućuje dinamičko podešavanje funkcionalnih karakteristika znakovnih
uređaja, recimo, njihove brzine prenosa znakova).
Za adresu svake od ovih operacija predviđeno je posebno polje u elementu tabele drajvera.
Podrazumeva se da redni broj drajvera indeksira element ove tabele, koji sadrži polja sa adresama
pojedinih operacija ovog drajvera. Pri tome, polja, namijenjena za adrese operacija, koje dotični
drajver ne podržava, sadrže adresu posebne (lažne) operacije, čije obavljanje nema efekta. To važi, na
primer, za upravljačku operaciju kod drajvera diska, ili za operaciju ulaza kod drajvera štampača.

Tabela drajvera nudi standardan način za povezivanje slojeva za upravljanje fajlovima i


za upravljanje ulaznim i izlaznim uređajima, radi vezivanja operacija običnih i specijalnih
datoteka za operacije drajvera ulaznih i izlaznih uređaja. Zahvaljujući ovoj tabeli, moguće je u
operativni sistem dodavati (statički i dinamički) nove drajvere (uslov za to je, ne samo dopunjavanje
tabele drajvera adresama operacija novog drajvera, nego i dodavanje objektnog oblika novog drajvera
objektnom obliku operativnog sistema).
6
Obrađivači prekida drajvera (Interupt)
Drajveri reaguju i na prekide (stižu od kontrolera). Obrada prekida obuhvata ili preuzimanje podatka,
pristiglih od kontrolera, ili pripremu prenosa novih podataka ka kontroleru. Za ovakve obrade su
zaduženi obrađivači prekida drajvera. Obrađivače prekida poziva mehanizam prekida, (znači hardver
ispod operativnog sistema). Uslov, da hardverski mehanizam prekida pozove nekog od obrađivača
prekida, je da adresa ovog obrađivača dospe u odgovarajući element tabele prekida. To se ostvaruje u
okviru drajverske operacije inicijalizacije.
7
DRAJVERI BLOKOVSKIH UREĐAJA
1. Inicijalizacija kontrolera
2. Prenos blokova ka uređajima i od njih.
Za drajverske operacije ulaza i izlaza blokova obavezni argumenti su redni broj prenošenog bloka i
adresa bafera u koji, ili iz kog se prenosi blok. Drajverske operacije ulaza/izlaza bloka poziva
sistemska operacija čitanja/pisanja sloja za upravljanje fajlovima. Ako se ove operacije odnose na
običani fajl, one, kao prvi argument u pozivu navode izračunati redni broj bloka. Ako se odnose na
specijalni fajl, one, kao prvi argument u pozivu drajverske operacije navode sadržaj polja pozicije ove

Operativni sistemi - predavanja 40


datoteke (ovo polje je prisutno u elementu tabele otvorenih datoteka procesa pozivaoca pomenute
sistemske operacije).
8
DRAJVERI BLOKOVSKIH UREĐAJA
Za drajverske operacije ulaza ili izlaza bloka je prirodno da se oslone na mehanizam direktnog
memorijskog pristupa (DMA), ako to omogućuje kontroler. U toku prenosa jednog bloka, procesor se
može više puta preključi na razne procese, čije aktivnosti se, jedna za drugom, zaustavljaju zbog
zahtjeva za prenosom novih blokova. Uvezivanje svih istvoremeno postojećih zahtjeva za prenosom
blokova u listu zahtjeva omogućuje ne samo registrovanje svih zahtjeva, nego i registrovanje
redosleda njihovog obavljanja.
9
DRAJVERI BLOKOVSKIH UREĐAJA
Svaki zahtjev u ovakvoj listi zahtjeva mora da sadrži:
1. smjer zahtjevanog prenosa bloka,
2. redni broj ovog bloka,
3. adresu bafera koji učestvuje u prenosu i
4. adresu deskritpora procesa, čija aktivnost se zaustavlja do obavljanja zahtjevanog
prenosa bloka.
10
Dinamika prenosa blokova
1. Pripremanje zahtjeva za prenos bloka i njegovim ubacivanjem u listu zahtjeva. (zaustavlja
aktivnost procesa pozivaoca ovakve operacije, ako nije moguće pokrenuti zahtjevani prenos bloka, jer
je drugi prenos u toku)
2. U suprotnom, pokreće se mehanizam DMA, radi obavljanja zahtjevanog prenosa bloka, i opet se
zaustavlja aktivnost procesa pozivaoca.
3. Nastavak omogućuje odgovarajući obrađivač prekida (interrupt handler). Njega pozove kontroler,
izazivajući prekid nakon obavljanja zahtjevanog prenosa bloka. Pomenuti obrađivač prekida prvo
izbaci iz liste zahtjeva upravo opsluženi zahtjev, pamteći, pri tome, adresu deskriptora procesa, čija
aktivnost se može nastaviti. Upravljanje listom zahtjeva u toku drajverskih operacija ulaza ili izlaza
bloka je pod onemogućenim prekidima.
11
Drajveri blokovskih uređaja - analiza
1. Drajver blokovskog uređaja mora da poznaje karakteristike uređaja koga opslužuje.
2. U nadležnosti drajvera blokovskog uređaja je i određivanje načina preslikavanja blokova.
(na pr. opsluživanje hard diska)
3. Zadatak drajvera je da iskoristi sve mogućnosti kontrolera.
4. Drajver može da poveća pouzdanost uređaja, ako reaguje na prolazne greške u radu
12
BLOKOVSKI I ZNAKOVNI UREĐAJI KAO SPECIJALNE DATOTEKE
Blokovskim uređajima se rijetko pristupa kao specijalnim datotekama, a kada se to i desi, koristi ih
samo jedan proces, čiji je zadatak najčešće provjera ispravnosti blokova, radi pronalaženja
izgubljenih ili loših blokova. Za razliku od blokovskih uređaja, za znakovne uređaje je tipično da im
procesi pristupaju kao specijalnim datotekama i da ih zaključavaju, da bi obezbijedili međusobnu
isključivost u toku njihovog korišćenja (terminal, štampač, mrežna kartica, ...). Kod pomenutih
uređaja se često uvode posebni sistemski procesi posrednici (spooler), koji posreduju u korišćenju.
Uz svaki od sistemskih procesa posrednika postoji i poseban direktorijum.
13
DRAJVERI ZNAKOVNIH UREĐAJA
Blokovski i znakovni uređaji se razlikuju ne samo po načinu korišćenja, nego i po načinu aktiviranja.
Tako, dok blokovske uređaje uvek aktiviraju procesi, aktivnost znakovnih uređaja zavisi i od
aktivnosti korisnika (prispeće znakova sa tastature ne zavisi od aktivnosti procesa, nego od aktivnosti
korisnika). Zato u sastav drajvera znakovnih uređaja obavezno
ulaze i baferi, namijenjeni za smještanje znakova, koji su prispjeli/upućeni sa ovih uređaja
(nezavisno od aktivnosti procesa. U ovakvim baferima znakovi se čuvaju dok ih procesi ili

Operativni sistemi - predavanja 41


uređaji ne preuzmu.
14
DRAJVERI ZNAKOVNIH UREĐAJA
Na primjer terminal ima dva bafera:
- jedan, ulazni bafer služi za smještanje znakova, prispelih sa tastature, a
- drugi, eho bafer služi za smještanje znakova, upućenih ka ekranu.
Svaki pritisak dirke sa tastature izaziva prekid, koji aktivira obrađivača prekida tastature. Ako su
ulazni i eho baferi puni, obrađivač prekida ignoriše prispeli znak. Inače, on ga preuzima i smješta u
ulazni bafer. U ulaznom baferu znak čeka da neki proces zatraži njegovo preuzimanje.
15
DRAJVERI ZNAKOVNIH UREĐAJA
Drajverske operacije čitanja i pisanja znakova spadaju u blokirajuće operacije. Ove operacije se
pozivaju iz sistemskih operacija čitanja i pisanja sloja za upravljanje fajlovima, kada se čita, odnosno
piše specijalna datoteka. Poziv drajverske operacije ulaza nema argumenata, a njegova povratna
vrednost je pročitani znak (njegov kod). Za poziv drajverske operacije izlaza kao jedini argument
služi pisani znak (njegov kod). Ovaj poziv nema povratnu vrijednost.
16
DRAJVERI ZNAKOVNIH UREĐAJA
Upravljanje ulaznim i eho baferom, u okviru drajverskih operacija ulaza i izlaza znaka, mora biti pod
onemogućenim prekidima. Za grafičke (memorijski preslikane) terminale nije potreban eho bafer, niti
obrađivač prekida ekrana, jer ovakvi terminali posjeduju video memoriju jer se njen sadržaj
periodično prikazuje prilikom osvježavanja ekrana. Zato je, kod grafičkog terminala, za prikazivanje
znaka na ekranu dovoljno smjestiti znak u odgovarajuću lokaciju video memorije. U slučaju da se želi
podržati više prozora (window) na ekranu grafičkog terminala, za svaki od prozora je potreban
poseban ulazni bafer.
17
DRAJVERI ZNAKOVNIH UREĐAJA
Drajver znakovnih uređaja opslužuju:
1. operaciju inicijalizacije,
2. operaciju ulaza,
3. operaciju izlaza i
4. upravljačku operaciju.
Argumenti poziva upravljačke operacije utiču ne samo na funkcionisanje uređaja nego i na
funkcionisanje drajvera uređaja.
18
Drajver sata (timer)
U nadležnosti ovog sloja se nalazi i praćenje proticanja vremena. Praćenje proticanja vremena se
zasniva na brojanju periodičnih prekida (clock), koje u pravilnim vremenskim intervalima generiše
sat (kristalni oscilator sa pravilnom frekvencijom i brojačem, koji se umanjuje u svakoj oscilaciji, a
čije anuliranje izaziva prekid). Obrađivač prekida sata broji prekide sata, a njihov zbir predstavlja
sistemsko vreme (lokalno vreme u računaru).
19
Drajver sata (timer)
Ovaj obrađivač prekida predstavlja donji deo drajvera sata. Gornji deo ovog drajvera predstavljaju
sistemske operacije za preuzimanje ili izmjenu sistemskog vremena i za uspavljivanje procesa
(odnosno, za odlaganje njegove aktivnosti, dok ne istekne zadani vremenski interval). Sistemsko
vrijeme se može predstaviti kao broj prekida sata ili kao broj sekundi i broj prekida sata u tekućoj
sekundi. Sistemsko vrijeme može da se računa u odnosu na neki nepromenljivi trenutak u prošlosti, ili
u odnosu na trenutak poslednjeg pokretanja operativnog sistema.
20
Drajver sata (timer)
Dok je sistemsko vrijeme precizno, dotle pripisivanje procesorskog vremena procesima (mjerenje
trajanja aktivnosti procesa) ne mora biti precizno. Kada postoji nepreciznost, nju izaziva
nemogućnost mjerenja dužine vremenskih intervala, koji su kraći od perioda prekida sata, a njih ima

Operativni sistemi - predavanja 42


u toku aktivnosti procesa.One se mogu izbjeći, ako procesor broji svoje cikluse i njihovu sumu čuva u
posebnom registru. Pomoću razlike sadržaja ovog registra, preuzetog na početku i preuzetog na kraju
perioda aktivnosti procesora koji je kraći od perioda sata, može se ustanoviti koliko ciklusa je
potrošeno u ovom periodu i iz toga odrediti trajanje pomenutog preioda aktivnosti procesora.
21
Drajver sata (timer)
Procesorsko vreme troši i obrađivač prekida sata, jer se u njegovoj nadležnosti nalaze poslovi:
1. održavanje sistemskog vremena,
2. praćenje isticanja kvantuma aktivnog procesa,
3. praćenje ukupnog korišćenja procesorskog vremena aktivnog procesa,
4. provjera da li je nastupilo vreme buđenja uspavanog procesa (čija aktivnost se nastavlja
tek kada istekne zadani vremenski interval), ili
5. skupljanje statistika o aktivnosti procesa (koje se svodi na registrovanje sadržaja programskog
brojača, radi otkrivanja učestanosti izvršavanja pojedinih delova programa).
22
UPRAVLJANJE TABELOM PREKIDA
Sloj za upravljanje I/O omogućuje i smještanje adresa obrađivača prekida u tabelu prekida, čime
dozvoljava da viši slojevi operativnog sistema mogu da reaguju na prekide. Za operaciju smještanja
adresa obrađivača prekida u tabelu prekida nije uputno da bude sistemska operacija, jer ona pruža
mogućnost da se ugrozi funkcionisanje operativnog sistema i naruši njegov mehanizam zaštite.
23
OSNOVA SLOJA ZA UPRAVLJANJE I/O
Sloj za upravljanje I/O kontrolerima se oslanja na sloj za upravljanje procesorom, jer su
preključivanja sastavni deo aktivnosti drajvera. Za operacije sloja za upravljanje I/O kontrolerima
(odnosno za drajverske operacije) je zajedničko da se obavljaju pod onemogućenim prekidima što je
prihvatljivo, jer je reč o kratkotrajnim operacijama).
9. Upravljanje sekundarnim i tercijalnim memorijama
Upravljanje resursima kao što su ulazno-izlazne jedinice uglavnom se svodi na upravljanje
hard diskom. Hard disk najviše utiče na performanse sistema i jedino kod njega ima smisla razmatrati
neke politike u cilju poboljšanja performansi. Dva najveća razloga za razmatranje hard diska su: svi
programi se nalaze na disku i hard disk dobija još više na značaju ako koristi sistem sa virtuelnom
memorijom, gde se deo diska koristi kao produženje memorije.
U prošlosti kada je u prvom planu bio računar na koji je bilo povezano mnogo korisnika,
fizička memorije je bila mali deo virtuelne memorije, pa su stranice stalno išle sa diska u memoriju i
obrnuto. Danas se virtuelna memorija ne koristi u tolikoj meri, ali se ipak koristi kao neka vrsta
prinude kada nema dovoljno fizičke memorije. Danas se virtuelna memorija uglavnom koristi kao
neki dodatak običnoj memoriji koriti se ponekad, u kritičnim situacijama, pa je pomalo izgubila na
značaju kakav je imala pre.
9. Upravljanje hard diskom
HD su se pojavili dosta davno, još pre pojave PC, ali to su bili izuzetno skupi uređaji koji su
ugrađivani u velike računare. Uzmimo za referentnu tačku 70-e godine, kada su mini-računari bili
popularni. Tada su bile dve vrste tvrdih diskova:
Jeftiniji – oblika većeg tanjira, imali su prečnik 0.5m i kapacitet 5-10MB. To je bio
nepromenljiv medijum koji kada se stavi u računar više se ne vadi.
Skuplji – korišćeni u profesionalne svrhe na sistemu koji opslužuje veliki broj korisnika i bio
je promenljiv. Drajv za takav disk bio je dimenzija sadašnje veš mašine u koga se umetao HD oblika
valjka. Kapacitet je bio 40MB i mogao je da se vadi iz drajva i ubacuje u drajv. Cene su im bile
velike.
Sa pojavom AT računara počeli su da se urgađuju HD u PC. Cena takvog HD bila je 2-3 puta
veća od cene samog računaraali ubrzanje u odnosu na flopi bilo je fantastično. Tadašnji HD su imali
kapacitet 5MB, a kapacitet mnogo sporijeg flopija je bio 0.3MB. Kasnije dolazi do unapređenja
karakteristika HD, ali pošto je to mehanički uređaj tu je sporije dolazilo do unapređenja nego kod
memorije i CPU.
Bitne promene koje bi mogle biti urađene na nivou principa rada su:

Operativni sistemi - predavanja 43


Umesto rotirajućeg HD da se ubaci neka vrsta memorije koja bi na drugačiji način pamtila
podatke; da se umesto mehaničkog principa rada pstavi optički princip rada HD.
HD služi kao sekundarna memorija, za trajno čuvanje podataka. Primarna memorija, čak i
kada je pravljena od feritnih jezgara, nije se smatrala pogodnom za trajno čuvanje podataka zbog
malog kapaciteta i visoke cene. Što nemamo knotrolu nad tim šta se puni u tu memoriju u kom stanju,
gde su podaci u memoriji. Ljudi su primetili da je magnetno čuvanje informacija najbrže, najsigurnije
i najtrajnije. U računarskoj tehnici HD treba da zapamti dva nivoa koji će predstavljati 0 i 1. Treba
napraviti i uređaj koji će da prepozna te nule i jedinice i treba napraviti standard gde će se znati gde i
šta treba da se upisuje i kojim redom.
Vremenom se došlo do sledećeg standarda. Osnovnu jedinicu magnetnog diska prestavlja 1
tanjir koji ima u sredini osovinu oko koje se vrti. Premazan je feritnim materijalom koji stalno može
da se namagnetiše. Podaci se upisuju po stazama. Tu vidimo razliku u odnosu na današnje CD, gde
nema više staza već postoji jedna spiralna. Tu nastaju problemi: glava za čitanje treba da se
kontinualno pomera sa okretanje diska; pristup je spor, jer ako treba pristupiti datoteci na kraju spirale
treba mnogo čekati.
Radi maksimalnih performansi HD ideja sa spiralom je odbačena, a prihvaćena je ideja sa
koncentričnim krugovima. Podaci se nalaze na koncentričnim krugovima koji se zovu trake ili staze.
Ti podaci se čitaju pomoću glave za čitanje. Glava je slična onoj kao kod kasetofona. To je
mehanička psrava koja na sebi ima metalni produžetak koji deluje kao magnet i ima žičanu navojnicu
kroz koju može da se pušta struja ili koja može da očitava indukovanu struju. Pisanje ide tako što
kroz navojnicu prolazi odgovarajući napon koji namagnetiše magnet i odgovarajući deo na ploči.
Čitanje se odvija tako što namagnetisani deo ploče prolazi ispod glave u kojoj se zatim indukuje
napon koji daje 0 ili 1. Sada je pomeranje glave diskretno, a ne kontinualno.
Kada se 0 i 1 upisuju duž kocentričnog kruga, treba znati gde je početak a gde kraj svakog
bajta. Od tehnologije zavisi koliko bitova može da stane na jedan krug. Zbog ovakvih problem uvodi
se standard da se staza deli na određeni broj sektora. Veličina svakog sektora je 512B. osnovna
jedinica diska je onda sektor. Kada se pristupa HD pristupa se jednom celom sektoru. Koliko će
sektora biti na jednoj stazi zavisi od tipa diska. Da bi računar prepoznao početak i kraj sektora, onda
između svaka dva sektora treba da postoji prolaz koji se zove međisektorski gap. Svaki sektor ima na
sebi sector header, gde se upisujeredni broj sektora, informacija za korekciju grešaka.
Ovo je standard koji poštuje svaki proizvođač, ali mimo toga svaki od njih ima svoje
dogradnje i dodatke. Ti dodaci mogu biti: korišćenje obe strane ploče HD radi minimizacije troškova.
Tu je potrebna dogradnja samo još jedne glave za čitanje. Ako dalje hoćemo da povećamo kapacitet
diska onda uzmemo još jednu takvu ploču kojoj dodamo još dve glave za čitanje.
Kada su HD počeli da se ugrađuju standard je bio 5.25'', a debljina nije bila strogo definisana.
Zbog toga su postojala dva standarda: full hide i half hide. Full hide 4'' (10cm), a half hide 2''. U
zavisnosti od te visine moglo je da se pakuje više ili manje ploča.
Kasnije se prešlo na novu tehnologiju gde se povećala gustina zapisa, razvija se elektronika
glave i ostalih uređaja, a diskovi postaju sve manji. Tehnologija zapisa informacija na HD vremenom
se menjala. Najstarija tehnologija se zvala MFM. Takvih diskova danas skoro više nema. Svi ti
diskovi su se zvali vinčester diskovi.
Pretpostavimo da imamo HD glavu za čitanje i jednu stazu. Matematički računato može se na
tu kružnicu upisati beskonačno 0 i 1. U praktičnom životu postoje neka fizička ograničenja na
najmanji deo na koji može da se upiše 0 ili 1. Ta fizička ograničenja zavise od same glave čitanje.
Kod prvih HD na svkoj ploči je bilo 100-300 staza. Koliko će staza biti zavisi od od preciznosti
stepena motora za pomeranje glave. U to vreme se pokazalo da na jednoj stazi može da bude 17
sektora, 512B*17 je približno 8.5KB što je 7000-8000 bitova.
Takođe se javljao sledeći problem. Pretpostavimo da imamo dugi niz 0 ili 1. Jednu za drugom
1000 nula npr. Kada se pročita zadnja nule, ne možemo biti sigurni da smo pročitali baš 1000 nule a
ne 999 ili 1001. To zavisi od preciznosti sata računara. Onda treba da postoji nekakav sat i standard u
smislu broja obrtaja diska. U to vreme brzina je bila 3600rpm, što je 60 rotacija u sekundi, 16ms za
jednu rotaciju. Pa se dobije 160ns vreme čitanja jednog bita. Da bi znali koliko nula je pročitano meri
se 1000*160ns. Da bi se došlo do tačnog podatka računar treba da ima jako precizan časovnik kome
ne sme da se menja takt. Tačnost čitanja zavisi od brzine rotacije. Teško je napraviti elektromotor za

Operativni sistemi - predavanja 44


koji se garantuje apsolutna jednolikost rotacije. U stara vremena bilo je malo poverenje u jednolikost
rotacije tako da se po jedan sinhronizacioni impuls upisivao između svake dve binarne cifre. To znači
da je na svaki bit išao jedan sinhronizacioni impuls pa je ta tehnologija nazvana MFM(Modify
Frequency Modulation). Kod ovog načina zapisa gubi se mnogo prostora na disku.
Prva povećanja kapaciteta diska nisu se desila zbog promene fizičkih parametara diska, već se
promenio način zapisa informacija. Novi zapis je doveo do toga da fizički isti diskovi imaju za 50%
veći kapacitet. Taj novi zapis se zvao RLL(Run Length Limited) ograničena dužina serije. Zasnovan
je na smanjenju broja sinhro-impuls. Ovde je na tri bita informacija išao jedan sinhro-impuls. Ovaj
zpis od tri bita nije išao na običan način, već se ta tri bita prvo kodiraju pa se onda zapišu.
Glava HD ne sme da dodiruje površinu diska, a mora biti jako blizu te površine. To rastojanje
se meri u mikronima. Pri brzini rotatice od 5400rpm glava ne bi smela ni na kakve prepreke kao što
su zrnca prašine. Čak i najfinije zrno prašine je višestruko veće od razmaka glave i ploče. Zato su HD
hermetički zatvoreni i kada se jednom otvore neupotrebljivi su. Zbog malo razmaka glave HD su
osetljivi na udare. Naročito stariji modeli. Ti problemi su kasnije rešeni: može da se napravi tako da
glava nikad ne udari u površinu, a i ako udari površina se pravi izdržljivijom, neće se odmah oštetiti;
takođe je obezbeđeno da kada HD ne radi da glava bude na nekom neopasnom mestu, iznad dela gde
nema podataka.
Posle RLL javio se ESDI(Enhanced Small Device Interface) unapređen interfejs za male
uređaje. Davao je još veću gustinu zapisa, tako što je neke funkcije prebacivao lokalno na disk, a broj
sektora se povećavao. Kod MFM je bilo 17 sektora u traci, RLL 26, a ESDI 30-32. Parametri diska
su: broj glava(broj površina), broja traka na jednoj površini i broj sektora na stazi. Kod starijih
računara ti parametri su se navodili pri uključenju računara, a kasnije se ti parametri navedu jednom i
pamte pomoću baterije. CMOS memorije.
Unapređenje dolazi i sa druge strane, tako što se više ne prave diskovi sa stepen motorom, gde
se korak po korak pomera glava sa staze na stazu, već sa servo pločom. Gde se na jednoj posebnoj
ploči upisuju podaci o stazama, a glava se ne pomera sve dok ne počne da čita podatke o
odgovarajućoj stazi. Ovde je pomeranje kontinualno, a ne stepenasto, i glava može da se pomera
napred nazad sve dok se ne podesi na najjči signal. To je sledeća tehnologija. Od tada diskovi imaju
neparan broj površina. Jedna služi za pozicioniranje na traku.
Kod današnjih doskova koji su se pojavilikrajer 80-ih iskorištena je jedna dobra ideja da se
kontroler prebaci na sam disk. To je IDE standard. Time se dobija mogućnost ya gušće zapise i za
bolje iskorištenje fizičkih resursa. Što se tiče sektora koji se u toku rada oštete, njih kontroler
automatski pronalazi, zapisuje da oni ne valjaju i izbacuje ih iz upotrebe. Danas se obično koriste
unapređeni IDE diskovi, EIDE diskovi.
Lako se vidi da trake u obliku koncentričnih krugova nisu jednake dužine. To znači da one
nisu ekvivalentne u pogledu količine zapisanih bitova. Najjednostavnije rešenje je da onoliko koliko
možemo da zapišemo na najkraćoj stazi zapisujemo i na ostalim stazama. U ovom slučaju kapacitet
se ne koristi u potpunosti. Kod novih diskova kao posledica integracije HD i kontrolera imamo
različit broj sektora u raznim stazama. Treba samo napisati odgovarajuće podatke za taj disk. On se
sastoji od jednog ili dva tanjira širine 3.5'' i debljine 1'' sa velikom gustinom pisanja gde se na
spoljnim stazama stavlja veliki broj sektora. OS danas fizičke parametre HD ne zna, već oni
komuniciraju na nivou sektora, i sa stanovišta OS HD je nekakav linearni prostor.
Postoji još jedna vrsta diskova koji su išli paralelno sa IDE diskovima, to su SCSI diskovi. To
je definicija jedne magistrale kojom mogu da se periferni uređaji priključe na računar. Kod SCSI
može najviše 7 uređaja da se stavi na 1 kontroler. Može se priključiti 7 diskova, ali i razni drugi
uređaji kao CDR drajvovi, razni skeneri… Ako je stavljen SCSI disk onda će se taj uređaj sam
prijaviti i on će dalje sve sam da kontroliše. SCSI diskovi su bili interesantni za velike kapacitete jer
je ranije za obične HD bilo ograničenje na 32MB a kasnije na 512MB.
Pre 5 god. su postojali SCSI diskovi od 2GB. Ako je trebalo praviti server za veliki broj
korisnika, to je bila jedina mogućnost, jer su drugi diskovi bili ograničeni na 32MB.
Politike opsluživanja HD
Prva koja pada na pemet koja je korisna kao referentna tačka je FIFO ili FCFS(First Came
First Served). Ova politika ima osobinu da je pravedna. Zahtevi će biti opsluživani kojim su redom
stigli. Ova politika nikoga ne favorizuje. Ipak jako je neefikasna. Parametri diska:

Operativni sistemi - predavanja 45


Brzina rotacije je 5400 rpm; brzina pomeranja glave od jedne do druge staze najčešće je 1ms
do 3ms, a ako se ide na neku udaljenu traku onda to vreme neće biti zbir ovih vremena, već nešto
kraće. Zato postoji parametar koji se zove SEEK TIME.
Očigledno je da će FIFO da izazove veliko šetanje glave jer zahteve opslužujemo onim redom
kojim su došli, a ti zahtevi su slučajni.
Kako je HD izuzetno spor efikasnost je od primarne važnosti. Lako nalazimo politiku
optimizacije koja je pre svega efikasna, a to je SSF(Shorter Seek Frist). Zasniva se na tome da se prvo
opslužuje onaj zahtev do kojega je pomeranje glava najmanje. Pri dobijanju podataka sa diska gubi se
vreme na sledeće: seek time; rotaciono čekanje; vreme transfera. Seek time zavisi od mehanike za
pomeranje glave i tu su postignuti napretci tako da je tu razvoj došao do maksimuma.
Vreme transfera je takođe važan faktor. Često su zahtevi za čitanjem veći od jednog sektora.
Čitanje zavisi od: brzine rotacije diska, gustine zapisa… To čitanje donedavno nije bilo jednostavno,
jer kontroleri nisu bili dovoljno brzi. Do pre nekoliko godina postojao je jedan važan faktor: interliv
faktor. To je specijalan način smeštanja podataka na disk. Ako imamo datoteku koja se sastoji od 10
sektora. Prva ideja je da se tih 10 sektora upišu u jednu traku jedan za drugim. U starija vremena se
dešavalo da elektronika kontrolera i prebacivanje u memoriju nisu dovoljno efikasni, tako da kada 1
sektor prolazi ispod glave, on trpi odgovarajuću obradu u tom smislu da se signali prerađuju,
pretvaraju u bajtove i šalju u memoriju, što traje neko vreme. Kada dođe sledeći sektor pod glavu
podaci iz prethodnog sektora se još nisu obradili. Tako će taj sledeći sektor da pobegne, pa će morati
da se čeka sledeća rotacija. Zato se radilo nešto što se zove interleaving koje se sastojalo u tome da se
sketori jedne datoteke ne upisuju na disk jedan iza drugog. Za najstarije diskove fktor preplitanja je
išao 1:6. Danas je interliv 1:1, vreme čitanja je konstanta i brzina rotacije je praktično konstanta, tako
da je onaj prvi faktor seek timejedini podatak sa kojim ima smisla nešto raditi da bi se ukupno vreme
smanjilo. (pojavili se 7200rpm HD). Postoje tehnologije koje su uvedene iz razloga sigurnosti, ali
koje mogu imati značaja za brzinu čitanja. To su RAID tehnologije. To je ideja koja se primenjuje
uglavnom za velike servere gde se više diskova stavlja da rade zajedno.
Iz svega proizilazi da je politika SSF optimalna jer se tu nastoji da se glava pomera što manje.
Optimalna je u smislu maksimizacije protoka. Time se gubi pravednost, gube se i drugi parametri
optimalnosti: prosečno vreme čekanja. Prosečno vreme čekanja kod FIFO može da bude 20ms, ali
kod SSF prosečno vreme je npr. 10ms. To srednje vreme je napravljeno na jako nepravedan način.
Neki zahtevi su opsluženi za 1ms, neki za 5ms, neki 8, a neki 10… Raspon vremena opsluživanja je
1-100ms, dok je taj raspon kod FIFO 15-25ms.
Pretpostavimo da je sistem preopterećen i da zahtevi stalno stižu. Tada se lako pokaže da se
kod SSF glava zadržava negde kod sredine HD. Tada zatevi sa krajeva HD skoro nikad neće biti
opsluženi. Postoji algoritam za koji platimo 3% efikasnosti da bi dobili 90% pravednosti. Taj
algortima se zove scan. Ova politika je slična SSF, ali je zasnovana na tome da se opslužuje najbliži
zahtev s tim d aglava ide samo u jednom smeru. Zove se još i lift algoritam jer glava ide slično liftu.
Nema bojazni da će ovo da izazove neefikasnost jer je pretpostavka da zahteva ima mnogo, pa ako ih
ima na jednoj ima ih i na drugoj strani u odnosu na glavu. Što se pravednosti tiče mnogo je dobijeno,
jer sada nema neograničenog čekanja na unutrašnjim i spoljnim trakama.
Ipak postoji mala nepravednost, jer kako se ide sa spoljne strane prema unutra i obrnuto
srednje staze će biti pređene dva puta, a krajnje samo jednom. Opsluživanje u sredini je opet bolje
nego na krajevima.
Postoji i C-SCAN algoritam, to je lift u jednom pravcu. Ovde više nema favorizovanja
sredine. Sa malim gubitkom brzine ovaj algoritam eliminiše nepravednost.
Postoje razne modifikacije ovih algoritama za razne specijalne slučajeve, ali su ovi algoritmi
uglavnom principi koji treba da se shvate.
Uobičajeno je da se stavlja keš između HD i računara. To je jedan bafer koji je ili obična
memorija ili dodatna memorije na kontroleru gde se memorišu stvari za koje se ima utisak da bi
mogle dodatno da nam trebaju, uskoro, i time da se ubrza transfer. Kako to radi rešeno je na nivou
HD. U jednoj kutiji su HD, kontroler i ta memorija.

10. Fajl sistem

Operativni sistemi - predavanja 46


Za većinu korisnika je fajl sistem najvidljiviji aspekt operativnog sistema. Datoteke sadrže podatke i
programe. Operativni sistem implementira apstraktne koncepte upravljanja datotekama tako što vrši
upravljanje jedinicama sekundarne memorije.
10.1 Koncept datoteke
Datoteke se smeštaju na različite fizičke medijume kao što su magnetne trake, diskovi i slično. Svaki
od ovih uređaja ima svoje karakteristike i fizičku organizaciju. Radi pogodnijeg korišćenja
računarskog sistema operativni sistem pruža uniformni logički pogled na sekundarnu memoriju
apstrakujuću fizičke osobine pojedinog memorijskog uređaja i definišući logičku jedinicu – datoteku
(file). Datoteke se preslikavaju na fizičke uređaje. Dateteka je kolekcija logički srodnih podataka koja
ima svoje ime kao i neke druge atribute. Informacije smeštene u datoteci definiše kreator datoteke.
Različiti tipovi informacija mogu biti smešteni u datoteci: izvršni program, objektni program,
numerički podaci, tekst, itd. Fajl ima određenu definisanu strukturu saglasno njegovoj upotrebi. Jedno
od osnovnih pitanja je koliko od te strukture treba da bude poznato operativnom sistemu i podržano
od strane operativnog sistema.
U nekim operativnim sistemima softver prepoznaje strukturu datoteka i podržava pravilnu upotrebu
datoteka određene strukture. Na primer, ako pokušamo da izvršimo program čiji je izvorni kôd
izmenjen, sistem je u stanju da najpre automatski izvrši prevođenje izvornog kôda, a tek onda
izvršenje programa. Nedostatak ovog pristupa je povećana veličina operativnog sistema, jer mora da
postoji kôd za podršku različitih tipova datoteka, ma koliko da ima tih tipova. Sledeći problem je ako
se pojavi novi tip datoteke koji dotle nije bio podržan.
Druga krajnost je da operativni sistem ne nameće i ne podržava bilo kakve datoteke. Primer takvog
operativnog sistema je Unix koji sve datoteke vidi kao nizove bajtova. Ovakav pristup daje
maksimalnu fleksibilnost ali minimalnu podršku.
Prvi fajl sistemi bili su zasnovani na magnetnim trakama. Svaki fajl je implementiran njegovim
preslikavanjem na sopstveni kotur trake. Prednost ovog pristupa je u jednostavnosti, ali je nedostatak
u neefikasnosti, jer je većina datoteka relativno mala dok je kapacitet traka relativno veliki. Drugačiji,
ali sličan problem se javlja kada se pojavi veoma velika datoteka za čije smeštanje je potrebno više
traka. Da bi podržali ovu situaciju mnogi sistemi su podržavali datoteke na više volumena.
Da bi se rešio problem držanja relativno malih datoteka na skoro praznoj traci prešlo se na smeštanje
jednakog broja malih datoteka na jednu traku. Sada je nastao problem da se odredi koja datoteka je na
kojoj traci. Iz tih razloga je svakoj traci pridodat direktorijum. Direktorijum sadrži imena i lokacije
svake datoteke na traci, kao i dodatne informacije, kao što su veličina datoteke, datum i vreme
kreiranja itd. Pronalaženje datoteke sada zahteva pronalaženje odgovarajuće trake i pretraživanje
direktorijuma. Čitanje se odvija na isti način kao i kada smo imali samo jednu datoteku na traci, s tim
što se sada razlikuju znaci end-of-file i end-of-tape. Takođe se razlikuje premotavanje na početak
fajla i na početak trake.
Ovde postoje i druge teškoće. Zamislimo program koji čita alternativno slogove iz dve datoteke koje
su na istoj traci. Jedna od datoteka mora da se iskopira na posebnu traku ili će jedinica trake da troši
mnogo vremena krećući se od jedne do druge datoteke i nazad. Takođe, kod modifikacije datoteka,
sve datoteke sa trake se moraju kopirati i na druge trake i ponovo iskopirati na originalnu traku.
Mnogi od problema sa magnetnim trakama rešeni su kada se počelo sa upotrebom diskova. Disk je
podeljen na staze, a svaka staza je dalje podeljena na sektore. Sektor je najmanja jedinica informacije
koja se može pročitati sa diska ili koja se može upisati na disk. Veći diskovi imaju više tanjira, pri
čemu svaki tanjir ima dve površine. Da bi se pristupilo sektoru, moramo da specificiramo površinu,
stazu i sektor. Upisno-čitajuće glave se pozicioniraju na odgovarajuću stazu (seek time), elektronski
prebacuju na odgovarajuću površinu a onda se sačeka (latancy time -rotaciono kašnjenje) da se
rotacijom traženi sektor pozicionira ispod glave. Cilindar je skup staza koje su na istom rastojanju od
ose diska, ali se nalaze na različitim površinama tanjira. Nije potrebno traženje da se pristupi stazama
na istom cilindru. Prenos podataka između memorije i diska vrši se u jedinicama koje se sastoje od
jednog ili više sektora.
Diskovi se razlikuju od traka na dva načina. Pre svega, modifikacija datoteka se može vršiti na licu
mesta. Moguće je pročitati blok podataka, izmeniti ga i upisati na isto mesto. Osim toga postoji
direktan pristup svakom bloku podataka na disku.

Operativni sistemi - predavanja 47


Kao i trake, i diskovi imaju direktorijum koji ukazuje koje su datoteke na disku, zajedno sa podacima
koji se odnose na njihovu adresu na disku, veličinu i druge potrebne informacije.
10.2 Podrška datotekama
Koncept fajlova je implementiran operativnim sistemom. Obezbeđeni su sistemski pozivi za
kreiranje, upis, čitanje, premotavanje i brisanje datoteka. Da bi smo razumeli kako je fajl sistem
podržan, razmotrićemo ove operacije detaljnije kao i direktorijume.
10.2.1 Operacije sa datotekama
Pretpostavićemo da je fajl sistem zasnovan na diskovima. Razmotrimo šta operativni sistem mora da
uradi za svaku od pet osnovnih operacija sa datotekama.
• Kreiranje datoteke - Neophodna su dva koraka kod kreiranja datoteke. Najpre se mora naći prostor
u fajl sistemu za dotičnu datoteku. Zatim treba napraviti odgovarajuću stavku u direktorijumu. Ta
stavka beleži ime datoteke i njenu lokaciju u fajl sistemu.
• Upis u datoteku - Da bi se izvršio upis u datoteku mora da se načini sistemski poziv gde se
specificira i ime datoteke i informacija koja treba da se upiše u datoteku. Za dato ime datoteke sistem
pretražuje direktorijum da bi pronašao lokaciju datoteke. Stavka u direktorijumu treba da sadrži
pointer na tekući kraj datoteke. Korišćenjem tog pointera izračunava se adresa sledećeg bloka i
imformacija može da se upiše. Pointer upisa mora da se ažurira. Na taj način sukcesivni upisi se
mogu koristiti za upis sekvence blokova u datoteku.
• Čitanje datotekeke - Za čitanje datotetke sistemski poziv specificira ime datoteke i mesto u memoriji
gde sledeći blok datoteke treba da se smesti. I ovde se pretražuje direktorijum, a odgovarajuća stavka
treba da sadrži pointer na blok koji trebe sledeći da se pročita. Kada se čitanje bloka obavi, taj pointer
se ažurira. U opštem slučaju, datoteka se čita ili se u nju upisuje, pa iako je moguće da postoje dva
pointera, većina sistema ima samo jedan koji predstavlja tekuću pozicijudatoteke. I čitanje i upis
koriste isti pointer, štedeći prostor u odgovarajućoj stavci u direktorijumu i pojednostavljujući sistem.
• Pozicioniranje u datoteci – Pozicioniranje datoteke u stvari ne predstavlja pravu U/I aktivnost, već
se samo pretražuje direktoijum i u odgovarajućoj stavci se pointer tekuće pozicije resetuje da ukazuje
na početak.
• Brisanje datoteke - Za brisanje datoteke se u direktorijumu traži specificirana datoteka, a onda se
sav prostor dodeljen datoteci oslobađa, a dotična stavka u direktorijumu invalidira.
Primećujemo da je za sve opisane operacije potrebno pretraživanje direktorijuma. Da bi se izbeglo
ovo stalno pretraživanje mnogi sistemi vrše otvaranje datoteke kada ona počne da se stvarno koristi.
Operativni sistem kreira malu tabelu sa informacijama o svim otvorenim datotekama, što olakšava
pretraživanje. Kada datoteka više nije potrebna, ona se zatvarai odgovarajuća stavka briše iz tabele
otvorenih fajlova. Neki sistemi implicitno otvaraju datoteku kada se vrši prvo obraćanje. Datoteka se
automatski zatvara kada se program koji ju je otvorio završi. Većina sistema ipak zahteva da se
datoteke eksplicitno otvaraju od strane programera pomoću sitemskog poziva (open).
10.2.2 Direktorijum uređaja
Informacije koje se za svaku datoteku čuvaju u direktorijumu variraju od jednog do drugog
operativnog sistema. Sledeće informacije mogu se naći u direktorijumu (ne mora da znači da svi
sistemi čuvaju sve navedene informacije).
• Ime datoteke - Simboličko ime datoteke.
• Tip datoteke - Za one sisteme koji podržavaju različite tipove datoteka.
• Lokacija - Pointer na uređaj i lokaciju na tom uređaju gde se datoteka nalazi.
• Veličina - Trenutna veličina datoteke (u bajtovima, rečima ili blokovima) i maksimalna dozvoljena
veličina.
• Tekuća pozicija - Pointer na tekuću poziciju za čitanje ili upis u datoteku.
• Zaštita - Podatak o upravljanju pristupu radi čitanja, upisa, izvršavanja i dr.
• Brojač korišćenja - Ukazuje na broj procesa koji trenutno koriste (imaju otvorenu) dotičnu datoteku.
• Vreme, datum i identifikacija procesa - Ova informacija se može čuvati za kreiranje, poslednju
modifikaciju i poslednje korišćenje. Ovo može biti od koristi za zaštitu i nadgledanje upotrebe.
Da bi smo zapisali ove informacije za neku datoteku može nam biti potrebno od 16 do 1000
bajtova. U sistemima sa velikim brojem datoteka, veličina samog direktorijuma može biti i na hiljade
bajtova. Tako se direktorijum koji se nalazi na uređaju može učitavati u memoriju samo u manjim
delovima, po potrebi. Jasno je da se direktorijum može organizovati na više načina. Jedan od njih je je

Operativni sistemi - predavanja 48


linearna lista što zahteva linearno pretraživanje za pronalaženje odgovarajuće stavke. Odgovarajući
program je jednostavan ali troši previše vremena.
Druga struktura podataka koja se može koristiti za smeštanje direktorijuma je heš tabela. Najveći
problem sa heš tabelama jeste njihova generalno fiksirana veličina i zavisnost heš funkcije od veličine
heš tabele.
10.3 Metodi pristupa datotekama
Postoji više načina da se pristupi informacijama zapamćenim u datotekama. Neki sistemi podržavaju
samo jedan metod pristupa, dok kod mnogih postoji mogućnost izbora više metoda za pristup
datotekama.
10.3.1 Sekvencijalni pristup
Kod sekvencijalnog pristupa čitanje jednog bloka podataka automatski uvećava vrednost pointera, a
slično se dešava i kod upisa. Dakle, moguće je vršiti čitanje podataka samo u redosledu u kome su
upisani, odnosno vršiti upis uzastopnih blokova podataka. Ovakav pristup zasnovan je na modelu
datoteka koje su upisivane na magnetne trake koje su po svojoj prirodi sekvencijalni uređaji.
10.3.2 Direktni pristup
Alternativna metoda pristupa je direktni pristup što je karakteristično za model datoteka upisanih na
disk. Ovde se datoteka vidi kao numerisana sekvenca slogova fiksne dužine. Uz navođenje relativnog
broja bloka može se pristupiti proizvoljnom slogu datoteke.
10.3.3 Indeksni pristup
Ovaj metod koristi indeks za svaku datoteku koji koristi ukazatelje na svaki od blokova datoteke. Da
bi se pronašla stavka u datoteci, najpre se pretražuje indeks i onda koristi ukazatelj da bi se direktno
pristupilo odgovarajućem bloku datoteke i traženju željene stavke u njoj.
10.4 Metodi dodele prostora na disku
Postoje tri osnovne metode za dodelu prostora na disku. To su kontinualna, povezanai indeksna
dodela. Svaka od ovih metoda ima svoje prednosti i nedostatke, pa postoje sistemi koji podržavaju
sve tri metode. Međutim, češći je slučaj da jedan sistem koristi samo jednu od navedenih metoda.
10.4.1 Upravljanje slobodnim prostorom na disku
Za praćenje slobodnog prostora na disku sistem kreira listu slobodnog prostora. Ova lista sadrži sve
blokove na disku koji su slobodni, tj. nisu dodeljeni ni jednoj datoteci. Kada se datoteka kreira
pretražuje se lista slobodnog prostora da bi se u njoj pronašao željeni iznos slobodnog prostora i
dodelio datoteci. Kada se datoteka briše, prostor na disku koji je ona zauzimala se dodaje listi
slobodnog prostora. Uprkos imenu, ova lista se implementira kao bit mapa ili bitvektor. Svaki blok
predstavljen je jednim bitom, pri čemu, ako je blok slobodan, odgovarajući bit ima vrednost 0, a ako
je blok zauzet, vrednost odgovarajućeg bita je 1.
Drugi pristup je da se svi slobodni blokovi povežu u listu pri čemu se koristi ukazatelj na početak
liste. Ova šema nije naročito efikasna, jer za prelazak cele liste treba utrošiti dosta vremena.
Modifikacija ovog pristupa sastoji se u tome da se adrese n slobodnih blokova nalaze u prvom
slobodnom bloku (tada imamo n-1 zaista slobodnih blokova); poslednja adresa u bloku je adresa
narednog bloka koji sadrži adrese slobodnih blokova.
Jedan drugi pristup koristi činjenicu da više kontinualnih blokova može biti zauzeto ili oslobođeno.
Tada je bolje imati listu koja sadrži adresu prvog bloka u sekvenci slobodnih blokova i broj blokova u
toj sekvenci.
10.4.2 Metod kontinualne dodele
Kod ovog metoda se zahteva da svaka datoteka zauzima skup kontinualnih adresa na disku. Tada
stavka u direktorijumu za svaku datoteku sadrži početnu adresu datoteke i broj blokova koji su joj
dodeljeni. Međutim, javlja se problem kada treba pronaći prostor za novu datoteku. Ovaj problem se
može smatrati specijalnim slučajem opšteg problema dinamičke dodele memorije. Ovde prostor na
disku posmatramo kao veliko polje blokova. U proizvoljnom trenutku neki blokovi su zauzeti, dok su
ostali slobodni. Tako prostor na disku možemo smatrati kolekcijom zauzetih i slobodnih segmenata
gde je svaki segment kontinualan skup blokova. Slobodni segment naziva se rupaili šupljina. Ovde se
javlja problem fragmentacije koji se može rešavati kompakcijom. Postoje i drugi problemi vezani za
kontinualnu dodelu. Osnovni problem je odrediti koliko prostora da se dodeli datoteci. Kada se
datoteka kreira, čitav iznos prostora treba dodeliti datoteci. Kako korisnik zna veličinu datoteke koja
se kreira? U nekim slučajevima ovo pitanje je jednostavno, na primer, kada se kopira postojeća

Operativni sistemi - predavanja 49


datoteka, ali je, u opštem slučaju, tu procenu teško izvršiti. Ako dodelimo malo prostora datoteci,
uskoro ćemo doći u situaciju da ona ne može više da se proširuje, jer prostor na oba kraja datoteke
može biti zauzet od strane drugih datoteka. Dve mogućnosti stoje na raspolaganju u takvom slučaju.
Prva je da se korisnički program terminira uz odgovarajuću poruku. Druga mogućnost je da se potraži
veća šupljina u koju možemo da smestimo datoteku, oslobađajući prethodno zauzeti prostor. Ovo se,
uz utrošak vremena, može ponavljati sve dok postoji slobodan prostor. Čak i kada unapred znamo
količinu potrebnog prostora za neku datoteku koju kreiramo, može se ispostaviti da nije efikasano da
sav prostor dodelimo datoteci. Datoteke koje narastaju sporo, tokom dugog vremenskog perioda
(tokom meseci ili čak godina) u tom slučaju u dobroj meri nepotrebno zauzimaju prostor.
10.4.3 Metod povezane dodele
Kod ove metode svaka datoteka predstavlja povezanu listu blokova na disku, pri čemu se ti blokovi
mogu nalaziti bilo gde na disku. Direktorijum sadrži ukazatelj na prvi i poslednji blok datoteke. Ovde
nemamo eksternu fragmentaciju. Takođe, pri kreiranju datoteke nije potrebno deklarisati veličinu
datoteke, a datoteka može da narasta dokle god ima slobodnih blokova na disku. To znači da nije
potrebno vršiti kompakciju diska. Osnovni problem kod ovog načina dodele je što je ovaj metod
efikasan samo kod sekvencijalnog pristupa datoteci. Uz to se troši i prostor za ukazatelje. Takođe je
smanjena pouzdanost, jer u slučaju oštećenja ukazatelja nastaju neželjene posledice. Jedno rešenje
ovog problema je korišćenje dvostruko povezanih lista ili pamćenje imena datoteke i relativnog broja
bloka u svakom bloku; sve ovo zahteva dodatni utrošak vremena i memorije za svaku datoteku.
10.4.4 Metod indeksne dodele
Ovaj metod rešava problem povezane dodele u smislu direktnog pristupa. Ovde su svi ukazatelji
zajedno smešteni u indeksni blok. Svaka datoteka ima sopstveni indeksni blok koji predstavlja polje
adresa blokova na disku. Direktorijum sadrži adresu indeksnog bloka. Indeksna dodela podržava
direktni pristup a pri tom nema eksterne fragmentacije. Ipak postoji problem utroška prostora zbog
ukazatelja u indeksnom bloku koji je veći nego kod povezane dodele. Ovaj problem je povezan sa
veličinom ideksnog bloka pa se teži da on bude relativno mali, dok se za veće datoteke ulančava više
indeksnih blokova ili se koristi indeksiranje u dva nivoa.
Još jedna alternativa je da u adresaru čuvamo prvih nekoliko ukazatelja indeksnog bloka, tako da za
male datoteke indeksni blok nije potreban (Unix).
10.5 Strukture podataka za pamćenje datoteka
Operativni sistem koristi tri vrste struktura podataka kod implementiranja datoteka:
1. Sekvenca bitova – ne vodi se računa o tome šta je u datoteci već je samo potreban podatak gde
počinje sekvenca za određenu datoteku i koliko je ona dugačka. UNIX i Windows koriste ovu
strukturu.
2. Sekvenca slogova fiksne dužine – imamo fiksni broj bajtova udruženih u slog koji se ređaju jedan
za drugim. Nijedan operativni sistem opšte namene ne koristi ovu strukturu, već se ona strogo koristi
kod data base orijentisanim operativnim sistemima.
3. Stablo (indeksna sekvenca)– ovde su čvorovi slogovi datoteke. Svaki slog ima svoj ključ na fiksnoj
poziciji u slogu. Stablo se sortira po određenom ključu i predstavlja vrlo efikasno rešenje kod velikih
mainframe računara.
10.6 Linkovi
Link predstavlja sredstvo pomoću kojeg možemo iz više direktorijuma pristupiti istom fajlu (isti fajl
možemo “videti” ispod više direktorijuma). Pod Unixom linkove delimo na tvrde i meke
(simboličke).
Tvrdi link: pri kreiranju tvrdog linka, pravi se samo novi slog u direktorijumu sa imenom fajla za
koji pravimo link i stavimo adresu i-čvora originalne datoteke. Znači, više imena pokazuju na isti i-
čvor. Da bismo vodili računa o broju linkova, i-čvorovi u skupu atributa fajla treba da čuvaju i taj
podatak. Ako u nekom folderu izdamo komandu za brisanje fajla, OS najpre pogleda broj tvrdih
linkova – ako je 1, briše se slog iz direktorijuma i oslobađaju se blokovi zauzeti od strane fajla. Ako
imamo više linkova, briše se samo slog iz direktorijuma a brojač linkova se smanji za jedan.
Meki link (simbolički link): pri kreiranju mekog linka, pravi se novi fajl tipa link – (pravimo i-čvor
za novi fajl, i eventualno zauzmemo još jedan blok za sadržaj fajla – a sadržaj je jedino putanja do
fajla na koji link pokazuje, zatim ubacimo novi slog u direktorijum sa adresom novog link-fajla).
Brojač linkova originala se ne menja. Ako izdamo komandu za brisanje originalnog fajla, OS ne vodi

Operativni sistemi - predavanja 50


računa o simboličkim linkovima, briše fajl (ako nema više tvrdih linkova). Ako sada pokušamo
pristupiti originalu preko mekog linka, OS neće naći putanju, pa će javiti da fajl ne postoji. Ako
izbrišemo simbolički link, to nema nikakvog uticaja na original.
Problem mekih linkova: sporost – da bi OS došao do sadržaja original, mora najpre naći i-čvor link-
fajla, zatim blok sa sadržajem link-fajla, pa da izčita putanju, da potraži original u hijerarhiji
direktorijuma i konačno, na kraju da otvori originalnu datoteku za rad. Mogli bismo malo poboljšati
performanse ako putanju stavimo direktno u i-čvor linka.
Prednost mekih linkova: meki link – pošto sadrži putanju originala a ne adresu i-čvora – može
pokazati na bilo koji fajl bilo gde na mreži, čak i na Internetu.
Možemo imati još neke probleme pri korišćenju linkova: npr. imamo fajl PERA.TXT u direktorijumu
/usr/pera i tvrdi link u folderu /usr/pera/doc. Kopiramo /usr/pera zajedno sa svim poddirektorijumima.
Treba dodatna pažnja da ne pravimo dve kopije od PERA.TXT.
11 čas
10.5 Sistemi direktorijuma
Adresar (direktorijum, katalog, folder, fascikla ili sadržaj volumena) predstavlja jednu tablicu koja
sadrži imena svih datoteka koje su smeštene na sekundarnoj jedinici. Datoteke predstavljaju
pojedinačne stavke u adresaru gde svaka stavka čuva relevantne informacije o svakoj datoteci kao što
su ime, lokacija, veličina i tip datoteka na tom uređaju. Njegova osnovna uloga je da omogući
preslikavanje simboličkog imena datoteke u stvarnu fizičku adresu na sekundarnoj memorijskoj
jedinici. Mi datoteku imenijemo nekim opisnim imenom određene dužine i pamtimo je po tom imenu
koje je samo deo te logičke adrese. Stvarna, fizička adresa na kojoj se stvarno nalazi ova datoteka
sastoji se više parametara kao što su oznaka volumena/diskova, brojeva cilindra, brojeva glava kao i
adrese odgovarajučih sektora. Najlakše bi bilo da fajl sistem sadrži samo jedan adresar koji bi pamtio
sve potrebne podatke za sve datoteke. Takav adresar poznat je kao flat ili jednonivovski adresar.
Međutim, to bi moglo da zadovolji jednokorisničke sisteme sa ograničenim sekundarnim
memorijskim prostorom. Takva implementacija bila bi veoma prosta i za posledicu bi imala i mnoge
nedostatke od kojih se dva izdvajaju i onemogučavaju primenu ovakvog adresara. To su pre svega
ogromna veličina tablice kao i sistemski problem kod višekorisničkog rada tj. konflikta kod davanja
imena datotekama. Kako sekundarni memorijski prostor i broj korisnika rastu, postaje veoma teško
organizovati i pratiti sve te datoteke. Rešenje ovog problema je da se uvede struktura direktorijuma u
fajl sistem. Struktura direktorijuma obezbeđuje mehanizme za organizovanje mnoštva fajlova u fajl
sistemu. Ona može da se proteže i na više jedinica diskova. Tako korisnik treba da posmatra samo
logičke direktorijume i strukturu datoteka, potpuno ignorišući probleme fizičke dodele prostora
datotekama. U stvari, mnogi sistemi imaju dve odvojene strukture direktorijuma: direktorijum uređaja
i direktorijume datoteka. Direktorijum uređaja je smešten na svakom fizičkom uređaju i opisuje sve
datoteke na tom uređaju, koncentrišući se na fizičke osobine svake datoteke (lokacija, dužina, način
dodele itd.). Direktorijumi datoteka predstavljaju logičku organizaciju datoteka na svim uređajima,
koncentrišući se na logičke osobine (ime, tip, vlasnik, pristupni kod itd.). Direktorijum datoteke može
jednostavno da ukazuje na odgovarajuću stavku u direktorijumu uređaja da bi se pročitale fizičke
osobine datoteke ili da sadrži kopiju te informacije. Naš glavni interes će biti struktura direktorijuma
datoteka. Različite strukture direktorijuma datoteka su do sada predlagane i korišćene.
Najjednostavnija struktura direktorijuma je jednonivovski direktorijum. Sve datoteke se nalaze na
istom direktorijumu, što je lako podržati i razumeti. Međutim, ovde postoji problem kada broj
datoteka naraste ili se poveća broj korisnika, jer svaka datoteka treba da ima jedinstveno ime. Najveći
nedostatak jednonivovskog direktorijuma je u konfuziji koja nastaje kada imamo više korisnika.
Standardno rešenje je da se za svakog korisnika kreira odvojeni direktorijum. Korisnički
direktorijumi predstavljaju logičku, a ne fizičku organizaciju. Dvonivovski direktorijumi mogu se
smatrati dvonivovskim stablima. Kao prirodno uopštenje ovog pristupa nastala je hijerarhijska
struktura direktorijuma poznata kao stablo ili aciklični graf. Korisnicima se sada omogućava da
kreiraju sopstvene poddirektorijume i na taj način organizuju svoje datoteke. Stablo direktorijuma
ima svoj koren direktorijum. Svaka datoteka u sistemu ima jedinstveno ime puta. Ovde razlikujemo
dve vrste imena puta i to apsolutni (potpuni) i relativni (delimični) put. Apsolutni put predstavlja put
od korena stabla, preko svih poddirektorijuma, do specificirane datoteke. Ako kao polaznu referencu

Operativni sistemi - predavanja 51


ne koristimo koren direktorijuma već bilo koji adresar, takvo navođenje puta nazivamo relativno.
Hijerarhijski organizovan adresar ima određene prednosti nad ostalim rešenjima a to su:
o Olakšava dodelu unikatnih imena datotekama
o Olakšava korišćenje i zaštitu datoteka u višekorisnićkom režimu rada
o Olakšava rad sa adresarima
Već smo ranije napomenuli da svaka staka u adresaru sadrži relevantne podatke o svakoj datoteci.
Koji su to podaci zavisi od vrste operativnog sistema kao i njegove realizacije. Navešćemo neke
tipične informacije koje se nalaze u gotovo svakom adresaru: ime, tip i verzija datoteke, ukazatelje na
prvi blok na sekundarnoj jedinici gde se datoteka čuva i atribute datoteke – veličina, vlasnik, prava
pristupa, datum kreiranja, datum zadnjeg korišćenja, datum zadnjeg pamćenja i td.
Osnovne operacije koje se izvršavaju nad direktorijumom su:
• Pretraživanje - Potrebno je da budemo u stanju da pretražujemo direktorijum da bi pronašli stavku
za određeni fajl. Pošto fajlovi imaju simbolička imena a slična imena mogu da ukazuju na srodne
datoteke, treba da budemo u stanju da pronalazimo sve datoteke koje odgovaraju nekom šablonu.
• Kreiranje datoteke-Treba da postoji mogućnost kreiranja i dodavanja novih datoteka direktorijumu.
• Brisanje datoteka - Kada datoteka nije više potrebna, vrši se njeno uklanjanje iz direktorijuma.
• Listanje direktorijuma - Potrebno je da budemo u stanju da izlistamo fajlove koji su u direktorijumu
i sadržaj stavki direktorijuma za svaku datoteku u toj listi.
• Pamćenje datoteka (bekap) - Radi povećane pouzdanosti sistema dobro je povremeno pamtiti
sadržaj strukture fajl sistema. Ovo se često vrši kopiranjem svih datoteka na magnetnu traku. Tako
imamo rezervnu kopiju u slučaju otkaza sistema, ili ako se datoteka više ne koristi, možemo da
oslobodimo njen prostor na disku.
Kada se kreira nova datoteka automatski se u odgovarajući adresar dodaje nova stavka sa
odgovarajućim informacijama o novoj datoteci. Isto tako prilikom brisanja datoteke uklanja se
odgovarajuća stavka iz adresara. Adresar možemo pamtiti u radnoj RAM memoriji ili u sekundarnoj
memoriji (hard disk). Sa gledišta brzine, pamćenje adresara u radnoj memoriji je znatno efikasnije.
Ali ta metoda ima nedostatke u vidu zauzimanja znatnog dela memorije kao i gubljenje trenutnog
adresara pri nestanku napajanja. Zato se adresari pamte u sekundarnoj memoriji a pri montiranju
određenog volumena kopiraju se (ceo ili delimično) u radnoj memoriji. Operativni sistem sada mora
da vodi računa o promenama u adresaru i da ga adekvatno pamti na sekundarnoj memoriji kako ne bi
došlo do gubljenja podataka. On to radi tako što vodi dve vrste tablica: tablicu simboličkih imena
(Symbolic File Directory) i osnovni adresar fajlova (Basic File Directory). Prva tabela pamti
simbolička imena datoteka i pointer/ukazatelj ID koji predstavlja jedinstvenu internu identifikaciju te
datoteke preko koje se pristupa informacijama u drugoj tabeli. U BSD tabeli se čuvaju gotovo svi
karakteristični podaci koje smo ranije naveli tip, adresu prvog sloga, veličinu, datum kreiranja i td. Za
svaki adresar se formiraju posebne tablice u kojima svaka datoteka zauzima jednu stavku. Kada
korisnik izda zahtev za pristup nekoj datoteci on navodi njeno simboločko ime. Operativni sistem
tada u tabeli SFD pronalazi jedinstveni identifikacij(ID) i na osnovu nje pristupa ostalim podacima za
tu datoteku. Da bi se smanjila učestalost pristupa tablicama (koje su na sekundarnoj memoriji) očitani
podaci se smeštaju u radnu memoriju i čine File Control Block te datoteke. Zatvaranjem datoteke
uklanja se o odgovarajući FCB te datoteke iz radne memorije. Drugim rečima u radnoj memoriji se
nalaze samo podaci otvorenih datoteka tj. onih sa kojima se radi.
Postoje više vrsta implementacije ovih tabela u zavisnosti od operativnog sistema. Navešćemo kako
se to radi kod LINUX i UNIX-a:
Ime fajla pointer ------ BFD SFD ID BFD ID atributi
Ime fajla pointer ------ BFD SFD ID ID atributi
Ime fajla pointer ------ BFD ID atributi
.....
Ime fajla pointer ------ BFD

Kod DOS i Windows-a imamo jednu jedinstvenu tabelu sa imenom datoteke i odgovarajučih atributa.
Ovde je tablica adresara fiksne veličine (ograničen je broj ulaza kao i veličina stavki) za razliku od
predhodne realizacije gde zasebne strukture ne moraju biti fiksne veličine. Osnovni problem se sastoji
u preslikavanju imena tj. logičkih naziva datoteka u njihove stvarne fizičke adrese. Različiti

Operativni sistemi - predavanja 52


operativni sistemi imaju različita pravila kod davanja logičkih imena: kod MS DOS-a je 8+3 (8
karaktera za ime a 3 za ekstenziju), kod Windows-a nema nekog ograničenja za dužinu (obično se
stavlja da je to 256 karaktera) ali svaki fajl ima dva imena dugo i kratko(8+3). Naime, posebne rutine
konvertuju dugacka imena u kratka tako što uzimaju prvih 6 slova iz dugog imena i dodaju znak ~ i
broj po kome se razlikuju ovi kratki nazivi od onih koji imaju ista prva 6 slova. Kod UNIX-a su
imena datoteka case osetljiva tj. pravi se razlika između velikih i malih slova što kod Windowsa i
MS-DOS-a nije slučaj. Sve to pravi velike probleme kod pamćenja imena datoteka jer se javljaju
imena promenljive dužine. U praksi se koriste dva rešenja i to:
1. ulazi sa promenljivom dužinom – Veličina stavki je ovde fiksna i iznosi 4 byte ali je broj stavki po
jednoj datoteci različit i zavisi od podataka koji se pamte. Prvo se pamti dužina ulaza za datoteku,
zatim atributi te datoteke i na kraju ime datoteke. Osnovni nedostatak ovog rešenja je pojava eksterne
fragmentacije u tablicama gde se pamte adresari. Zbog različitog broja stavki koje se koriste za
pamčenje datoteka prilikom brisanja istih javljaju se različite šupljine u tabelama. Kada na tim
mestima upišemo novo formirane datoteke može se desiti da one zauzmu manji broj stavki tako da
ostanu prazni prostori u tablicama. Defragmentacija ovde nije jednostavna jer drugi programi imaju
pointere na datoteke koji se nalaze u tablicama pa je potrebno i njih ažurirati prilikom
defragmentacije. Drugi problem je da se zbog velike dužine ulaza datoteke, zauzima puno operativne
memorije kod njenog aktiviranja.
2. ulazi sa fiksnom dužinom – ovde se lako brišu i dodaju novi ulazi pošto su svi iste veličine. Treba
samo voditi računa o tome koji su ulazi slobodni. U tabeli se pamti pointer na ime datoteke i atributi a
u posebnom fajlu se nalaze imena datoteka koje se nadovezuju jedna na drugo.
Kod oba rešenja adresari se pretržuju linearno (sekvencijalno). Ako imamo velike adresare sa velikim
brojem datoteka to može da bude dosta sporo. Da bi ubrzali pretraživanje takvih tablica koristimo se
hash tablicama sa odgovarajučim funkcijama koje nam omogućavaju brzo pretraživanje i
pronalaženje traženih podataka. Drugi način je korišćenje keš memorije i standardnih tehnika
keširanja. Svi podaci vezani za datoteke se pamte u keš memoriji. Prilikom traženja neke datoteke
prvo se obraćamo keš memoriji, pa ako tu ne pronađemo tražene podatke tek se onda pretražuje
sekundarna memorija.
Neki primeri realizacije adresara kod različitih operativnih sistema:
1. CP/M
CP/M je višekorisnički OS, ima samo jedan direktorijum. Svi fajlovi svih korisnika su tamo. Svakom
fajlu se dodeljuje jedan ili veći broj slogova sa sledećim poljima:
broj
1 8 3 1 2 1
bajtova
ekstenzija redni broj adresa adresa adresa
kod ime
opis ( tip ) broj rezervisano zauzetih prvog drugog ....... bloka
korisnika fajla
fajla opisa blokova bloka bloka 16.

Svaki korisnik ima svoj jedinstveni idenkifikacioni broj koji se čuva u prvom bajtu, znači
možemo imati najviše do 256 korisnika. Zatim sledi ime i tip fajla. Posle toga redni broj opisa – ako
fajlu nije dovoljno 16 blokova, dobija još jedan opis. Prvi opis ima redni broj 0, drugi 1 itd. Razlika
između ovih slogova je jedino u rednom broju i u listi zauzetih blokova. Karakteristika CP/M sistema
je da ne zna tačnu veličinu fajlova (bajt-po-bajt), već samo blokovsku velič inu. 2. MS-DOS
Podržava hijerarhijsku realizaciju direktorijuma. Fajlovima se dodeljuju slogovi sledeće strukture:
broj
8 3 1 10 2 2 2 4
bajtova
adresa velič ina
ime ekstenzija vreme datum
opis atributi rezervisano prvog fajla u
fajla (tip) fajla kreiranja kreiranja
bloka bajtovima
Jednokorisnički, zna tačnu veličinu fajlova (u bajtovima). Pogledamo u slogu adresu prvog bloka, a
adrese ostalih tražimo u FAT-u.
3. UNIX
Najjednostavnije rešenje:čuvamo samo adresu i-čvora i ime fajla. Atributi fajla se nalaze unutar i-
čvora.

Operativni sistemi - predavanja 53


Primer: kako OS nalazi putanju /usr/ast/mbox ? Objašnjenje ćemo dati pomoću UNIXove
realizacije: krenemo od korenskog direktorijuma (i-čvor korenskog direktorijuma je na fiksiranom
mestu – bloku), otvorimo fajl direktorijuma – sadrži slogove oblika (adresa i-čvora, ime fajla).
Potražimo slog sa imenom fajla usr i uzmemo adresu i-čvora. Odemo do tog i-čvora – sadrži atribute
za usr i adrese blokova gde je sadržaj tog fajla-direktorijuma. U tim blokovima tražimo slog sa
imenom fajla ast i uzmemo adresu i-čvora. Odemo do tog i-čvora i u navedenim blokovima (sadržaj
fajla-direktorijuma ast) tražimo slog sa imenom fajla mbox da bismo dobili adresu i-čvora.
Pouzdanost i performanse fajl sistema
Pouzdanost fajl sistema
Loši blokovi
Mediji za čuvanje podataka mogu imati loše blokove – fizički oštećene delove medijuma. Za
izbegavanje loših blokova imamo dva rešenja:
Hardversko–kontroler diska vodi računa o lošim blokovima, ako želimo pristupiti oštećenom bloku
(radi pisanja), kontroler će naš zahtev preusmeriti ka drugom, neoštećenom (i nekorišćenom) bloku.
Softversko – korisnik ili OS pravi poseban fajl koji sadrži sve loše blokove na disku. Na taj način ti
blokovi su izbačeni iz skupa slobodnih (neiskorišćenih) blokova.
Sigurnosne kopije (backup)
Pored eliminisanja loših blokova, radi povećanja pouzdanosti sistema, poželjno je u
određenim vremenskim intervalima napraviti sigurnosne kopije važnih fajlova. To može uraditi i sam
korisnik ili OS. Neke tehnike:
1. Koristimo dva diska – A i B. Oba diska delimo na dva dela: deo za podatke i deo za sigurnosne
kopije. Kada dođe vreme za backup, prekopiramo podatke diska A u deo diska B za sigurnosne
kopije, a podatke diska B u deo za sigurnosne kopije diska A. Na taj način, ako se pokvari bilo koji
disk, na drugom disku imamo sve podatke. Nedostatak: trošimo jako mnogo mesta za sigurnosne
kopije i jako mnogo vremena za backup.
2. Nećemo prekopirati sve podatke, samo fajlove koji su izmenjeni od poslednjeg backup-a. MSDOS
npr. ima podršku za ovaj način arhiviranja: svaki fajl ima atribut bit sa imenom archive– kada
izvšimo backup, ovaj bit se resetuje. Ako izmenimo sadržaj fajla, bit se setuje.
Konzistentnost (file system consistency)
Mnogi sistemi pročitaju sadržaj nekih blokova, rade sa njima u memoriji i pišu ih natrag na
disk kasnije. Ako padne sistem pre nego što uspemo vratiti promenjene blokove, može doći do
problema. Ako je reč o blokovima koji sadrže i-č vorove ili opise direktorijuma, greška može biti vrlo
ozbiljna. Da bismo izbegli takve situacije, potrebno je obezbediti neke pomoćne programe za
ispravljanje nastalih grešaka. Npr. scandisk pod DOS-om ili Windowsima. Imamo dve vrste provere
konzistentnosti:
1. Konzistentnost blokova: pravimo tabelu za blokove. Za svaki blok stavimo po dva brojača: prvi
pokazuje koliko puta se dati blok javlja u listi zauzetih blokova, a drugi u listi slobodnih blokova.
Tada idemo redom po i-čvorovima i gledamo koje blokove koriste fajlovi – pri tome povećavamo
prvi brojač odgovarajućih blokova. Zatim gledamo listu slobodnih blokova (ili bitnu mapu) i isto tako
povećamo drugi brojač . Na kraju dobijamo rezultat:
- ako je vrednost jednog brojača 1 a drugog 0, onda je sve u redu – blok je ili zauzet ili slobodan
- ako je vrednost oba brojača 0, znači da blok nije ni zauzet, ni slobodan – greška!, našli smo blok
koji je izgubljen: nije iskorišćen a ne može biti ni u budućnosti jer nije ni evidentiran kao slobodan.
Rešenje: proglasimo ga slobodnim
- ako je vrednost prvog brojač a 0 a drugog veći od 1 – to znači, da je blok evidentiran više puta kao
slobodan (može biti samo u slučaju da koristimo povezanu listu, u slučaju bitne mape to se ne može
desiti). Rešenje: popravimo listu slobodnih blokova – izbacimo duplikate
- ako je vrednost prvog brojača veći od 1 a vrednost drugog nula – blok pripada više od jednog fajla.
Rešenje: ako blok pripada n fajlu, zauzmemo jos n-1 blokova, prekopiramo sadržaj u te blokove i

Operativni sistemi - predavanja 54


ažuriramo i-čvorove. Posle, za svaki slučaj javimo i korisniku šta smo uradili.
- ako je vrednost oba brojača veći od 0 – to znači da je blok evidentiran i kao zauzet i kao slobodan.
Rešenje: izbacimo iz liste slobodnih blokova.
2. Konzistentnost fajlova: Idemo po folderima od korenskog direktorijuma i za svaki i-čvor
dodeljujemo po jedan brojač . Svaki put kad naiđemo na isti fajl, povećamo brojač . Na kraju idemo
redom po i-čvorovima i upoređujemo tako dobijen brojač sa brojačem tvrdih linkova unutar i-čvora.
Rezultat može biti:
- vrednost brojača odgovara broju tvrdih linkova nutar i-čvora – nema grešaka
- vrednost brojača je veći od broja tvrdih linkova – greška!! Ako izbrišemo fajl, može se desiti da
imamo link na neiskorišćen blok. Posle neko iskoristi taj blok i sad imamo link koji pokazuje na ko
zna šta... Rešenje: brojač tvrdih linkova preuzima vrednost drugog brojača
- broj tvrdih linkova je veći od vrednosti brojača – greška!! Čak i ako svi korisnici izbrišu sve tvrde
linkove na fajl, blok neće biti prebačen u skup slobodnih blokova. Rešenje: brojač tvrdih linkova
uzima vrednost drugog brojača.
Performanse fajl sistema
Pristup disku je mnogo sporiji od pristupa memoriji, pa su mnogi sistemi dizajnirani tako da
se smanji broj pristupa disku. Za ostvarenje tog cilja, najčešće se koristi bafer ili keš (buffer, cache).
Keš se sastoji od skupa blokova koji logički pripadaju disku, ali se, radi bržeg pristupa, čuvaju u
memoriji. Ako se javlja zahtev za pristup nekom bloku, najpre proverimo da li je u kešu, ako jeste,
uzmemo podatke iz keša. Ako nije, učitamo sa diska u keš, i podatke čitamo iz keša. Ako treba uč
itati neki blok sa diska u keš, potrebno je izabrati neki blok koji ć e biti izbač en iz keša. Za izbor
možemo koristiti sve algoritme koje smo koristili kod stranič enja (paging). Ako je blok, koji se
izbacuje izmenjen, moramo njegov sadržaj vratiti na disk.
Uzmimo na primer LRU algoritam.
Pri izboru bloka za izbacivanje treba uzeti u obzir i sledeće stvari:
1. Da li će blok uskoro ponovo biti potreban ? Blokove delimo u grupe: i-čvororovi, SIB,DIB,TIB,
deo direktorijuma, popunjen blok, parcijalno popunjen blok. Parcijalno popunjene blokove stavimo
na kraj liste jer ćemo verovatno još upisivati podatke u njih, popunjeni blokovi idu na početak liste da
bi se što pre izbacili na disk.
2. Da li je blok od esencijalne važnosti za konzistentnost fajl sistema? (i-čvorovi, direktorijumi)
Ako je blok bitan za konzistenciju fajl sistema, treba ga što pre prebaciti na disk. Time ćemo smanjiti
mogućnost grešaka ako dođe do pada sistema. U ovu grupu spadaju blokovi i-čvorova,
SIB,DIB,TIB,direktorijumi.
3. Briga o korisnicima. Vodimo računa o tome da očuvamo konzistentnost fajl sistema, pa guramo
bitne blokove ka početku liste da ih što pre prebacimo na disk. Korisnik piše izveštaj u text editoru.
Napiše 10 stranica, čak i ako periodično kaže editoru da prebaci dokument na disk, postoji dobra
šansa da ostane u kešu – dajemo prednost bitnijim blokovima. Ode struja na trenutak, nemamo UPS,
odu tih 10 stranica sa strujom. Fajl sistem je konzistentan, a korisnik je besan, lupa po tastaturi i baca
monitor preko prozora.
Neka rešenja:
UNIX: imamo proces koji se zove sync. Njegov zadatak je da svakih 30 sekundi protrči kroz
keš i prebaci sve izmenjene blokove na disk. Na taj način, ako dođe do pada sistema, gubimo samo
rad posledjnih 30 sekundi. To je efikasno, ali nepouzdano rešenje
DOS: svaki izmenjen blok odmah se prebacuje na disk. Time se popravlja pouzdanost, ali se
kvari efikasnost – praktično ubrzanje imamo samo kada čitamo sadržaj bloka koji je u kešu.
Pored keša, i sami korisnički programi mogu imati svoje interne bafere za skladištenje
podataka što dodatno komplicira stvari. Keširanje nije jedini način za poboljšanje performanse fajl
sistema. Druga tehnika je da blokove kojima ćemo verovatno pristupati istovremeno, stavimo što
bliže što možemo (da smanjimo vreme pozicioniranja).
Spašavanje fajlova
U nadležnosti sloja za upravljanje fajlovima nalazi se i podrška spašavanju (saving) fajlova,
čiji cilj je da se redovno prave kopije postojećih (svih, ili samo u međuvremenu izmijenjenih,
odnosno stvorenih) datoteka. Na osnovu ovakvih kopija moguće je rekonstruisati sadržaj oštećenih
datoteka. Do oštećenja datoteka dolazi na razne načine, na primjer, pojavom loših (neispravnih)

Operativni sistemi - predavanja 55


blokova. Kada se otkriju, loši blokovi se izbacuju iz upotrebe. Jedan način da se to postigne je da se,
na primjer, formira datoteka loših blokova.
PRIMERI FAJL SISTEMA
U ovom poglavlju razmotrićemo neke od postojećih fajl sistema.
MS-DOS fajl sistem
MS-DOS radi samo na Intelovim platformama i ne podržava multiprogramiranje. Prva verzija
DOS-a bila je ograničena na rad sa samo jednim direktorijumom. Od verzije MS-DOS 2.0,
funkcionalnost fajl sistema se umnogome proširila. Najveće unapređenje je bilo uvođenje
hijerarhijskog fajl sistema po kome su direktorijumi mogli biti ugnježdavani u dubinu. Ovo znači da
je root direktorijum (koji je i dalje imao fiksnu maksimalnu veličinu) mogao sadržati
poddirektorijume, a oni opet svoje poddirektorijume i tako u nedogled.
Uobičajeno je da svaka različita aplikacija u root-u kreira svoj direktorijum iz koga će da
startuje i u kome će biti svi njoj potrebni fajlovi, tako da različite aplikacije ne dolaze u konflikt. Ne
postoji ograničenje u broju direktorijuma ili fajlova koji mogu biti kreirani. Ovjde ne postoji koncept
više različitih korisnika. Ulogovani korisnik ima pristup svim fajlovima.
Iako direktorijumi kod MS-DOS-a imaju promjenljivu veličinu, oni koriste upise fiksne dužine
od 32 bajta. Format upisa u direktorijum kod MS-DOS-a prikazan je na slici 2.11. On sadrži ime
fajla, atribute, vrijeme i datum kreiranja, početni blok i tačnu veličinu fajla. Ime fajla kraće od 8+3
karaktera je poravnato u lijevu stanu sa prazninama u nastavku, za svako polje pojedinačno. Polje za
atribute je novo i sadrži bitove koji pokazuju da li je fajl read-only, potreban za arhiviranje, sakriven
ili je sistemski fajl. Read-only fajlovi se ne mogu mijenjati. Arhiv bit nema neke sistemske funkcije.
Hidden bit skriva fajl tako da ne bude vidljiv u listingu direktorijuma. Sistem bit takođe skriva fajl i
onemogućuje brisanje komandom del koja može biti i slučajno pritisnuta. Upis u direktorijum takođe
sadrži datum i vrijeme kada je fajl kreiran ili zadnji put izmjenjen.

MS-DOS prati blokove fajla preko tabele za alokaciju fajlova koja se nalazi u glavnoj
memoriji. Upis u direktorijum sadrži broj prvog bloka fajla. Ovaj broj se koristi kao indeks kod 64K
upisa FAT (File Allocation Table) u glavnu memoriju. Prateći lanac, svi blokovi se mogu pronaći.
Za MS-DOS, fajl sistem se pojavljuje u tri verzije: FAT-12, FAT-16 i FAT-32, zavisno od
toga koliko bita sadrži adresa na disku. Za sve FAT-ove, blok diska može biti setovan na multipl od
512 bajtova, sa setom dozvoljenih veličina blokova različitih za svaku varijantu. Prva verzija MS-
DOS-a koristila je FAT-12 sa blokovima od 512 bajtova, dajući tako maksimalnu veličinu particije od
12
2 x 512 bajtova. Sa ovim parametrima, maksimalna veličina particije diska bila je 2 MB a veličina
FAT tabele u memoriji bila je 4096 upisa od 2 bajta svaki. Microsoft je kasnije dodao veličine
blokova od 1KB, 2 KB i 4 KB. Onda su mogle da postoje i particije od 16 MB.
Tada je MS-DOS mogao da podrži 4 particije po disku što znači da je FAT-12 mogao da radi
sa diskovima do 64 MB. Nakon toga došlo je do predstavljanja FAT-16, sa 16-bitnim disk
pointerima. Dozvoljene su i veličine blokova od 8 KB, 16 KB i 32 KB. Tabela za FAT-16 sada je
stalno zauzimala 128 KB glavne memorije. Najveće particije na disku sada su bile 2 GB, a veličina
diska 8 GB sa maksimum 4 particije po disku.
Počev od druge verzije Windowsa 95, uveden je FAT-32 fajl sistem sa njegovim 28bitnim
adresama, a verzija MS-DOS-a je bila prilagođena da podrži FAT-32. U ovim sistemima particija je
ograničena na 2 TB (2048 GB). Maksimalna veličina particije za različite veličine blokova i za sva tri
tipa FAT-a je prikazana na slici 2.12.

Operativni sistemi - predavanja 56


FAT-32 fajl sistem ima dvije prednosti u odnosu na FAT-16 gledajući podršku velikim diskovima.
Prvo, kod FAT-32, disk od 8 GB može da bude jedna particija. Kod FAT-16 mogu da postoje
maksimalno 4 particije. Druga prednost je ta da za datu veličinu particije diska, može da se koristi
manja veličina bloka. Na primjer, za particiju diska od 2 GB, FAT-16 mora da koristi blokove od 32
KB, jer inače sa samo 64 K dostupnih adresa diska, ne može pokriti cijelu particiju. FAT-32 može
koristiti blok od 4 KB za particiju od 2 GB. Mnogi fajlovi su kraći od 32 KB, pa je prednost manje
veličine bloka očigledna. Efikasnost iskorišćenja prostora na disku je velika jer je izgubljenog
prostora jako malo.
MS-DOS koristi FAT da bi pratio i slobodne blokove diska. Svaki blok koji se trenutno ne
koristi, označava se posebnim kodom. Kada je MS-DOS-u potreban novi blok, on pretražuje FAT
tragajući za tim kodom. Na ovaj način ni bitmape ni slobodne liste nisu potrebne.
Windows 98 fajl sistem
Počev od druge verzije Windowsa 95, imena fajlova duža od 8+3 karaktera su postala
dozvoljena. Uveden je FAT-32, najviše zbog toga da bi dozvolio formiranje velikih particija većih od
2 GB na diskovima većim od 8 GB koji su se tada pojavili. Kod Windowsa 98 i duga imena i FAT-32
su se koristili u istoj formi kao i kod druge verzije Windowsa 95.
Problem u prelasku Microsofta ka stvaranju fajl sistema gdje bi bila podržana duga imena
fajlova bio je taj što je trebalo omogućiti korisnicima koji upravo prelaze sa jedne na drugu verziju
Windowsa da mogu pristupiti svojim fajlovima sa različitih sistema. Microsoft je donio političku
odluku a to je da se omogući da se fajlovima kreiranim u Windowsu 98 može pristupati i iz
Windowsa 3.x.
Ovo je u stvari značilo da je struktura direktorijuma Windowsa 98 morala biti kompatibilna sa
MS-DOS strukturom direktorijuma. Zapis u direktorijum kod Windowsa 98 imao je oblik prikazan na
slici 2.13.

Promjene se sastoje od dodavanja pet novih polja na mjestu gdje su bile 10 neiskorišćenih
bajtova. Polje NT je tu najviše zbog kompatibilnosti sa Windowsom NT kada je u pitanju pravilno
prikazivanje imena fajlova. Polje ″Sec″ rešava problem nemogućnosti smještanja dnevnog vremena u
16-bitno polje. Ono daje dodatne bitove tako da je novo ″Creation time″ polje precizno do 10 msec.
Još jedno novo polje je ″Last access″, koje smješta datum (ali ne i vrijeme) poslednjeg pristupa fajlu.
Najzad, prelazak na FAT-32 fajl sistem znači da su brojevi blokova sada 32-bitni, pa je potrebno
polje od dodatnih 16 bita za smještanje najgornjih 16 bita broja početnog bloka.
Sad dolazimo na srce fajl sistema Windowsa 98. Kako su duga imena predstavljena tako da

Operativni sistemi - predavanja 57


budu kompatibilna sa MS-DOS-om. Rešenje je bilo da se svakom fajlu dodijele dva imena:
(potencijalno) dugo ime fajla, i 8+3 ime za kompatibilnost sa MS-DOS-om. Fajlu se može pristupiti
preko oba imena. Kada dođe do kreiranja fajla čije ime nije 8+3 karaktera, Windows 98 stvara MS-
DOS ime za njega pomoću određenog algoritma. Osnovna ideja je da se uzmu prvih šest karaktera
imena fajla, da se ona predstave velikim slovima i da im se doda ~1 formirajući tako bazno ime fajla.
Ako takvo ime već postoji onda se dodaje ~2 i tako redom. Specijalni karakteri se pretvaraju u ″_″
znak, a praznine se brišu. Format svakog dugačkog imena je dat na slici 2.14.

Postavlja se pitanje kako Windows 98 zna da li upis u direktorijum sadrži MS-DOS ime fajla ili (dio)
dugačko ime fajla. Odgovor leži u polju ″Attributes″. Za upis dugačkog imena ovo polje ima
vrijednost 0x0F, što predstavlja još jednu od nemogućih kombinacija atributa. Stari MS-DOS
programi će ovo samo ignorisati kao nevažeće. Djelovi imena su sekvencirani koristeći prvi bajt
zapisa. Zadnji dio dugačkog imena je označen dodavanjem broja 64 sekvenci. S obzirom da se samo
6 bita koristi u sekvenci, teoretski maksimum za dugačka imena fajlova je 63x13=819 karaktera. U
stvari taj broj je iz istorijskih razloga ograničen na 260.
Svaki zapis dugačkog imena fajla sadrži i polje Checksum da bi se izbjegao sledeći problem.
Prvo, Windows 98 kreira fajl dugačkog imena. Drugo, računar je restartovan i podešen da radi u MS-
DOS-u ili Windowsu 3. Treće, stari program pod MS-DOS-om briše MS-DOS ime fajla, ali ne briše
njegovo dugačko ime jer ni ne zna za njega. ^etvrto, neki program stvara novi fajl koji ponovo
zauzima maloprije oslobođeni zapis. Sada imamo situaciju da postoji važeća sekvenca zapisa
dugačkih imena koji prethode zapisu fajla u MS-DOS-u a koji nemaju ništa sa tim fajlom. Polje
Cheksum omogućava Windowsu 98 da detektuje ovakvu situaciju verifikujući da MS-DOS ime fajla
koje prati dugačko ime, zaista njemu i pripada. Implementacija FAT-32 fajl sistema konceptualno je
slična implementaciji FAT-16 fajl sistema. Ovjde sada ukoliko se koristi milion blokova, tabela će
konceptualno imati milion upisa. Da bi se izbjeglo da sva budu u memoriji odjednom, Windows 98
održava prozor u tabeli i čuva samo pojedine djelove u memoriji odjednom.
NTFS i drugi fajl sistemi
Windowsa 2000 podržava: NTFS (New Technology File System), podržava FAT32 (File
Alocation Table) i FAT16 particionisane diskove. FAT16 je MS-DOS fajl sistem i omogućava
korišćenje disk particija do 2 GB. FAT32 bolje organizuje disk prostor i particije mogu biti veličine
do 2 TB. NTFS je novija vrsta fajl sistema koju koriste Windows NT 4.0 i Windows 2000. Ovaj fajl
64
sistem koristi 64 bit-ne adrese i teoretski radi sa particijama do 2 bajta. Korišćenje NTFS tehnologije
znači veću sigurnost, tj. zaštitu i veću toleranciju (i korekciju) greški. Kada govorimo o zaštiti,
ovdje mislimo na EFS sistem enkripcje fajlova. Tolerancija greške se odnosi na činjenicu da NTFS
fajl sistem automatski otklanja greške ne prikazujući pri tome poruke o greškama. On lokalizuje loše
klustere i vrši tzv. Cluster Remapping što znači da onemogućava ponovno korišćenje tih losih
klustera. Proces otkrivanja ovih greški se ovdje radi tako što prije upisa podataka na disk, Windows
2000 pravi kopiju podataka koje će privremeno držati u memoriji. Dalje, on pokušava da podatke
smjesti na disk i odmah poslije toga upoređuje te podatke sa podacima u memoriji. Ako ovi podaci u
ovom trenutku nijesu identični, znači da se radi o greški na disku pa se radi Cluster Remapping i traži
se drugo mjesto na disku za smještanje ovih podataka sa privremene memorije.
Kada se prave particije, postavlja se pitanje koje su optimalne veličine tih particija? Veće
particije s jedne strane dovode do sporijeg pristupa disku jer se mnogo toga može odjednom pisati na
tom disku. S druge strane, kod multimedijalnih zapisa, velikih baza podataka i slicno, potrebne su
veće paritcije. Optimalno riješenje je napraviti particije određene namjene tako da svaka od njih ne

Operativni sistemi - predavanja 58


bude veća od veličine koja je neophodna za određenu namjenu.
Ono što korisnik može u radu sa fajlovima NTFS sistema primjetiti, je da imena fajlova mogu
imati maksimalno 255 karaktera, da su putanje (engl. paths) limitirane na 32767 karaktera, da su
imena fajlova Unicode što znači da je dozvoljeno koristiti npr. grčko pismo ili neko drugo nelatinsko
pismo, da su imena fajlova Case Sensitive što znači da pravi razliku malih i velikih slova u imenu
fajla (ali rijetko se može primjeniti zbog toga što su većina programa pravljeni isključivo za FAT32
koji inače nije Case Sensitive), itd. NTFS fajl sistem omogućava automatsko prepoznavanje prečica u
slučaju da se izvorno mjesto fajla dislocira.
Kao što je poznato, disk drajv može da ima više particija. Svaka particija predstavlja linearni
niz blokova koji, po memorijskoj veličini, mogu biti od 512 bajta do 64 KB. Najčešće su ovi blokovi
veličine 4KB i njima se pristupa preko 64-bitno adresiranog ofseta. Način pristupa je takav da se daje
početni blok i ofset koji ukazuje broj narednih blokova kojima treba pristupiti.
Veoma važnu ulogu u objašnjavanju fajl sistema Windowsa 2000, ima tzv. Master File Table
(MFT). MFT je linearni niz zapisa od po 1 KB od kojih svaki opisuje po jedan fajl. Oni sadrže
atribute fajlova kao i adrese blokova na disku gdje su ti fajlovi memorisani. MFT je u stvari jedan fajl
48
koji može da se povećava teoretski sve do 2 zapisa. Svaki MFT zapis (1KB) sadrži zaglavlje zapisa
poslije kojeg dolaze dvije vrijednosti: zaglavlje atributa i vrijednost atributa. Dalje se niz nastavlja na
zaglavlje drugog atributa i na vrijednost drugog atributa, itd. Zaglavlje atributa identifikuje određeni
atribut. Obično poslije njega dolazi vrijednost atributa ali to ne mora biti pravilo. Naime, postoje
fajlovi ili direktorijumi ciji su atributi veliki pa se moraju podijeliti na dva ili više bloka na disku.
Takvi atributi se nazivaju nerezidentnim atributima. Zaglavlja atributa za rezidentne atribute su
veličine 24 bajta dok su za nerezidentne veća jer oni sadrže i informacije o tome kako naći atribut na
disku. NTFS definiše 13 atributa koji se mogu pojaviti na MFT zapisima. Važna kategorija zapisa su
tzv. metadata fajlovi koji su u stvari prvih 16 zapisa MFT. Svaki od ovih zapisa je običan MFT
podatak koji sadrži atribute za fajlove na disku, s’tim što ovo nijesu obični fajlovi vec fajlovi koji
ukazuju ja informacije o samom fajl sistemu. Tako, npr. ako pravimo novi direktorijum ili brišemo
neki direktorijum, ova se radnja loguje u drugom zapisu MFT fajla ($LogFile). Inače, svi metadata
zapisi počinju znakom $.
Od atributa, najinteresantniji je atribut data koji predstavlja mjesto na disku (blokove) gdje je
određeni fajl fizicki memorisan. Ako je neki fajl mali (reda nekoliko stotina bajtova), on se može
smjestiti citav u MFT zapis i takav fajl se naziva direktnim (engl. immediate) fajlom. Obično je, ipak,
atribut data, nerezidentan atribut. U ovim slučajevima potrebno je “skakati” sa jednog bloka na drugi,
unutar disk prostora. Ovdje se kao argumenti daju početni blokovi na koje se “skace” i dužina hoda,
tj. broj blokova u nizu počevsi od navedenog početnog bloka (engl. run length). Primjer fajla koji je
zadržan u 9 blokova i koji ima 3 “skoka” ( run) je dat na slici.2.15

Slika 2.15
Ovdje npr. imamo prvi run koji ukazuje na blokove 20, 21, 22 i 23, itd. Svi ovi Run-ovi su
upisani u MFT kao podaci. Koliko ce biti Run-ova zavisi od efikasnosti Disk Block Alocatora u
trenutku kreiranja fajlova kada se njegova efikasnost mjeri sposobnošću da broj Run-ova što više
reducira, tj. da ih smjesti što blize jedno drugom. Parovi adresa-broj blokova, rekli smo da se sastoje
od 64-bitnih brojeva, što znači da zauzimaju 2x8 bajtova ili 16 bajtova. Kompresijom se danas u
praksi veličina ovih parova svodi na 4 bajta.
NTFS particije se mogu kreirati na dva načina: direktan način (odmah poslije formatizacije
diska) i pretvaranjem sa FAT sistema. Pokazuje se da je mnogo efikasniji način direktnog stvaranja
NTFS particije jer se u tom slučaju MFT kreira na početku diska (gdje bi izvorno i trebalo da postoji)
dok se u drugom slučaju smješta bilo bilo gdje na disku gdje ima slobodnog prostora što često
završava sa lošom fragmentacijom.

Operativni sistemi - predavanja 59


UNIX V7 fajl sistem
Fajl sistem V7 kod UNIX-a je u formi ″drveta″ počev od root direktorijuma sa dodacima u
obliku linkova. Imena fajlova su do 14 karaktera i mogu sadržati bilo koji ASCII karakter osim / (zato
jer je / separator između komponenti u ″putu″) i NUL (zato jer se koristi da označi imena kraća od 14
karaktera).
Svaki upis u direktorijum kod UNIX-a V7 fajl sistema je jako jednostavan zato jer on koristi
šemu i-čvorova. Upis u direktorijum sadrži samo dva polja: ime fajla (14 bajtova) i broj i-čvorova za
taj fajl (2 bajta), kao što je prikazano na slici 2.16. Ovi parametri ograničavaju broj fajlova po fajl
sistemu na 64K.

Kod UNIX-a i-čvorovi sadrže neke atribute. Atributi sadrže veličinu fajla, vremena kreiranja,
poslednjeg pristupa i poslednje izmjene, vlasnika, grupu, informacije o zaštiti i broj upisa u
direktorijum koji pokazuju na i-čvor. Kadgod je novi link usmjeren na i-čvor, brojač u i-čvoru se
povećava. Kada se link otkloni, brojač se smanjuje. Kada dođe na nulu, i-čvor se ponovo vraća natrag
a blokovi diska se stavljaju na slobodnu listu.
Praćenje blokova diska se vrši na osnovu generalizacije. kako bi se rukovalo sa veoma
velikim fajlovima. Prvih 10 adresa na disku je smješteno u sami i-čvor, tako da za male fajlove, sve
potrebne informacije se nalaze u i-čvoru koji se zahvata i prebaca sa diska u glavnu memoriju kada se
fajl otvori. Za velike fajlove, jedna od adresa u i-čvoru je adresa bloka diska koja se zove single
indirektni blok. Ovaj blok sadrži dodatne adrese diska. Ukoliko ovo još uvijek nije dovoljno, još
jedna adresa u i-čvoru, zvana double indirektni blok, sadrži adresu bloka koji opet sadrži listu single
indirektnih blokova. Svaki od ovih single indirektnih blokova ukazuje na nekoliko stotina blokova
podataka. Ukoliko ni ovo nije dovoljno, može se koristiti i triple indirektni blok. Potpuna ilustracija
data je na slici 2. 17.

Pratićemo jedan primjer kod UNIX-a, mada je algoritam uglavnom isti kod svih hijerarhijskih
sistema direktorijuma. Pogledajmo kako se vrži traženje puta /usr/ast/mbox. Prvo fajl sistem locira
root direktorijum. Njegov i-čvor je lociran uvijek na fiksnom mjestu na disku. Polazeći od tog i-
čvora, lociramo root direktorijum koji može biti bilo gdje na disku, ali recimo da je u našem slučaju u
pitanju blok 1.

Operativni sistemi - predavanja 60


Zatim čita root direktorijum i traži prvu komponentu puta, usr, u root direktorijumu da bi
našao broj i-čvora fajla /usr. Lociranje i-čvora na osnovu njegovog broja je pravolinijsko, s obzirom
da svaki ima fiksnu lokaciju na disku. Iz ovog i-čvora, sistem locira direktorijum /usr i traži sledeću
komponentu, ast, u njemu. Kada je pronašao upis za ast, onda on ima i-čvor za direktorijum /usr/ast.
Iz ovog čvora pronalazi sam direktorijum i traži mbox. I-čvor za ovaj fajl se onda učitava u memoriju
i drži tamo sve dok se fajl ne zatvori. Ovaj proces je predstavljen na slici 2.18.
Imena relativnih puteva se traže na isti način samo se pretraga počinje u trenutnom radnom
direktorijumu a ne u root-u.
Direktorijumi (directories)
Direktorijumi su specijalni fajlovi koji sadrže spisak fajlova unutar tog direktorijuma.
Svakom fajlu odgovara po jedan slog koji sadrži ime fajla i još neke dodatne informacije (atributi,
gde se fajl nalazi na disku itd.). Unutar istog direktorijuma ne možemo imati dva (ili više) fajla sa
istom imenom.Na osnovu dozvoljenog broja direktorijuma možemo razlikovati sledeće fajl sisteme:
1. Jedan direktorijum: imamo samo jedan direktorijum, sve programe i sve fajlove stavljamo u taj
direktorijum – nepraktično rešenje iz više razloga: teško ćemo odvojiti fajlove različitih programa,
ako imamo mnogo korisnika javljaju se teškoće oko imenovanja fajlova.
2. Direktorijume do dubine 2: imamo glavni direktorijum (korenski direktorijum -root directory)
i nekoliko poddirektorujuma. Npr. svaki korisnik bi mogao imati sopstveni direktorijum. Time smo
izbegli problem konflikta imena fajlova različitih korisnika, ali nismo rešili problem onih korisnika
koji žele grupisati svoje fajlove u logičke celine.
3. Hijerarhijska struktura direktorijuma u obliku stabla: svaki direktorijum pored fajlova može
sadržati i više poddirektorijuma.
Ako koristimo hijerarhisjku strukturu, u različ itim direktorijumima možemo imati istoimene fajlove.
Zato je potrebno nać i neku tehniku za jedinstvenu identifikaciju fajlova. Ako želimo pristupiti nekoj
datoteci, morać emo zadati i putanju (path) do te datoteke. Imamo dve moguć nosti:
1. Apsolutna putanja (absolute path): krećemo od korenskog direktorijuma i redom navodimo
imena svih direktorijuma na putu do našeg fajla.
2. Relativna putanja (relative path): krećemo od tekućeg direktorijuma (current directory) i
navodimo put do direktorijuma u kojem se nalazi traženi fajl. Mnogi sistemi dodaju svakom folderu
(direktorijumu) dva specijalna fajla: . (tačka – reprezentuje tekući folder) i .. (dve tačke – predstavlja
nadređeni (roditelj) direktorijum).
Primer:
apsolutna putanja: Programi\Posao\kalk.exe relativna putanja: ..\Posao\kalk.exe (ako je tekući
direktorijum npr. Programi\Zabava)
Operacije sa direktorijumima

Operativni sistemi - predavanja 61


Slično kao i kod fajlova, svaki OS ima svoj skup sistemskih poziva za rad sa folderima. Neke
moguće operacije:
CREATE - kreiranje novog (praznog) direktorijuma
DELETE - brisanje praznog dirktorijuma
OPENDIR - otvaranje fajla-direktorijuma za čitanje
CLOSEDIR - zatvaranje fajla-direktorijuma
READDIR -čitanje sadržaja fajla-direktorijuma
RENAME - reimenovanje direktorijuma
LINK - pod UNIXOM: ako želimo da jedan te isti fajl bude u više direktorijuma,
nema potrebe da ceo fajl prekopiramo u svaki direktorijum, umesto toga u jedan ćemo staviti sam fajl
a u ostale samo pokazivač na taj fajl. Taj pokazivač se zove link (veza). Kada pristupamo linku,
pristupićemo fajlu na koji link pokazuje.
UNLINK - briše link na fajl

FAJL SISTEM
Svakom programu je potrebna moguć nost da sač uva neke informacije – neke podatke procesi mogu
č uvati unutar svog adresnog prostora (promenljive, konstante). Za neke procese to je dovoljno, za
neke je potrebno neko drugo rešenje. Nedostaci č uvanja podataka u internoj memoriji:
- mali kapacitet
- kada proces završi sa radom, podaci se gube
- rač unar se blokira ili nestane struja – podaci se gube
- č esto je potrebno da istim podacima istovremeno pristupi više procesa
Zbog ovih nedostataka, postoji potreba da se neki podaci č uvaju odvojeno od adresnog
prostora u eksternoj memoriji u obliku fajlova. Kriterijumi za dugoroč no č uvanje podataka:
- već i kapacitet
- podaci moraju biti sač uvani i nakon što proces završi sa radom, i nakon što se rač
unar isključ i
- moguć nost istovremenog pristupa više procesa
Deo operativnog sistema koji je zadužen za rad sa fajlovima zove se fajl sistem (file system).
Vodi rač una o strukturi, nač inu imenovanja, nač inu korišć enja, o zaštiti i o implementaciji č itavog
fajl sistema. Č esto se pod pojmom fajl sistem podrazumeva struktura direktorijuma i fajlova.
Fajl sistem sa korisničke tačke gledišta
Fajlovi (files)
Fajlovi predstavljaju apstrakciju: pružaju moguć nost da se podaci č uvaju na disku i da se
proč itaju sa diska a da pri tome korisnik ne treba da zna detalje implementacije: kako su i gde su
podaci sač uvani ili kako zapravo diskovi rade. Upravo OS ima zadatak da obavi tu apstrakciju,
odnosno da sakrije detalje realizacije i da pruži interfejs na višem nivou.
Imenovanje (file naming)
Pravila imenovanja fajlova razlikuje se od sistema do sistema. Uglavnom svi sistemi koriste
niz znakova za imenovanje fajlova. Neki sistemi dozvoljavaju i korišć enje specijalnih znakova i
brojeva. Neki prave razliku između malih i velikih slova (UNIX) a neki ne (DOS).
Pod DOS-om imena fajlova se sastoje od dva dela: ime fajla (8 karaktera) i tipa (ekstenzije,
do 3 karaktera) fajla koji su razdvojeni tač kom: readme.txt. Možemo koristiti mala i velika slova,
brojeve i neke specijalne znakove. Ne pravi se razlika između malih i velikih slova.
UNIX dozvoljava imena dužine do 255 karaktera. Ime može biti sastavljeno od proizvoljnog
broja delova odvojenih tač kom. Pravi se razlika između velikih i malih slova. Možemo koristiti i
brojeve i neke specijalne znakove.
Struktura fajlova (file structure)
Najpoznatije strukture su:
1. Fajl je niz bajtova. OS ne vodi rač una o tome šta se nalazi u fajlovima, sve što vidi su
bajtovi. Korisnič ki programi su oni koji treba da dodeljuju znač enje fajlovima (tj. da znaju kako

Operativni sistemi - predavanja 62


treba gledati na taj niz bajtova). Ovu realizaciju koriste DOS, UNIX, Windows.
2. Fajl je niz slogova iste veličine. Ova realizacija je napuštena.
3. Fajl u obliku B-stabla. Koristi se za brzo pretraživanje fajla po zadatom ključ u.

Tipovi fajlova (file types)


Mnogi operativni sistemi razlikuju više tipova fajlova:
-regularni fajlovi: obič ni, korisnikovi fajlovi (obič ni nizovi bajtova): mogu biti
ASCII ili binarni fajlovi (ovu razliku pravimo mi a ne OS). ASCII fajlovi sadrže
tekst, a binarni fajlovi bilo šta drugo.
-direktorijumi: sistemski fajlovi koji sadrže informacije o strukturi fajl sistema -
uređ ajni fajlovi: pod Unixom uređajima pridružujemo fajlove (ako želimo
štampati, pišemo u odgovarajuć i fajl). -specijalni fajlovi: zavise od OS-a. Npr.
pod DOS-om imamo specijalan fajl koji sadrži ime diska
Način pristupa fajlovima (file access)
-sekvencijalni pristup: bajtovima (podacima) u fajlu možemo pristupiti samo redom,
tj. da bismo proč itali n-ti bajt, moramo izč itati prethodnih n-1 bajtova. Koristi se
na primer kod trake.
-direktan pristup: možemo skoč iti na bilo koji bajt unutar fajla i izč itati (ili upisati)
taj bajt – pomeramo “glavu za č itanje” na odgovarajuć e mesto i uradimo ono što
želimo.
Atributi fajlova (file attributes)
Svaki fajl ima svoje ime i sadržaj. Pored ovih informacija svi operativni sistemi č uvaju još
neke dodatne podatke o fajlovima, kao što su vreme nastanka fajla, velič ina fajla itd. Te dodatne
podatke zovemo atributima fajla. Neki moguć i atributi:
- kreator
- vlasnik
- read-only (samo za č itanje)
- system (sistemski fajl – deo OS-a)
- hidden (sakriven fajl)
- vreme poslednje modifikacije
- vreme poslednjeg pristupa
- vreme kreiranja
- prava pristupa
- velič ina fajla
- maximalna dozvoljena velič ina, itd.
Operacije sa fajlovima (file operations)
Svaki OS ima svoj skup sistemskih poziva za rad sa fajlovima. Najč ešć e operacije su:
CREATE ( ime ) - kreiranje novog, praznog fajla
DELETE ( ime ) - brisanje fajla
OPEN ( ime ) - otvaranje (pripremanje) fajla za rad, operacija vrać a jedinstveni deskriptor
fajla (file descriptor – fd)
CLOSE ( fd ) - zatvaranje fajla koji je prethodno otvoren
READ ( fd ) -cita jedan bajt ili više bajtova iz prethodno otvorenog fajla od trenutne pozicije
fajl-pokazivaca (file pointer)
WRITE ( fd,šta) - piše jedan ili više bajtova u prethodno otvoren fajl od trenutne
pozicije pokazivača. Ako je pokazivač na kraju fajla, podaci se dodaju na kraj.
APPEND ( fd,šta ) - isto kao WRITE, sa razlikom da se novi podaci dodaju na kraj fajla
SEEK ( fd,pos ) - pomera pokaziva fajla na zadatu poziciju
GETATTRIBUTES ( ime ) - vra a atribute fajla
SETATTRIBUTES ( ime,atr ) - postavlja (menja) atribute fajla
RENAME ( ime,novoime ) - menja ime fajla
Realizacija fajl sistema
Imamo dva pristupa čuvanju fajlova na disku :

Operativni sistemi - predavanja 63


- fajl od n bajtova se č uva kao kontinualan niz bajtova – nedostatak: ako se velič ina fajla poveć
ava, najverovatnije ć emo morati ceo fajl premestiti na neko drugo mesto. Ova strategija je
napuštena.
- fajlovi se razbijaju u blokove fiksne velič ine, koji ne moraju biti kontinualno smešteni na disk
Posmatrajmo realizaciju sa blokovima: fajlovi se č uvaju u blokovima fiksne velič ine. Npr.
jedan blok je velič ine 4KB, velič ina fajla je 9KB. Tada ć emo zauzeti 3 bloka za taj fajl, odnosno
12KB. U poslednjem bloku č uvamo samo 1KB korisne informacije, a ostalih 3KB je izgubljeno – jer
je ceo blok zauzet od strane našeg fajla. Prednost velikih blokova je brzina a nedostatak je loša
iskorišć enost prostora diska. Prednost malih blokova je bolje iskorišć avanje prostora a nedostatak je
sporost – pošto koristimo veliki broj malih blokova, da bismo uč itali fajl moramo više puta
pozicionirati glavu diska.
Standardne velič ine blokova su od 512B do 8KB. Ako je adresiranje
blokova 16-bitna, možemo razlikovati 2^16 = 65536 različ itih blokova.
To znač i da ć emo videti od 32MB (sa blokovima od 512B) do 512MB.
Neiskorišćeni blokovi
Neka su blokovi velič ine 1KB i neka je adresiranje 16-bitna. Imamo dva standardna nač ina
za evidenciju slobodnih blokova:
1. Pomoću POVEZANE LISTE: dva pristupa:
- na poč etku svakog bloka č uvamo adresu sledeć eg praznog bloka. Treba samo
zapamtiti adresu prvog bloka, jer ć emo tamo nać i adresu drugog itd. Prednost: ne
gubimo dodatan prostor za evidenciju slobodnih blokova (blokovi su ionako
prazni, pa ništa ne gubimo ako stavimo pokazivač na sledeć i blok). Nedostatak:
sporost – obilazak liste zahteva neprestano pozicioniranje diska.

- povezanu listu čuvamo u posebnim (praznim) blokovima. Umesto toga da u svakom praznom
bloku č uvamo adresu sledeć eg, listu praznih blokova smestimo u posebne blokove.Svaki blok
sadrži niz adresa praznih blokova, a na kraju svakog bloka imamo adresu sledeć eg bloka sa
adresama praznih blokova. Prednost: već a brzina obilaska. Neka su blokovi velič ine 1KB, neka
imamo 16-bitno adresiranje i disk od 20MB. Tada imamo ukupno 20*1024=20480 blokova.
Unutar jednog bloka možemo č uvati 511 adresa praznih blokova (+ adresa sledeć eg bloka = 512
adresa, 16-bitne (dvobajtne) adrese, pa 512*2=1024), pa nam treba 40 blokova za administraciju.
Broj blokova korišć enih za evidenciju se menja sa menjanjem popunjenosti diska.

Operativni sistemi - predavanja 64


2. Pomoću BITNE MAPE: svakom bloku diska dodeljujemo po jedan bit. Ako je blok
zauzet, stavimo 0, ako je prazan stavimo 1 (ili obrnuto). Ako je kapacitet diska n blokova,
treba nam n bitova za bitnu mapu diska. Bitnu mapu č uvamo u tač no određenim
blokovima diska. Ako je k-ti blok zauzet, onda je vrednost k-tog bita bitne mape 0, a ako
je prazan, onda je 1. Ako je velič ina blokova 1KB a kapacitet diska 20MB, velič ina bitne
mape je 20*1024=20480 bitova, odnosno 2560bajtova=2.5KB, tj zauzima 3 bloka diska.
Ako imamo dovoljno memorije da uč itamo celu bit-mapu, pretraživanje je brže od
pretraživanja povezane liste. Ako nemamo dovoljno memorije (npr. možemo uč itati samo jedan
blok) – tada je bolje rešenje povezana lista: jedan blok sadrži adresu 511 slobodnog bloka.
Implementacija fajlova (zauzeti blokovi)
1. Kontinualni blokovi
Najednostavniji nač in je da za svaki fajl zauzmemo onoliko kontinualnih blokova koliko
treba. Prednost je laka implementacija: da bismo locirali neki fajl, treba samo zapamtiti prvi blok i
velič inu fajla. Druga prednost je brzina pristupa podacima (i sekvencijalno i direktno). Nedostatak je
što u već ini sluč ajeva ne znamo unapred maksimalnu velič inu naših fajlova. Ako fajl izraste iz
predviđenog broja blokova, moramo pretražiti disk da bismo našli potreban broj kontinualno
raspoređenih slobodnih blokova. Ako nađemo, treba prebaciti ceo fajl na novo mesto, ako ne nađemo,
možemo pokušati sa grupisanjem slobodnih blokova na jedno mesto (premeštanjem zauzetih
blokova). Vrlo neefekasna realizacija. Javlja se problem eksterne fragmentacije.
2. Povezana lista
Blokove zauzetih od strane nekog fajla stavimo u povezanu listu. Treba samo zapamtiti adresu
prvog bloka. U svakom bloku č uvamo adresu sledeć eg bloka, kao kod evidencije slobodnih blokova
pomoć u povezane liste na osnovu prvog nač ina. Prednosti: ako fajl raste, samo zauzmemo bilo koji
neiskorišć en blok i ažuriramo povezanu listu – ne javlja se problem eksterne fragmentacije.
Nedostaci:
- ne podržava direktan pristup fajlu – ako nam treba neka informacija koja se nalazi
u zadnjem bloku, da bismo došli do zadnjeg bloka moramo proć i kroz celu listu
(moramo posetiti svaki blok da bismo dobili adresu sledeć eg bloka).
- velič ina korisne informacije u blokovima više nije stepen od 2 (zato što nam treba
mesto za adresu sledeć eg bloka)
3. FAT (File Allocation Table)
FAT je tabela koja ima onoliko elemenata koliko imamo blokova na disku. Ako se u k-tom
bloku nalazi neki fajl, tada k-ti elemenat FAT-a sadrži adresu sledeć eg bloka koji taj fajl zauzima ili
nulu koja označ ava da je to poslednji blok fajla. Korišć enjem FAT-a izbegavamo nedostatke
povezane liste: ceo blok možemo iskoristiti za č uvanje korisnih informacija (nije potrebno oduzeti
deo za adresu sledeć eg bloka), i bolje je podržan direktan pristup sadržaju fajla – direktan pristup ni
ovde nije u potpunosti podržan jer ako trebamo pristup 10-tom bloku fajla, moramo pomoć u FAT-a
nać i adresu tog bloka, ali je pretraživanje mnogo brže: informacije su na jednom mestu, ne treba
obilaziti svaki blok da bismo došli do adrese sledeć eg bloka.

Operativni sistemi - predavanja 65


FAT se koristi npr. kod operativnih sistema DOS,Win9x.
Primer: neka PERA.TXT zauzima blokove 7,2,4,1 a DJURA.DOC blokove 8,5. Tada
dobijamo sledeću tabelu alokacije:

4. i-č vorovi (i-nodes)


Svakom fajlu dodeljujemo jednu malu tabelu koja se zove i-čvor (i-node) ili index-čvor
(indexnode) i koja sadrži atribute fajla i adrese zauzetih blokova:

Operativni sistemi - predavanja 66


Znač i: i-č vor sadrži atribute fajla i adrese prvih nekoliko blokova zauzetih od strane
datoteke. Ako su ti blokovi dovoljni, onda je i-č vor spreman. Ako nisu, koristi se i polje SIB=Single
Indirect Block koji pokazuje na blok koji sadrži adrese dodatnih blokova. Neka su blokovi velič ine
1KB, neka se koristi 32-bitno adresiranje, onda svaki blok može da sadrži 256 adresa. Tako pomoć u
SIB-a dolazimo do dodatnih 256 blokova. Ako ni to nije dovoljno, koristimo i polje DIB=Double
Indirect Block koji pokazuje na blok koji sadrži dodatne adrese SIB-ova. Ako ni to nije dovoljno,
onda koristimo i polje TIB=Tripple Indirect Block, koji pokazuje na blok sa dodatnim adresama
DIB-ova. Tako dolazimo do sledeć e tablice:
ŠTA KORISTIMO MAKSIMALAN BROJ BLOKOVA
samo i-č vor 10
i-č vor + SIB 10+256
i-č vor + SIB + DIB 10+256+256*256
i-č vor + SIB + DIB + TIB 10+256+256^2+256^3
OSNOVA SLOJA ZA UPRAVLJANJE FAJLOVIMA
Sloj za upravljanje fajlovima se oslanja na operacije drajvera iz sloja za upravljanje
kontrolerima. On može da koristi i operacije sloja za upravljanje radnom memorijom, radi
zauzimanja bafera, namjenjenih za smještanje kopija blokova, ili kopija deskriptora, na primjer.
13.DISTRIBUIRANI OPERATIVNI SISTEMI
Distribuirani operativni sistemi upravljaju međusobno povezanim računarima, koji su
prostorno udaljeni. Potrebu za povezivanjem prostorno udaljenih (distribuiranih) računara nameće
praksa. S jedne strane, prirodno je da računari budu na mestima svojih primena, na primer, uz
korisnike ili uz delove industrijskih postrojenja, koje opslužuju. Na taj način računari mogu biti
potpuno posvećeni lokalnim poslovima, koji su vezani za mesta njihove primene, pa mogu efikasno
obavljati ovakve poslove. S druge strane, neophodno je omogućiti saradnju između prostorno
udaljenih korisnika, odnosno obezbediti usaglašeni rad prostorno udaljenih djelova istog industrijskog
postrojenja. Za to je potrebno obezbediti razmenu podataka između računara, posvećenih pomenutim
korisnicima, odnosno posvećenih pomenutim delovima industrijskog postrojenja. Radi toga, ovakvi,
prostorno udaljeni računari se povezuju komunikacionim linijama, koje omogućuju prenos (razmenu)
podataka, organizovanih u poruke. Na ovaj način nastaje DOS- distribuirani računarski sitem
(Distributed Computer System). DOS korisnici vide kao jedno-procesorski sistem bez obzira sto u
stvari on radi sa više procesora. Imamo više računara povezanih u mrežu, ali samo jedan OS, koji
upravlja svim resursima u mreži. U pravom distribuiranom sistemu korisnik ne treba da vodi računa o
tome, gde su njegovi fajlovi smešteni ili gde se izvršava njegov program, to je posao OS-a. DOS se
dakle ponaša kao jedinstvena celina. Korisnik nije svestan toga da je u mreži sa drugim računarima,
njemu to izgleda kao da je jedan računar.
Svaki od računara koji su povezani u distribuirani računarski sistem treba da sadrži osnovne
resurse i to: procesor, radnu memoriju i mrežni kontroler. Prisustvo masovne memorije i raznih
ulaznih i izlaznih uređaja u sastavu ovakvih računara zavisi od mesta njihove primene i, u opštem
slučaju, nije obavezno, pa zato nema ni potrebe da ih podržava operativni sistem, prisutan na svakom
računaru iz distribuiranog računarskog sistema. Ovakav operativni sistem se naziva i mikrokernel
(microkernel), jer ima smanjenu funkcionalnost u odnosu na “običan” operativni sistem. Hijerarhijska
struktura mikrokernela je prikazana na slici 13.
Modul za upravljanje procesima
Modul za razmenu poruka
Modul za upravljanje radnom memorijom
Modul za upravljanje resursima (kontrolerima)
Modul za upravljanje procesorom
Modul za upravlanje komunikacijom i sinhronizacijom

Slika 13. Hijerarhijska struktura mikrokernela

Mikrokernel ne sadrži sloj za upravljanje fajlovima, jer on nije potreban za svaki od računara
iz distribuiranog računarskog sistema i jer se on, bez problema, može prebaciti u korisnički sloj
(iznad mikrokernela), predviđen za korisničke procese.

Operativni sistemi - predavanja 67


Sloj za upravljanje procesima se oslanja na sloj za razmenu poruka, da bi pristupio izvršnoj
datoteci (lociranoj na nekom drugom računaru). Sloj za razmjenu poruka se oslanja na sloj za
upravljanje radnom memorijom, radi dinamičkog zauzimanja i oslobađanja bafera, namjenjenih za
privremeno smještanje poruka. Sloj za razmjenu poruka se oslanja i na sloj za upravljanje
kontrolerima, u kome se nalazi drajver mrežnog kontrolera (posredstvom koga se fizički razmjenjuju
poruke). Na kraju, sloj za razmjenu poruka se oslanja i na sloj za upravljanje procesorom, da bi se, na
primjer, privremeno zaustavila aktivnost procesa do prijema poruke (bez koje nastavak aktivnosti nije
moguć), ali i da bi se moglo reagovati na dugotrajni izostanak očekivanog prijema poruke.
Sloj za razmjenu poruka nije samo na raspolaganju sloju za upravljanje procesima. On sadrži
sistemske operacije, koje omogućuju razmjenu poruka, odnosno saradnju između procesa, aktivnih na
raznim računarima (ali i između procesa, aktivnih na istom računaru). Tipičan oblik saradnje procesa
je da jedan proces traži uslugu od drugog procesa. Na primjer, kada jedan proces želi da na svom
računaru, koji je bez masovne memorije, stvori novi proces, on se, posredstvom sloja za upravljanje
procesima, obraća drugom procesu, aktivnom na računaru sa masovnom memorijom, zahtjevajući od
njega, kao uslugu, da mu pošalje sadržaj odgovarajuće izvršne datoteke. Uobičajeni način traženja i
dobijanja usluge se sastoji od pozivanja operacije, čijim obavljanjem se pruža tražena usluga. U
slučaju, kada pozivana operacija ne odgovara potprogramu, koji se lokalno izvršava u okviru
aktivnosti procesa pozivaoca, nego odgovara potprogramu, koji se izvršava u okviru aktivnosti
drugog, udaljenog procesa (koji je aktivan na udaljenom računaru), reč je o pozivu udaljene operacije
(Remote Procedure Call -RPC). Pri tome se proces, koji poziva udaljenu operaciju, nalazi u ulozi
klijenta (kome se pruža usluga), a proces, koji obavlja udaljenu operaciju, se nalazi u ulozi servera
(koji pruža uslugu).
POZIV UDALJENE OPERACIJE
Poziv udaljene operacije liči na poziv (lokalne) operacije. Znači, on ima oblik poziva
potprograma, u kome se navode oznaka (ime) operacije i njeni argumenti. Ovakav potprogram se
naziva klijentov potprogram (client stub), jer je klijent njegov jedini pozivalac. U klijentovom
potprogramu je sakriven niz koraka, koji se obavljaju, radi dobijanja zahtjevane usluge. U ove korake
spadaju:
1. pronalaženje procesa servera, koji pruža zahtevanu uslugu,
2. pakovanje (marshalling) argumenata (navedenih u pozivu klijentovog potprograma) u
poruku zahteva,
3. slanje serveru ove poruke zahteva,
4. prijem od servera poruke odgovora sa rezultatom pružanja zahtevane usluge,
5. raspakivanje prispele poruke odgovora i
6. isporuka rezultata pružanja zahtevane usluge pozivaocu klijentovog potprograma.
Simetrično klijentovom potprogramu postoje dva serverova potprograma (server stub). Njih poziva
jedino server, a oni kriju više koraka, koji se obavljaju, radi pružanja zahtevane usluge. Prvi od njih
obuhvata:
1. prijem poruke zahteva i
2. raspakivanje argumenata iz ove poruke.
Drugi od njih obuhvata:
1. pakovanje rezultata usluge (koju je pruzio server) u poruku odgovora i
2. slanje klijentu ove poruke odgovora.
Između poziva ova dva serverova potprograma se nalazi lokalni poziv operacije, koja
odgovara zahtevanoj usluzi, odnosno, programski tekst, koji opisuje aktivnost servera na pružanju
zahtevane usluge.
Oslanjanje na poziv udaljene operacije olakšava posao programeru, jer od njega krije, na
prethodno opisani način, detalje saradnje klijenta i servera. Pri tome, klijentov potprogram pripada
biblioteci udaljenih operacija. Ova biblioteka sadrži po jedan klijentov potprogram za svaku od
postojećih udaljenih operacija. Klijentov potprogram se generiše, zajedno sa serverovim
potprogramima, prilikom prevođenja programa, koji odgovara serveru.
PROBLEMI POZIVA UDALJENE OPERACIJE
Uprkos nastojanju da što više liči na poziv lokalne operacije, poziv udaljene operacije se
značajno razlikuje od svog uzora. Te razlike su posledica koraka, sakrivenih u pozivu udaljene
operacije, koji uzrokuju da se u toku poziva udaljene operacije mogu da pojave problemi, čija pojava

Operativni sistemi - predavanja 68


nije moguća kod poziva lokalne operacije. Tako je moguće:
1. da se ne pronađe server, koji pruža zahtjevanu uslugu,
2. da se, u toku prenosa, izgube ili poruka zahtjeva ili poruka odgovora, kao i
3. da dođe do otkaza ili servera, ili klijenta u toku njihovog rada.
Ako nema servera, tada nije moguće pružanje tražene usluge (što je nemoguća situacija kod
poziva lokalne operacije). Do istog rezultata dovode smetnje na komunikacionim linijama, koje
onemogućuju prenos bilo poruke zahtjeva, bilo poruke odgovora. Kada u očekivanom vremenu
izostane prijem poruke odgovora (bilo zbog gubljenja poruke zahtjeva, bilo zbog gubljenja poruke
odgovora), jedino što se na strani klijenta može uraditi je da se ponovo pošalje (retransmituje) poruka
zahtjeva (pri čemu je broj retransmisija ograničen). Ako je izgubljena poruka zahtjeva, njenom
retransmisijom se stvara mogućnost da ona stigne do servera i da on pruži traženu uslugu. Međutim,
ako je izgubljena poruka odgovora, tada treba spriječiti da, po prijemu retransmitovane poruke
zahtjeva, server ponovi pružanje već pružene usluge. Da bi server razlikovao retransmitovanu poruku
od originalne, dovoljno je da svaka originalna poruka ima jedinstven redni broj i da server za svakog
klijenta pamti redni broj poslednje primljene poruke zahtjeva od tog klijenta (prijem poruke sa
zapamćenim rednim brojem ukazuje na retransmitovanu poruku, koja je već primljena).
Otkaz servera (izazvan kvarom računara) je problematičan, jer, u opštem slučaju, nema načina
da se ustanovi da li je do otkaza doslo pre, u toku, ili posle pružanja usluge. Zato poziv udaljene
operacije ne može garantovati da će zahtjevana usluga biti pružena samo jednom (kao kod poziva
lokalne operacije). Na strani klijenta otkaz servera se odražava kao izostajanje poruke odgovora, a
retransmisija poruke zahtjeva može navesti ponovo pokrenutog servera da jož jednom pruži već
pruženu uslugu (jer je, u ovom slučaju, server izgubio, zbog otkaza, evidenciju o rednim brojevima
poslednje primljenih poruka zahtjeva od klijenata). Kod poziva lokalne operacije ovo se ne može
desiti, jer otkaz računara znači i kraj izvršavanja celog programa, bez pokušaja njegovog automatskog
oporavka.
Otkaz klijenta znači da server uzaludno pruža zahtjevanu uslugu. Ovo se izbjegava tako što
server obustavlja pružanje usluga klijentima, za koje ustanovi da su doživeli otkaz (to klijenti sami
mogu da jave serveru, nakon svog ponovnog pokretanja, ili to server može sam da otkrije,
periodičnom provjerom stanja klijenata, koje opslužuje).
Poziv udaljene operacije praktično dozvoljava da argumenti budu samo vrednosti, a ne i
adrese, odnosno pokazivači, zbog problema kopiranja pokazanih vrednosti sa klijentovog računara na
računar servera i u obrnutom smeru. Pored toga, ako su ovi računari različiti, javlja se i problem
konverzije vrednosti(jer se, na primjer, predstava realnih brojeva razlikuje od računara do računara).
Činjenica da se u okviru klijentovog potprograma javlja potreba za pronalaženjem servera,
ukazuje da u vreme pravljenja izvršnog oblika klijentovog programa nije poznato koji server će
usluživati klijenta. U opštem slučaju, može biti više servera iste vrste i svaki od njih može istom
klijentu da pruži zatraženu uslugu. Radi toga se uvodi poseban server imena (name server, binder).
Njemu se, na početku svoje aktivnosti, obraćaju svi serveri i ostavljaju podatke o sebi (kao sto je, na
primjer, podatak o vrsti usluge koje pružaju). Serveru imena se obraćaju i klijenti, radi pronalaženja
servera, koji pruža zahtjevanu uslugu. Na ovaj način se ostvaruje dinamičko linkovanje (dynamic
binding) klijenta, koji zahtjeva uslugu, i servera, koji pruža zahtjevanu uslugu.
RAZMENA PORUKA
Klijentovi i serverovi potprogrami, pomoću kojih se ostvaruje zamisao poziva udaljene
operacije, se oslanjaju na sistemske operacije sloja za razmjenu poruka. Prva od ovih operacija je
sistemska operacija zahtjevanja usluge, a druge dve su sistemske operacije prijema zahtjeva i slanja
odgovora. Sistemska operacija zahtjevanja usluge je namjenjena klijentu (poziva se iz njegovog
potpograma), a omogućuje slanje poruke zahtjeva i prijem poruke odgovora. Sistemske operacije
prijema zahtjeva i slanja odgovora su namjenjene serveru i omogućuju prijem poruke zahtjeva i slanje
poruke odgovora (sistemska operacija prijema zahtjeva se poziva iz prvog serverovog potprograma, a
sistemska operacija slanja odgovora se poziva iz drugog serverovog potprograma). Ove tri sistemske
operacije ostvaruju poseban protokol razmjene poruka (request reply protocol), koji je prilagođen
potrebama poziva udaljene operacije.
Sistemske operacije zahtjevanja usluge, prijema zahtjeva i slanja odgovora su blokirajuće.
Prva zaustavlja aktivnost klijenta do stizanja odgovora, ili do isticanja zadanog vremenskog perioda.
Druga zaustavlja aktivnost servera do stizanja zahtjeva, a treća zaustavlja aktivnost servera do

Operativni sistemi - predavanja 69


isporuke odgovora ili do isticanja zadanog vremenskog intervala. Ove tri sistemske operacije su
zadužene za prenos poruka. Pored slanja i prijema poruka, one potvrđuju prijem poruka, retransmituju
poruke, čiji prijem nije potvrđen, šalju upravljačke poruke, kojima se provjerava i potvrđuje aktivnost
servera (čime se omogućuje otkrivanje njegovog otkaza) i slično. U nadležnosti ovih operacija je i
rastavljanje poruka u pakete (koji se prenose preko komunikacionih linija), sastavljanje paketa
(pristiglih preko komunikacionih linija) u poruke, potvrda prijema paketa i retransmisija paketa, čiji
prijem nije potvrđen, kao i prilagođavanje brzine slanja paketa brzini kojom oni mogu biti primani
(flow control). Pomenute tri sistemske operacije pozivaju (neblokirajuće) operacije gornjeg dela
drajvera mrežnog kontrolera, radi fizičkog prenosa i prijema paketa (u donjem delu ovog drajvera se
nalaze obrađivači prekida, zaduženi za registrovanje uspješnog slanja i uspješnog prijema paketa).
Ove tri sistemske operacije koriste usluge i sloja za upravljanje preključivanjem i prekidima, radi
reagovanja na isticanje zadanih vremenskih intervala, nakon kojih je, na primjer, potrebno ili
retransmitovati poruku, ili poslati poruku potvrde.
Sistemske operacije sloja za razmjenu poruka se brinu o baferima, namijenjenim za
(privremeno) smještanje poruka. Na primjer, ako server nije pozvao sistemsku operaciju prijema
zahtjeva, jer je aktivan na usluživanju prethodno primljenog zahtjeva od jednog klijenta, a pristigla je
poruka zahtjeva od drugog klijenta, ova poruka se smješta u slobodan bafer, da bi bila sačuvana i
kasnije isporučena serveru. Ako ne postoji slobodan bafer, poruka zahtjeva se odbacuje (uz,
eventualno, slanje odgovarajuće upravljačke poruke drugom klijentu).
Svaka od poruka, koje se razmjenjuju između procesa, se sastoji:
1. od upravljačkog dijela poruke i
2. od sadržaja poruke.
Upravljački deo poruke obuhvata:
1. adresu odredišnog procesa (kome se poruka upućuje),
2. adresu izvorišnog procesa (od koga poruka kreće, a kome se, eventualno, kasnije upućuje
odgovor) i
3. opis poruke (njenu vrstu, njen redni broj i slično).
Adresa (odredišnog ili izvorišnog) procesa sadrži jedinstven redni broj računara, kome proces
pripada (a po kome se razlikuju svi računari), kao i jedinstven redni broj procesa (po kome se
razlikuju procesi, koji pripadaju istom računaru). Na osnovu rednog broja računara, mrežni kontroler
utvrđuje da li prihvata ili propušta poruku, a na osnovu rednog broja procesa se određuje proces,
kome se poruka isporučuje. U toku programiranja, zgodnije je, umjesto ovih rednih brojeva, koristiti
imena za označavanje i računara i procesa. Korespondenciju između imena i rednih brojeva
uspostavlja već pomenuti server imena (ove podatke o sebi ostavljaju svi serveri, kada se, na početku
svoje aktivnosti, obrate serveru imena).
PROBLEMI RAZMENE PORUKA
Slaba tačka razmjene poruka je sigurnost, jer su komunikacione linije pristupačne svim
korisnicima, pa je svaki od njih u poziciji da preuzima tuđe poruke i da šalje poruke u tuđe ime.
Sprečavanje preuzimanja tuđih poruka se zasniva na kriptovanju (encryption) poruka, a sprečavanje
slanja poruka u tuđe ime se zasniva na nedvosmislenoj međusobnoj identifikaciji procesa
(authentication). U slučaju simetrične kriptografije, da bi klijent i server mogli da razmjenjuju poruke
sa šifrovanim sadržajima, oba moraju da znaju i algoritam kriptovanja i svoj interni ključ kriptovanja.
Pod pretpostavkom da je algoritam poznat svim procesima, a da interni ključ kriptovanja treba da
znaju samo klijent i server, koji razmjenjuju poruke, javlja se problem kako dostaviti interni ključ
kriptovanja samo pomenutom klijentu i serveru. U tome može da pomogne poseban server, u koga svi
procesi imaju poverenje i koji se, zato, naziva poverenik. Pri tome se podrazumijeva da poverenik
posjeduje unapred dogovoren poseban ključ kriptovanja za komunikaciju sa svakim procesom.
Zahvaljujući tome, klijent može da pošalje povjereniku poruku, koja sadrži ime klijenta i ime servera
sa kojim klijent želi da ostvari sigurnu komunikaciju (sadržaj ove poruke je kriptovan ključem, koji je
poznat samo klijentupovjereniku, tako da je razumljiv samo za povjerenika, a on, na osnovu adrese
izvorišnog procesa iz upravljačkog dela ove poruke, može da pronađe ključ za dekriptovanje njenog
sadržaja). Poverenik tada odredi interni ključ kriptovanja i pošalje poruku serveru, koja sadrži interni
ključ kriptovanja i ime klijenta (sadržaj ove poruke je kriptovan ključem, koji je poznat samo
povjereniku i serveru, tako da je razumljiv samo za servera). Takođe, povjerenik šalje poruku i
klijentu, koja sadrži interni ključ kriptovanja i ime servera (sadržaj ove poruke je kriptovan ključem,

Operativni sistemi - predavanja 70


koji znaju samo povjerenik i klijent, tako da je razumljiv samo za klijenta). Na ovaj način, samo
klijent i samo server dobiju interni ključ kriptovanja za sigurnu međusobnu komunikaciju i ujedno se
obavi njihova međusobna identifikacija (tako da se drugi procesi ne mogu neprimjećeno umiješati u
njihovu komunikaciju).
Ako se sigurna razmjena poruka zasniva na asimetričnoj kriptografiji, tada je uloga
poverenika da čuva javne ključeve i tako osigura međusobnu identifikaciju procesa. Znači, kada je
potrebno ostvariti sigurnu komunikaciju između dva procesa, oni se obraćaju povjereniku, da bi
dobili javni ključ svog komunikacionog partnera. Za komunikaciju sa poverenikom ovi procesi
koriste javni ključ povjerenika, a za komunikaciju sa njima povjerenik koristi njihove javne ključeve.
Asimetrična kriptografija omogućuje i digitalno potpisivanje poruka, radi neopozivog
pripisivanja poruke njenom pošiljaocu. Digitalni potpis (digital signature) se šalje uz poruku. On
sadrži referentni deo poruke, koji je dekriptovan (transformisan) primjenom algoritma dekriptovanja i
privatnog ključa. Primalac poruke kriptuje (retransformise) digitalni potpis primjenom algoritma
kriptovanja i javnog ključa (pretpostavka je da su algoritmi kriptovanja i dekriptovanja komutativni).
Ako se rezultat kriptovanja digitalnog potpisa poklapa sa referentnim delom poruke, tada je poruka
nedvosmisleno stigla od pošiljaoca.
Sigurnu komunikaciju klijenta i servera mogu ometati drugi procesi zlonamernim
retransmisijama starih poruka, ili izmjenom sadržaja poruka. Ugrađivanjem u sadržaj poruke njenog
rednog broja, mogu se otkriti retransmisije starih poruka, a ugrađivanjem u sadržaj poruke kodova za
otkrivanje i oporavak od izmjena sadržaja, mogu se otkriti, pa i ispraviti izmjene sadržaja poruka.
RAZLIKA KLIJENATA I SERVERA
Različita uloga, koju klijent i server imaju u toku međusobne komunikacije (saradnje), je
prirodna posledica njihove namjene. Iz toga proizlaze i razlike u njihovoj internoj organizaciji. Dok je
za klijenta prihvatljivo da njegova aktivnost bude strogo sekvencijalna, za servera stroga
sekvencijalnost njegove aktivnosti znači manju propusnost i sporije pružanje usluga. To je najlakše
ilustrovati na primjeru servera datoteka, zaduženog za pružanje usluga, kao što je čitanje ili pisanje
datoteke. Strogo sekvencijalna aktivnost ovoga servera bi izazvala zaustavljanje njegove aktivnosti,
radi usluživanja jednog klijenta, dok kontroler ne prenese blok sa sadržajem datoteke između
masovne i radne memorije. U međuvremenu ne bi bilo usluživanja drugih klijenata, čak i ako bi se
njihovi zahtjevi odnosili na blokove datoteka, prisutne u baferima radne memorije. Ovakva
sekvencijalnost nije prisutna kod tradicionalnih operativnih sistema, jer nakon zaustavljanja
aktivnosti jednog procesa u sloju za upravljanje datotekama, drugi proces može nastaviti aktivnost u
istom sloju. Zato je za servere potrebno obezbijediti više niti. Pri tome, svaka od niti (u okviru istog
servera) opslužuje različitog klijenta, a broj ovih niti zavisi od broja postavljanih zahtjeva i menja se
u vremenu. Postojanje više niti zahtjeva njihovu sinhronizaciju, dok pristupaju globalnim (statičkim)
promenljivim servera.
FUNKCIJE DISTRIBUIRANOG OPERATIVNOG SISTEMA
Mikrokerneli stvaraju osnovu za obrazovanje distribuiranog operativnog sistema (distributed
operating system, middleware). Njegov zadatak je da objedini sve računare distribuiranog
računarskog sistema, tako da korisnik distribuiranog operativnog sistema ne vidi pojedine računare,
nego jedinstven sistem, koji pruža mnoštvo usluga. Sve ove usluge se dobijaju na uniforman način,
pri čemu korisnik nije svjestan mesta na kome se usluge pružaju.
Distribuirani operativni sistem obrazuje (nudi) jedinstven skup datoteka, sa uniformnim
načinom označavanja datoteka i sa jedinstvenom hijerarhijskom organizacijom datoteka (koju na isti
način vidi svaki korisnik). Ovakav distribuirani skup datoteka se oslanja na više servera direktorijuma
i na više servera datoteka. Serveri direktorijuma podržavaju hijerarhijsku organizaciju datoteka, a
serveri datoteka podržavaju pristup sadržaju (običnih) datoteka. U direktorijumima (kojima rukuju
serveri direktorijuma) uz imena datoteka (odnosno uz imena direktorijuma) ne stoje samo redni
brojevi deskriptora datoteka, nego i redni brojevi servera datoteka (odnosno servera direktorijuma),
kojima pripadaju pomenuti deskriptori.
U distribuiranom skupu datoteka pristup datoteci podrazumijeva konsultovanje servera imena,
radi pronalaženja servera direktorijuma, od koga kreće pretraživanje direktorijuma. Pretraživanje
direktorijuma može zahtjevati kontaktiranje različitih servera direktorijuma, dok se ne stigne do
servera datoteka sa traženom datotekom.
Serveri direktorijuma i datoteka mogu da ubrzaju pružanje usluga, ako kopiju često korišćenih

Operativni sistemi - predavanja 71


podataka čuvaju u radnoj memoriji. Ubrzanju pružanja usluga doprinosi i repliciranje datoteka (da bi
one bile fizički bliže korisnicima), iako to stvara probleme, kada razni korisnici istovremno mijenjaju
razne kopije iste datoteke (jer se tada postavlja pitanje koja od izmjena je važeća).
Za distribuirani skup datoteka zaštita datoteka se česće zasniva na dozvolama (capability),
nego na pravima pristupa. To znači da u okviru deskriptora datoteka (odnosno, direktorijuma) ne
postoje navedena prava pristupa za pojedine grupe korisnika, nego se za svaku datoteku (odnosno,
direktorijum) generišu različite dozvole, koje omogućuju razne vrste pristupa datoteci (odnosno,
direktorijumu). Da bi klijent dobio neku uslugu, on mora da poseduje odgovarajuću dozvolu, koju
prosleđuje serveru u okviru zahtjeva za uslugom. Dozvola sadrži:
1. redni broj servera,
2. redni broj deskriptora datoteke (odnosno, deskriptora direktorijuma),
3. oznaku vrste usluge i
4. oznaku ispravnosti dozvole.
Sadržaj dozvole je zaštićen kriptovanjem, tako da nije moguće, izmjenom oznake vrste usluge
prepraviti dozvolu. Prije pružanja usluge, server provjerava dozvolu, da ustanovi da li je ispravna i da
li se njena oznaka vrste usluge podudara sa zatraženom uslugom. Dozvole dijeli server (na zahtjev
klijenata), a čuvaju ih (i po potrebi prosleđuju jedan drugom) klijenti (pri tome se podrazumijeva da
klijent, stvaralac datoteke, po njenom stvaranju automatski dobije dozvolu za sve vrste usluga, koja
uključuje i uslugu stvaranja drugih, restriktivnijih dozvola). Kada želi da poništi određenu dozvolu,
server samo proglasi njenu oznaku ispravnosti nevažećom.
Prednost zasnivanja zaštite datoteka na dozvolama umjesto na pravima pristupa je u tome da
prvi pristup ne zahtjeva razlikovanje korisnika, niti njihovo označavanje, što je važno, jer upravljanje
jedinstvenim i neponovljivim oznakama korisnika u distribuiranom računarskom sistemu nije
jednostavno. Sem toga, dozvole omogućuju veću selektivnost, jer grupišu korisnike po kriteriju
posedovanja dozvole određene vrste, a ne na osnovu njihovih unapred uvedenih (numeričih) oznaka.
Pored obrazovanja distribuiranog skupa datoteka, za distribuirani operativni sistem je bitno da
obezbijedi automatsko upravljanje svim računarima (procesorima) distribuiranog računarskog
sistema, za šta su potrebni posebni serveri procesa. Ovakvo upravljanje se svodi na raspoređivanje
procesa po procesorima, radi ostvarenja njihovog najboljeg iskorišćenja, ili radi ostvarenja najkraćeg
vremena odziva (najbržeg usluživanja korisnika). Zadatak upravljanja komplikuju razlike između
računara, jer tada svaki računar ne može da prihvati svaki izvršni oblik programa (pošto su izvršni
oblici programa vezani za procesor, za raspoloživu radnu memoriju i slično). Upravljanje komplikuje
i zahtjev za omogućavanje migracije procesa sa računara na računar (da bi se prezaposlen računar
rasteretio, a nezaposlen zaposlio). Upravljanje je olakšano, ako su unapred poznate karakteristike
opterećenja računara (vrsta i broj procesa, koji ih zaposljavaju). Kod raspoređivanja procesa po
procesorima, važno je voditi računa o saradnji procesa i procese, koji tijesno međusobno sarađuju,
raspoređivati na isti procesor.
Saradnja procesa, aktivnih na raznim procesorima, zatheva njihovu sinhronizaciju, što se
ostvaruje razmjenom poruka. Pri tome, najjednostavniji način za ostvarenje sinhronizacije se zasniva
na uvođenju procesa koordinatora. Njemu se obraćaju svi procesi, zainteresovani za sinhronizaciju, a
koordinator donosi odluke o njihovoj sinhronizaciji. Tako, ako je potrebno, na primjer, ostvariti
međusobnu isključivost procesa u pristupu istoj datoteci, svi procesi traže od koordinatora dozvolu za
pristupe, a on dozvoljava uvek samo jednom procesu da pristupi datoteci. Na sličan način se može
ostvariti i uslovna sinhronizacija. Za razliku od ovakvog centralizovanog algoritma sinhronizacije,
koji se zasniva na uvođenju koordinatora, postoje i distribuirani algoritmi sinhronizacije, koji se
zasnivaju na međusobnom dogovaranju procesa, zainteresovanih za sinhronizaciju. Distribuirani
algoritmi sinhronizacije zahtjevaju sredstva za grupnu komunikaciju procesa (odnosno, sredstva za
efikasan način da jedan proces pošalje poruke svim ostalim procesima iz grupe procesa,
zainteresovanih za sinhronizaciju, i da od njih primi odgovore). Pored veće razmjene poruka,
distribuirani algoritmi sinhronizacije su komplikovaniji od centralizovanih algoritama, a pri tome ne
nude prednosti, tako da je njihov razvoj više od principijelnog, nego od praktičnog značaja.
Za distribuirane operativne sisteme nije samo bitno da omoguće efikasnu sinhronizaciju
procesa, nego i da podrže poseban oblik sinhronizacije procesa, koji obezbijeđuje da se obave ili sve
operacije iz nekog niza pojedinačnih operacija, ili ni jedna od njih. Ovakav niz operacija se naziva
transakcija, a transakcije, koje imaju svojstvo da se obave u cjelosti ili nikako, se nazivaju atomske

Operativni sistemi - predavanja 72


transakcije (atomic transaction). Primjer niza operacija, za koje je neophodno da obrazuju atomsku
transakciju, je prebacivanje nekog iznosa sa računa jedne banke na račun druge banke. Pri tome,
proces klijent (koji u ime korisnika obavlja ovo prebacivanje) kontaktira dva servera (koji
reprezentuju dve banke), da bi obavio transfer iznosa sa jednog na drugi račun. Transfer se mora
obaviti tako, da drugi klijenti mogu videti oba računa samo u stanju ili pre, ili posle transakcije.
Znači, za atomske transakcije je neophodno da budu međusobno isključive (ako pristupaju istim
podacima), ali i da njihovi rezultati budu trajni (da se, jednom napravljena izmjena ne može izgubiti).
Aktivnost (saradnja) procesa, aktivnih na raznim procesorima, otvara mogućnost pojave mrtve
petlje. Pri tome, u uslovima distribuiranog računarskog sistema, algoritmi za izbegavanje pojave
mrtve petlje, odnosno za otkrivanje i za oporavak od pojave mrtve petlje su još neefikasniji i sa jos
manjim praktičnim značajem, nego u slučaju centralizovnog (jednoprocesorskog) računara. Zato, u
uslovima distribuiranog računarskog sistema, kada nije prihvatljiv pristup ignorisanja problema mrtve
petlje, preostaje da se spreči njena pojava (sprečavanjem ispunjenja uslova, neophodnih za pojavu
mrtve petlje).
Distribuirani operativni sistem je zamišljen tako da integrise mnoštvo računara u moćan
multiračunarski sistem. Na taj način je moguće od više jeftinih i malih računara napraviti
multiračunarski sistem, koji je jeftiniji, a moćniji od jednog velikog i skupog računara. Ovakav
multiračunarski sistem, uz to, nudi i veću pouzdanost (jer kvar pojedinačnog računara nije fatalan za
ceo sistem), kao i mogućnost proširenja (jer je moguće naknadno dodavanje računara u sistem). Pored
integrisanja pojedinačnih računara u multiračunarski sistem, distribuirani operativni sistem
omogućuje i deljenje skupih resursa ovakvog multiračunarskog sistema između više korisnika, a nudi
i prilagodljivost zahtjevima korisnika, željenu raspoloživost i predvidivost odziva, pa, čak, i veću
sigurnost (jer korisnici mogu da čuvaju poverljive podatke na svom računaru, koga fizički štite i čije
korišćenje mogu da kontrolišu). Slabe tačke distribuiranog operativnog sistema su nesigurnost
komunikacionih linija i teško ostvarenje njegove ukupne funkcionalnosti. Zato se u praksi sreću
mrežni operativni sistemi, koji se u pojedinim osobinama samo približavaju distribuiranim
operativnim sistemima.
5.5 MREŽNI OPERATIVNI SISTEMI
Mrežni operativni sistemi se ne zasnivaju na mikrokernelima, nego nastaju dogradnjom
postojećih (različitih) operativnih sistema, s ciljem objedinjavanja njihovih skupova datoteka u
jedinstven skup datoteka. Pri tome su korisnici svjesni prisustva i uloge pojedinih računara, koje
objedinjuje mrežni operativni sistem, pa o tome vode računa u toku svog rada. Mrežni operativni
sistemi objedinjuju skupove datoteka raznih računara, tako sto dozvoljavaju klijentu da u svoj skup
datoteka uključi skup datoteka mrežnog servera datoteka (koji je zadužen samo za upravljanje
sopstvenim skupom datoteka). Ovo uključivanje se ostvaruje na nivou direktorijuma, pri čemu razni
klijenti imaju različit pogled na ukupan skup datoteka mrežnog operativnog sistema, jer direktorijume
servera mogu da uključuju u proizvoljno mjesto lokalne hijerarhijske organizacije datoteka. Pokušaj
pristupa datoteci iz nekog od uključenih direktorijuma automatski dovodi do komunikacije klijenta i
odgovarajućeg servera. Ovakva komunikacija zahtjeva usaglašenost svih računara (koje objedinjuje
mrežni operativni sistem) u pogledu formata i značenja poruka. To je neophodna (a često i jedina)
dodirna tačka računara, obuhvaćenih mrežnim operativnim sistemom.

14.SIGURNOST I ZAŠTITA
Sigurnost
Postoji potreba da operativni sistem onemogući neautorizovani pristup podacima svakog korisnika.
Sigurnost i zaštita su usko vezani za fajl sistem (o operativnoj memoriji smo ranije pričali). Dakle,
potrebno je onemogućiti pristup nekim fajlovima.
Sigurnost se odnosi na opšti, filozofski pojam, dok zaštitu predstavljaju usvojeni principi sigurnosti
koji se realizuju na nekom operativnom sistemu.
Kada sigurnost fajl sistema može biti ugrožena?
-viša sila (udar groma, požar, zemljotres...)
-hardverska i softverska greška
-ljudske greške
Jedan od načina na koji se branimo od gubitka važnih podataka je pravljenje rezervnih kopija
(backupa) koje se potom čuvaju na sigurnom mestu.
Operativni sistemi - predavanja 73
Pored ovih slučajnih postoje i namerni napadi na sigurnost fajl sistema. Lica koja žele pristupiti
zabranjenim fajlovima mogu biti:
-laici, koji nisu zlobni ali ako im se pruži prilika da “zavire”u tuđu poštu to će i uraditi.
-oni za koje zaobilaženje mehanizama zaštite predstavlja intelektualni izazov.
-oni koji žele da izvuku materijalnu korist iz toga (prevarom, ucenom,...)
-špijuni (vojni, privredni,...)
Nekoliko poznatih grešaka u ranijim operativnim sistemima
UNIX u fajlu /etc/passwords čuva spisak svih korisnika sistema u obliku
<korisnič ko_ime kriptovana_lozinka identifikacoini_broj grupa ime prezime ...>
Ovaj fajl je svima dostupan za čitanje. Postoji komanda UNIX-a lpr koja se koristi za štampanje
fajlova. Ova komanda između ostalih ima i opciju brisanja fajla pa se njom može obrisati i fajl
passwords. Brisanjem ovog fajla ni jedan korisnik se više ne može prijaviti na sistem.
Takođe u UNIX-u. proces koji je pokrenuo neki program ima ista prava kao i njegov vlasnik. Postoji
bit koji kontroliše prava i on se zove setuid. Ako je setuid setovan tada proces koji ga je pokrenuo ima
sva prava. Korisnik (nasilnik) iz svog procesa pokrene proces koji ima setuid postavljen na 1 (na
primer mkdir) i zatim ga nasilno prekine. Pod UNIX-om postoji standardni fajl core koji operativni
sistem kreira i popunjava kada dođe do greške pri izvršavanju programa. Ako korisnik predhodno
napravi u svom direktorijumu fajl core kao link na fajl /etc/passwords neki sadržaj će biti direktno
upisan u njega. Ovo je moguće zato što je u trenutku prekida proces imao postavljen setuid na 1 tj.
imao je sve privilegije. Uz malo muke, ono što se upisuje može ličiti na sadržaj passwords pa se
korisnik na taj način dopiše.
MULTICS je imao loše zaštićene mehanizme za paketne obrade. Bilo je moguće učitati podatke sa
trake, odnosno kartice i snimiti ih bilo gde. Jedini uslov je bio da se to uradi paketno a ne
interaktivno. Ljudi su tada pravili svoje editore koje su snimali u direktorijum odakle žele ukrasti fajl.
Kada bi korisnik pokrenuo takav editor ne bi bio svestan da dok on kuca, program mu paketno krade
podatke. Ovakvi programi, koji osim što rade ono čemu su namenjeni rade i nešto “krišom”se
nazivaju trojanski konji.
TENEX - Digital DEC10 je takođe imao neke mane:
- za svaki Page Fault se mogla “zakačiti” proizvoljna procedura
- pristup svakom fajlu se kontrolisao lozinkom i to interaktivno
- lozinka se proveravala slovo po slovo. čim bi naišao na slovo koje ne odgovara, javio bi grešku
Neka neki program želi da pristupi zaštićenom faju. On pokušava sa nekom lozinkom koja se napravi
tako da prvo slovo leži u jednoj stranici memorije a ostatak u drugoj. Memorija se popuni (nebitnim
stvarima) tako da se u njoj nađe samo prva stranica. Ovo je potrebno da bi došlo do Page Faulta
nakon što se obradi prvo slovo lozinke. Na Page Fault se “zakači”procedura koja obaveštava o
svakom Page Fault-u. Tako, ako se pogodi prvo slovo procedura će odreagovati na Page Fault i
obavestiti korisnika, a ako ne operativni sistem će javiti da je lozinka pogrešna. Kada se pogodi prvo
slovo onda se lozinka tako “šteluje”da prva dva slova budu u jednoj stranici a ostatak u drugoj i
postupak se ponavlja. Za lozinku od 6 od 30 mogućih znakova grubom silom bi trebalo izvršiti 306
provera, a na ovaj način samo 30 x 6 = 180.
Operativni sistem OS/360 je omogućavao da se u toku računanja u pozadini nešto čita. Lozinka se pri
kopiranju proveravala u dva navrata i to prvi put se proveravalo smemo li uopšte kopirati sa trake u
zadati fajl a drugi put kada kopiranje zaista i počne (ali tada se nije proveravalo i ime fajla). Ako se
između ove dve provere promeni ime fajla, bilo je moguće kopirati preko nekog fajla bez obzira da li
se imala njegova lozinka ili ne.
Šta treba da radi osoba koja provaljuje ?
- Treba da gleda deo diska sa izbačenim stranicama iz memorije. Operativni sistem ih nekad ne obriše
posle swap-ovanja pa se tu mogu kriti vredni podaci.
- Treba da poziva nepostojeće sistemske pozive ili postojeće ali sa pogrešnim parametrima. Postoji
mogućnost da će se operativni sistem zbuniti pa se iz takvih situacija može nešto korisno zaključiti.
- Pri procesu prijavljivanja nekako ga nasilno prekinuti. Tako se možda može zaobići proveravanje
lozinke.
- Modifikacija strukture podataka koja se koristi za pozivanje servisa operativnog sistema može
zbuniti operativni sistem pa se opet može nešto korisno saznati.

Operativni sistemi - predavanja 74


- Može da napravi program koji simulira prijavljivanje. Pokrene takav program i napusti računar.
Sledeći korisnik seda za računar i unosi svoju lozinku koju program negde zapamti pa zatim pozove
pravi program za prijavljivanje.
- Raditi sve što uputstva kažu da nije dozvoljeno, da je opasno ...
- Šarmirati sekretaricu ?
Principi za ostvarivanje sigurnosti
- Dizajn zaštite treba da bude javan. Treba dobro realizovati principe (pa se hvaliti).
- Podrazumevajući način pristupa svakom objektu -fajlu je “ bez pristupa” tj niko ne sme da mu
pristupi. U praksi nikad nije baš tako ali je nešto logično, na primer vlasnik ima sve privilegije a
ostali nikakve.
- Uvek se traže tekuća prava pristupa..
- Svaki proces treba da započne rad sa što manje privilegija. Ako su potrebne veće, onda se naknadno
eksplicitno povećaju.
- Mehanizam zaštite treba da bude jednostavan, uniforman, od početka zamišljen.
- Mehanizam zaštite treba da bude psiholiški prihvatljiv.
Provera identiteta
Ni jedan korisnik se ne bi smeo lažno predstaviti. Korisnik ne sme koristiti resurse ako nije ovlašć en.
Uobič ajeni nač in provere identiteta je putem lozinke. Pri prijavljivanju na UNIX sistem potrebno je
uneti login (korisnič ko ime pod kojim smo poznati operativnom sistemu) i password (lozinka).
UNIX tada proverava u fajlu etc/passwords da li postoji odgovarajuć e ime i da li lozinka odgovara.
Lozinka je jednostrano šifrirana što znači da ne postoji način da se nakon kriptovanja vrati u
prvobitno stanje.
Kako izabrati lozinku i da li je ona dovoljna?
Teoretski je moguć e napraviti 957 lozinki dužine sedam karaktera što je i više nego dovoljno. Ali
korisnici prave kraće lozinke i ne koriste sve moguće karaktere. Takođe, korisnici su skloni
standardnim, predvidivim lozinkama. Tokom nekog istraživanja pokušale su se provaliti lozinke koje
ljudi koriste. Upotrebljavana su imena i prezimena korisnika, imena njihovih žena, dece, brojevi
automobilskih tablica, datumi rođenja i slično. Kada su tako napravljene lozinke upoređene sa pravim
više od 85% je bilo pogođeno.
Zato se uvode dodatne provere.
- Generatori slučajnih brojeva. Lozinka se dodatno šifrira 12-bitnim brojem koji je jedinstven za
svakog korisnika?
- Jednokratne lozinke. Korisnik ima knjižicu sa lozinkama, pročita koja mu treba, iskoristi je pa
dobije drugu.
- Lična pitanja. Pri prvom prijavljivanju se korisniku postavljaju lična pitanja, pa se ponekad
proverava identitet korisnika pomoću njih.
- Korisniku se pri prvom prijavljivanju dodeli algoritam, na primer x . Pri kasnijim prijavljivanjima
od korisnika se zahteva ime, lozinka i da mu se neki broj. Korisnik tada unosi ime, lozinku i rešenje.
- Pri odabiranju lozinke se mogu postavljati uslovi tako da lozinka na kraju mora ispasti nelogič na.
Na primer, korisnik u lozinci mora da iskoristi šest znakova od kojih jedan mora biti specijalan, jedan
mora biti veliko slovo, jedan mora biti cifra,...
Ako je provera identiteta jako bitna onda se koristi i fizička provera (koja nije baš jako popularna od
strane korisnika). Može se proveravati zenica, krv, otisci prstiju,...
Zaštita

Domen2 Domen3
Svakom objektu se dodele tri slova koja označavaju prava pristupa. Na primer (objekat,rwx). Domen
je skup parova (objekat,prava).Kada se proces počne izvršavati dodeli mu se domen i tada on može da
pristupa samo objektima iz tog domena i to kako su prioriteti zadani. Oni koji dele domene sa
vremena na vreme mogu menjati domen. Domeni se predstavljaju matricama.
Na primer:

Operativni sistemi - predavanja 75


Fajl 1 Fajl 2 Fajl 4 Fajl 4 Fajl 5 Stampac Fajl 6 Ploter D1 D2 D3

Dom 1 R RW Enter

Dom 2 R RW RX W

Dom 3 W R W

Poslednje tri kolone služe za prelazak iz jednog domena u drugi.


Kako su ovakve matrice prilič no retko popunjene, obič no se predstavljaju drugač ije i to po vrstama
ili kolonama pri čemu se pamte samo korisni podaci. Ako se matrica pamti po kolonama onda se
naziva Access Control List (ACL), a ako se pamti po vrstama C-lista.
Na primer, po kolonama. Domen je korisnik+grupa:
Fajl0 - (Pera,*,rwx) - Fajlu Fajl0 može da pristupa Pera iz bilo koje grupe i da radi sve.
Fajl1 - (Djoka,system,rwx) - Fajlu Fajl1 može da pristupa Djoka iz grupe system i da radi sve.
Fajl2 - (Pera,*,rw)(Mika,osoblje,r)(Aca,nastavnici,rx) - Fajlu Fajl2 mogu da pristupaju Pera iz bilo
koje grupe(da čita i piše),Mika iz grupe osoblje(da čita) i Aca iz grupe nastavnici(da čita i izvršava).
Fajl3 - (Pera,*, )(*,studenti,rwx) - Fajlu Fajl3 Pera iz bilo koje grupe ne može da pristupi ni na koji
način dok svi korisnici iz grupe studenti mogu da rade sve.
U UNIX-u su svakom fajlu pridruženi 9 bitova kojima se određuju prioriteti. Prva tri se odnose na
vlasnika, druga tri na grupu kojoj vlasnik pripada, a poslednja tri na sve ostale korisnike. r bit
označava pravo čitanja, w bit označava pravo pisanja, a x bit označava pravo izvršavanja fajla.
Na primer, 111 101 100 znači da:
-vlasnik može da čita i piše u fajl i da ga izvršava fajl ( rw x v l a s n i k)
-grupa kojoj vlasnik pripada može da čita i izvršava fajl ( rw x grupa)
-svi ostali mogu samo da čitaju fajl. ( rw x o s t a l i)
Zaštita operativnih sistema
Zaštita OS ima više nivoa, više namena i više načina. Treba paziti ko može pristupati
računarima. Kada je već pristupio šta može da radi. Postoji pitanje o efikasnom korišćenju resursa. Tu
postoji čitav niz mera koje mogu da se preduzimaju. Većina od tih mera se zasniva na oblasti koja se
zove kriptografija. To je menjanje izvornog zapisa tako da postane nerazumljiv onome ko ne zna
kako da ga dešifruje. To se radi na različitim mestima: pri pristupu sistemu, čuvanju fajlova.
Apsolutna zaštita ne postoji. Ako je računar spojen na mrežu onda tu govora o sigurnosti ne može da
bude.
Prva stvar koju treba utvrditi je ko može da pristupa računaru. Potrebno je da se taj korisnik
identifikuje. Danas se to rešava upotrebom password-a. Takođe su mogući načini koji čoveka
određuju jedinstveno, a brzo i efikasno. Kao što su otisci prstiju, zenica oka, …
Ideja sa password-om deluje jednostavno i razumno s tim što se u praksi javljaju mnogi
problemi. Od početka je osnovna ideja bila da postoji neka datoteka u kojoj se nalazi spisak svih
korisnika i njihovih šifri. Kada korisnik dođe da radi on mora prvo da prođe program login. Mnogo
vrednih informacija je koncentrisano u datoteci u kojoj su šifre. Tu datoteku treba zaštititi, ali je
praksa pokazala da jedna datoteka ne može dovoljno dobro da se zaštiti, jer treba da je stalno pri ruci
programu login.
Sledeći korak je da se šifra čuva u fajlu enkriptovana. Ta enkripcija se onda radi sa
algoritmom koji pripada klasi jednosmernih algoritama. Dobar sistem ima javni algoritam gde se kaže
tačno šta se radi sa podacima, a težina je u tome da je algoritam dobro osmišljen tako da stvarno nema
inverznog algoritma. Nevolja kod kriptografije je u tome što se nikad ne može dokazati da je
algoritam dobar, već postoje kontra primeri koji mogu pokazati da algoritam ne valja.
Kada se napravi gore navedeni sistem on će i dalje biti slab. Biće slab od onog momenta kada
korisnik unese šifru, pa dok ona ne dođe do računara. Tipičan primer je mreža gde se na jednom kraju
nalazi računar na kome se ukucava šifra, a na drugom računar sa fajlom u kome je šifra i algoritam za
kriptovanje. Taj deo između dva računara je najosetljiviji. Ako se radi o lokalnoj mreži onda tu nema
nikakve sigurnosti. Lokalne mreže su otvorene čitanju. Potrebno je samo malo softvera, jer princip
lokalne mreže je broad cast, što znači da se šalje preko zajedničkog kabla, i svako može da sluša.

Operativni sistemi - predavanja 76


Rešenje je da pasvordi putuju kriptovani. Algoritam za kriptovanje mora da bude na oba kraja.
Time problem nije u potpunosti rešen, i tome mogu da se nalaze kritike i onda ima različitih nivoa
kako se to brani.
Postoje i drugačiji napadi koji su dosta češći, a koji se ne zasnivaju na hardverskoj tehnologiji,
već na softveru i psihologiji.
Kada je korisnik već prišao računaru onda treba da se ograniči čemu on može da pristupa.
Jedna od osnovnih nevolja je što korisnik mora da pristupa nekim resursima, kojima ne bi trebao da
ima pristup (štampanje , komunikacije…). Zato programi nisu nikada do kraja istestirani, tu se radi o
ljudima koji ulažu veliki napor da nađu rupu. Program može abnormalno da se prekine i onda može
da ono što imam u memoriji izbaci na disk.
Jedna stvar koja se javila na računarima pre 10-ak godina su programi koji prave štete. Ti
programi mogu da se klasifikuju na:
Viruse; crve(razmnožavaju se, a ne prave drugu štetu); trojanske konje
Ovo nije precizna klasifikacija.
To su programi koji su zlonamerno ubačeni u sistem. Virus se napuni u memoriju i tamo sedi i
kad god se neki drugi program startuje on se prikači za njega. Takođe može da pretražuje po disku i
da kad god naiđe na program sa ekstenzijom exe da se prikači na njega. Tako se on širi, a kada se
zaraženi program prebaci na drugi računar on počne tamo da se širi. Mesta koja su zgodna su izvršni
programi, i delovi OS koji se stalno učitavaju kao command.com. On je zgodan jer se uvek učitava i
prisutan je na svakom sistemu, ali mana je to što provera uvek počinje od njega. Ovim načinom
širenja se menja veličina fajlova, ali virus može da obriše deo programa pa da se tamo postavi, a time
sam program prestaje da bude funkcionalan čime može da se otkrije virus.
Kasnije su virusi počeli da se čuvaju na boljim mestima kao što je boot sector i praticiona
tabela. Ona su zgodna zato što su prisutna na svakom računaru, a ona se teže proveravaju. Boot sector
se sastoji iz prvih 512 bajtova pa je zgodno da se tamo prikači, a isto tako praticiona tabela se sastoji
od 512 bajtova od kojih je 30 zauzeto.
Kasnije su počeli da se pojavljuju samomodifikujući virusi. Onaj koji može da formatira disk
je primer takvog. Suštinski kod je:
Load al,15
Load ah, 30
To je suština koja treba da stoji a okolo mogu biti ukrasi koji se mogu menjati. Ljudi koji
prave viruse uzimaće suštinski deo, ali taj suštinski kod može da se modifikuje.
Neki kažu da viruse prave oni koji prave programe za otklanjanje virusa. Programi koji
pronalaze viruse ponudiće da očiste viruse, ali ipak najsigurnije rešenje je da se preformatira disk i
očisti particiona tabela. Virusi su nalaženi i na originalnim fabričkim disketama, a ne samo na
piratskim programima.
Što se tiče OS, DOS je bio najosetljiviji na viruse jer nema nikakve zaštite. Kod unix-a i
Windows NT-a toga nema jer korisnik nema direktan pristup boot sektoru, particionoj tabeli ni bilo
čemu drugome. To je tamo zaštićeno i stvar je mnogo teža, ali ne i nemoguća.
Svaka kriptografija se danas zasniva na sledećoj ideji. Uzme se tekst koji hoće da se šifrira i
onda se taj tekst na neki način kombinuje sa nekim drugim podacima koji se zovu ključ, niz
određenog broja bitova. To kombinovanje može da se vrši na razne načine ali je praksa pokazala da je
XOR operacija najbolja. Ona je zgodna zbog toga što se istom metodom šifrirani tekst vraća u
originalno stanje. Stvar nije u algoritmu već je cela stvar u ključu. Uzme se deo teksta, on se šifrira
ključem pa se onda uzme naredni deo teksta… Ključ mora da bude dovoljno dugačak, jer postoje
razne metode napada na sistem.
Statistički napad, ako je ključ dužine jednog bajta to postaje lako za svaki jezik postoji
verovatnoća njegovog pojavljivanja u tekstu. Ako su uzme ključ dužine 2 bajta onda za slova umesto
30 biće 900 kombinacija. Zato ključ treba da bude dovoljno dugačak da bi se ovakvi napadi otklonili.
Napadi grubom silom. Podrazumevamo da su algoritam i šifrirani tekst poznati protivniku, ali
da je algoritam jednsmeran. Problem je u dokazivanju da taj algoritam nema inverz.
Postoji jedan zapanjujuće jednostavan sistem koji je teoretski dokazano savršen, ali on ima
neke druge mane. Savršeno šifriranje postiže se metodom koja se zove one time pass. Ovaj ključ se
samo jednom koristi i njegova dužina je dužina teksta. Nepraktičan je, dugačak kao sam tekst i nikad

Operativni sistemi - predavanja 77


se ne ponavlja. Onda se postavlja pitanje distribucije ključa, ako se nađe način da se doturi ključ,
onda je nađen način da se doturi i poruka. U današnjim uslovima sa velikim diskovima ovaj način ne
zvuči loše jer na disku može stati jedan veliki ključ dužine veće od dužine svakog teksta koji želi da
se šifrira.
Problematičan je onaj deo da ključ treba da bude slučajan. Pravu slučajnost je teško potići.
Ona se postiže negde iz prirode. Postoje uređaji koji se zovu generatori slučajnih brojeva, a oni mogu
da se zasnivaju na raznim principima. Jedan je na osnovu radiaktivnog raspada. Takvi uređaji postoje
ali su spori, pa to onda nije zgodan i široko dostupan način za generisanje slučajnih brojeva. Zato se
mi ograničavamo na pseudo slučajne brojeve gde se krije prava opasnost. Za kriptografiju ovi brojevi
nisu slučajni, napravljeni su na osnovu nekog algoritma.
Ključ može biti deo teksta iz knjige od 50. do 100. strane. Tako dugačak ključ može da se
napravi ali to nije jednostavno. Danas ovakvi ključevi mogu da se koriste ali ih je teško praktično
izgenerisati, već se koriste neki drugi metodi. Te metode se mogu klasifikovati u dve kategorije. Ni sa
jednim od tih sistema ne možemo biti sigurni, jer je kriptografija naučna oblast u kojoj ne postoji
dobronamernost.
Klasična enkripcija je enkripcija pomoću jednog ključa. Sa ovakvim metodom nastaje
problem sa distribucijom ključa. Ako ima više mesta sa kojima se komunicira onda taj ključ mora
svuda da se pošalje i da se pazi da negde ne procuri. Prednost ovih algoritama je da su brzi.
Najpoznatiji algoritam ove vrste je DES. Garantuje da na nivou pojedinca niko neće moći da ga
dešifruje, a na nivou države da će sigurno moći da ga dešifruju.
Ovih standardizovanih algoritama ima dosta u svetu i svi rade na sličan način. Potreban je
nekakav ključ koji treba da je kratak jer mora da se saopšti drugoj strani. Na osnovu tog kratkog
ključa treba dobiti kvalitetnu enkripciju, pa je onda pitanje algoritma koji treba dobro da se napravi.
Tipično je da se dužina ključa meri u bitovima. Dužina DES ključa je 56 bita. Kod DES se kripcija
radi na sledeći način:
Cela poruka se podeli na grupe od 64 bita. Te grupe se jedna po jedna kombinuje sa ključem.
Tu se rade razna mešanja, a ona su tipično takva da se podeli grupa od 64 bita na levu i desnu stranu,
pa se uvek rekurzivno čuva prethodna i sledeća iteracija. Obično se desna strana kmbinuje sa
ključem. Mešanje se vrši tako da od 56 bita ključa uzmu se 42 i to na propisan način pa se oni na neki
način ispermutuju, pa se sa njima nešto uradi i dobije se ključ za prvi prolaz; za drugi prolaz uzmu se
neka druga 42 bita i slično kao prethodno… Ovo ima smisla da se radi jer čini sistem otpornim na
statističke napade.
DES nikada nije bio popularan jer je većina stručnjaka rekla da je ključ od 56 bita prekratak.
Analize pokazuju da postoji ne baš čista inverzija iz čega izlazi da se sa jednim dobrim računarom
može izvršiti dešifrovanje za 2-3 sata) čime dolazi u pitanje sigurnost tog sistema.
Metodi šifriranja javnog ključa
Njihova osnovna osobina je da imaju dva ključa. Ne koristi se isti ključ za enkripciju i dekripciju. Ovo se
svodi na to da jedan ključ može javno da se objavi, a drugi je tajni i čuva se za sebe. Time je spremljena
komunikacija od onoga ko uzme javni ključ do onoga ko ima svoj tajni ključ. Ako je poslata poruka šifrirana
javnim ključem, ona može da se dešifruje samo tajnim ključem.
Ovim je rešena distribucija ključa, ali se uočava naredni problem: kada A dobije poruku od
osobe B, osoba A nije sigurna da li je to osoba B poslala, jer A je svoj javni ključ objavio tako da
može bilo ko da mu ima pristup. Mora na neki način da se reši pitanje ko je stvari autor poruke. To se
jednostavno rešava tako što na poruku osoba B nadoveže svoj potpis. B kriptuje javnim ključem od A
poruku + potpis koji je kriptovan sa tajnim ključem od B. A kada primi poruku, deo poruke dekriptuje
svojim tajnim ključem (korisni deo poruke) a javnim ključem B potpis koji je sastavni deo poruke.
Iako izgleda kao idealan i ovaj način ima svoje mane. Glavna mana je što je jako spor, ne
koristi se real time, pa čak ni za pisane poruke jer je i tamo jako komplikovan. Često se koristi samo
za prenošenje ključa. Druga mana je to što nije sigurno koliko je ovaj sistem siguran (za sada nema
dokazanih slučajeva da ga je neko provalio). Najpoznatiji algoritam sa sistemom javnog ključa je
RSA. Osnovna ideja je zasnovana na velikim prostim brojevima i na tome da se oni teško mogu
faktorizovati. RSA izgleda ovako:
Uzmu se dva velika prosta broja p i q, u zavisnosti od sigurnosti i tehnologije treba da imaju
od 100 do 200 cifara. Napravi se proizvod n = p * q i tu je onda ideja da n teško može da se rastavi na
polazne faktore. Izabere se broj d koji je relativno prost u odnosu na (p-1) * (q-1) tj. (d, (p-1)*(q-1)) =

Operativni sistemi - predavanja 78


1. Izabere se e takav da je (e*d) mod (p-1)(q-1) = 1; onda se parovi (e,n) proglase javnim ključem a
(d,n) tajnim ključem.
Ceo tekst se podeli na blokove tako da svaki blok može da se kodira brojem od 1 do n. Tada
se blok p iz {1…n} diže na stepen e ili d u zavisnosti od toga da li se vrši enkripcija ili dekripcija.
Enkripcija se sastoji u tome da pe mod n, a dekripcija: pd mod n. može da se pokaže da su ove
operacije inverzne.
Primer.
PGP je ovakav sistem koji se koristi za slanje elektronske pošte preko interneta. Radi slično
kao RSA ali se algoritam za enkripciju menja. Ovde se javlja problem verodostojnosti javnog ključa.
Da li je objavljeni javni ključ stvarno taj javni ključ? Drugi problem je koji uvek važi kod
kriptografije: da li taj sitem stvarno ne može da se probije.

Operativni sistemi - predavanja 79

You might also like