operativni sistemi - predavanja

79
Operativni sistemi - predavanja 1 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.

Upload: pavle-stepanic

Post on 24-Jun-2015

1.185 views

Category:

Documents


16 download

TRANSCRIPT

Page 1: Operativni sistemi - predavanja

Operativni sistemi - predavanja 1

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.

Page 2: Operativni sistemi - predavanja

Operativni sistemi - predavanja 2

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

Page 3: Operativni sistemi - predavanja

Operativni sistemi - predavanja 3

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,

Page 4: Operativni sistemi - predavanja

Operativni sistemi - predavanja 4

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

Page 5: Operativni sistemi - predavanja

Operativni sistemi - predavanja 5

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)

Page 6: Operativni sistemi - predavanja

Operativni sistemi - predavanja 6

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

Page 7: Operativni sistemi - predavanja

Operativni sistemi - predavanja 7

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,

Page 8: Operativni sistemi - predavanja

Operativni sistemi - predavanja 8

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.

Page 9: Operativni sistemi - predavanja

Operativni sistemi - predavanja 9

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.

Page 10: Operativni sistemi - predavanja

Operativni sistemi - predavanja 10

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.

Page 11: Operativni sistemi - predavanja

Operativni sistemi - predavanja 11

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.

Page 12: Operativni sistemi - predavanja

Operativni sistemi - predavanja 12

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

Page 13: Operativni sistemi - predavanja

Operativni sistemi - predavanja 13

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.

Page 14: Operativni sistemi - predavanja

Operativni sistemi - predavanja 14

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.

Page 15: Operativni sistemi - predavanja

Operativni sistemi - predavanja 15

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.

Posao Vreme 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.

Posao Vreme izvršavanja

1 6 2 3 3 8 4 7 Upotreba SJF algoritma daje sledeću Gantovu kartu.

Page 16: Operativni sistemi - predavanja

Operativni sistemi - predavanja 16

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

Page 17: Operativni sistemi - predavanja

Operativni sistemi - predavanja 17

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

Page 18: Operativni sistemi - predavanja

Operativni sistemi - predavanja 18

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

Page 19: Operativni sistemi - predavanja

Operativni sistemi - predavanja 19

ASINHRONI KONKURENTNI PROCESI PPRROOCCEESS

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.

Page 20: Operativni sistemi - predavanja

Operativni sistemi - predavanja 20

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. AASSIINNHHRROONNII PPRROOGGRRAAMMII 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. SSOOFFTTVVEERRSSKKAA RREEŠŠEENNJJAA 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.

Page 21: Operativni sistemi - predavanja

Operativni sistemi - predavanja 21

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

Page 22: Operativni sistemi - predavanja

Operativni sistemi - predavanja 22

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. HHAARRDDVVEERRSSKKAA RREEŠŠEENNJJAA 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

Page 23: Operativni sistemi - predavanja

Operativni sistemi - predavanja 23

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. SSEEMMAAFFOORREE 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(s0) { // Skida se jedan proces sa liste i javlja se kernelu da taj proces propusti }

Page 24: Operativni sistemi - predavanja

Operativni sistemi - predavanja 24

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);

Page 25: Operativni sistemi - predavanja

Operativni sistemi - predavanja 25

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(c0) up(s1); up(s2); down(s2); else } up(s1); up(s1); KKRRIITTIIČČNNII RREEGGIIOONNII 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--; } } MMOONNIITTOORRII 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

Page 26: Operativni sistemi - predavanja

Operativni sistemi - predavanja 26

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

Page 27: Operativni sistemi - predavanja

Operativni sistemi - predavanja 27

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

Page 28: Operativni sistemi - predavanja

Operativni sistemi - predavanja 28

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

Page 29: Operativni sistemi - predavanja

Operativni sistemi - predavanja 29

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.

Page 30: Operativni sistemi - predavanja

Operativni sistemi - predavanja 30

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.

Page 31: Operativni sistemi - predavanja

Operativni sistemi - predavanja 31

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

Page 32: Operativni sistemi - predavanja

Operativni sistemi - predavanja 32

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

Page 33: Operativni sistemi - predavanja

Operativni sistemi - predavanja 33

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.

Page 34: Operativni sistemi - predavanja

Operativni sistemi - predavanja 34

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

Page 35: Operativni sistemi - predavanja

Operativni sistemi - predavanja 35

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.

Page 36: Operativni sistemi - predavanja

Operativni sistemi - predavanja 36

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.

Page 37: Operativni sistemi - predavanja

Operativni sistemi - predavanja 37

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

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

Page 38: Operativni sistemi - predavanja

Operativni sistemi - predavanja 38

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

Page 39: Operativni sistemi - predavanja

Operativni sistemi - predavanja 39

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.

Page 40: Operativni sistemi - predavanja

Operativni sistemi - predavanja 40

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

Page 41: Operativni sistemi - predavanja

Operativni sistemi - predavanja 41

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

Page 42: Operativni sistemi - predavanja

Operativni sistemi - predavanja 42

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

Page 43: Operativni sistemi - predavanja

Operativni sistemi - predavanja 43

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:

Page 44: Operativni sistemi - predavanja

Operativni sistemi - predavanja 44

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

Page 45: Operativni sistemi - predavanja

Operativni sistemi - predavanja 45

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:

Page 46: Operativni sistemi - predavanja

Operativni sistemi - predavanja 46

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

Page 47: Operativni sistemi - predavanja

Operativni sistemi - predavanja 47

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.

Page 48: Operativni sistemi - predavanja

Operativni sistemi - predavanja 48

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

Page 49: Operativni sistemi - predavanja

Operativni sistemi - predavanja 49

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

Page 50: Operativni sistemi - predavanja

Operativni sistemi - predavanja 50

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

Page 51: Operativni sistemi - predavanja

Operativni sistemi - predavanja 51

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

Page 52: Operativni sistemi - predavanja

Operativni sistemi - predavanja 52

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

Page 53: Operativni sistemi - predavanja

Operativni sistemi - predavanja 53

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 bajtova 1 8 3 1 2 1

opis kod korisnika

ime fajla

ekstenzija ( tip ) fajla

redni broj opisa

rezervisano broj zauzetih blokova

adresa prvog bloka

adresa drugog bloka

....... adresa 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 bajtova 8 3 1 10 2 2 2 4

opis ime fajla

ekstenzija (tip) fajla

atributi rezervisano vreme kreiranja

datum kreiranja

adresa prvog bloka

velič ina fajla u 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.

Page 54: Operativni sistemi - predavanja

Operativni sistemi - predavanja 54

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

Page 55: Operativni sistemi - predavanja

Operativni sistemi - predavanja 55

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)

Page 56: Operativni sistemi - predavanja

Operativni sistemi - predavanja 56

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 2

12

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.

Page 57: Operativni sistemi - predavanja

Operativni sistemi - predavanja 57

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

Page 58: Operativni sistemi - predavanja

Operativni sistemi - predavanja 58

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 sistem koristi 64 bit-ne adrese i teoretski radi sa particijama do 2

64

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

Page 59: Operativni sistemi - predavanja

Operativni sistemi - predavanja 59

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 koji može da se povećava teoretski sve do 2

48

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.

Page 60: Operativni sistemi - predavanja

Operativni sistemi - predavanja 60

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.

Page 61: Operativni sistemi - predavanja

Operativni sistemi - predavanja 61

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

Page 62: Operativni sistemi - predavanja

Operativni sistemi - predavanja 62

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

Page 63: Operativni sistemi - predavanja

Operativni sistemi - predavanja 63

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 :

Page 64: Operativni sistemi - predavanja

Operativni sistemi - predavanja 64

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

Page 65: Operativni sistemi - predavanja

Operativni sistemi - predavanja 65

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.

Page 66: Operativni sistemi - predavanja

Operativni sistemi - predavanja 66

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:

Page 67: Operativni sistemi - predavanja

Operativni sistemi - predavanja 67

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.

Page 68: Operativni sistemi - predavanja

Operativni sistemi - predavanja 68

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

Page 69: Operativni sistemi - predavanja

Operativni sistemi - predavanja 69

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

Page 70: Operativni sistemi - predavanja

Operativni sistemi - predavanja 70

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,

Page 71: Operativni sistemi - predavanja

Operativni sistemi - predavanja 71

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

Page 72: Operativni sistemi - predavanja

Operativni sistemi - predavanja 72

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

Page 73: Operativni sistemi - predavanja

Operativni sistemi - predavanja 73

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.

Page 74: Operativni sistemi - predavanja

Operativni sistemi - predavanja 74

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.

Page 75: Operativni sistemi - predavanja

Operativni sistemi - predavanja 75

- 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:

Page 76: Operativni sistemi - predavanja

Operativni sistemi - predavanja 76

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 g r u p a ) -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.

Page 77: Operativni sistemi - predavanja

Operativni sistemi - predavanja 77

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

Page 78: Operativni sistemi - predavanja

Operativni sistemi - predavanja 78

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)) =

Page 79: Operativni sistemi - predavanja

Operativni sistemi - predavanja 79

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.