Professional Documents
Culture Documents
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.
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
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
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.
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
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).
pointer Stanje
procesa
Broj procesa
Programski
brojač
Registri
Memorijske
granice
Lista otvorenih
fajlova
Broj procesa
•••
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.)
Planeri
Operativni sistem ima više planera (schedulers). Dva su osnovna: dugoročni i kratkoročni. Dugoročni
planer (ili planer poslova) određuje koji će se poslovi propustiti u sistem radi obrade. U paketnim
sistemima ima više poslova koji su u sistemu nego onih koji mogu da budu izvršeni. Poslovi koji
čekaju kopiraju se na disk. Dugoročni planer bira poslove iz pula poslova i puni ih u memoriju radi
izvršenja. Kratkoročni planer (planer CPU-a) bira jedan od tih poslova koji su u memoriji i spremni
su za izvršenje i dodeljuje mu procesor.
Osnovna razlika ova dva planera je u frekvenciji njihovog izvršenja. Kratkoročni planer vrlo često
bira proces koji će se izvršavati i zato mora da bude veoma brz. Dugoročni planer se izvršava znatno
ređe. On upravlja stepenom multiprogramiranja (brojem procesa u memoriji). Ukoliko je taj stepen
stabilan, srednja brzina dolaska poslova u sistem je jednaka srednjoj brzini izlaska iz sistema. Prema
tome, dugoročni planer se aktivira samo kada neki posao napušta sistem. Zbog dugog intervala
između dva izvršenja, dugoročni planer ima na raspolaganju duže vreme za izbor posla. Takođe je
bitno da dugoročni planer taj izbor izvrši pažljivo i da napravi dobru mešavinu poslova orijentisanih
ka CPU-u i onih orijentisanih ka U/I aktivnostima.
Operativni sistemi - predavanja 13
U nekim sistemima dugoročni planer može i da ne postoji ili može da bude minimalan. Na primer,
sistemi sa deljenjem procesorskog vremena često nemaju dugoročni planer, već se svaki novi proces
šalje u memoriju kratkoročnom planeru. Stabilnost ovih sistema zavisi ili od fizičkih ograničenja ili
od razumnog ponašanja korisnika.
Neki sistemi, naročito oni sa virtuelnom memorijom ili sa deljenjem procesorskog vremena, mogu da
imaju još jedan, srednji nivo planiranja. Taj srednjoročniplanerje prikazan na slici 3.6
Ključna ideja je da je ponekad korisnije ukloniti proces iz memorije kako bi se smanjio stepen
multiprogramiranja. Posle izvesnog vremena procesi se mogu ponovo vratiti u memoriju. Ova šema
naziva se swapping(prebacivanje), a izvodi se sa ciljem da se poboljša mešavina poslova ili da bi se
oslobodila memorija u slučaju zagušenja.
Još jedna komponenta je uključena u funkciju planiranja i naziva se dispečer. Dispečer je modul koji
u stvari daje upravljenje nad CPU-om procesu koji je izabran od strane kratkoročnog planera. Ova
funkcija obuhvata punjenje registara procesa, prebacivanje u korisnički režim rada i skok na
odgovarajuću lokaciju u korisničkom programu kako bi se on nastavio. Ova komponenta mora da
bude što je moguće brža.
3.3 Algoritmi planiranja
Planeri CPU-a odlučuju o tome kojem od spremnih procesa treba dodeliti CPU. Postoji više različitih
kriterijuma planiranja.
3.3.1 Kriterijumi performansi
Različiti algoritmi imaju različite osobine i mogu da favorizuju jednu vrstu procesa u odnosu na
druge. Prilikom izbora određenog algoritma za određenu situaciju moraju se imati u vidu osobine
algoritama. Postoji više kriterijuma na osnovu kojih se mogu porediti algoritmi planiranja. Ti
kriterijumi su sledeći:
• Iskorišćenost CPU-a. Kako je CPU veoma skup uređaj, nužno je držati ga stalno uposlenim.
Iskorišćenost CPU-a može da varira od 0% do 100%. U realnim sistemima ona se obično kreće od
40% do 90%.
• Propusna moć. Ako je CPU zauzet, onda on obavlja neki posao. Propusna moć je mera koja
predstavlja broj poslova koji se mogu završiti u jedinici vremena. Za duge poslove ona može da
iznosi jedan posao po satu, dok za kratke poslove propusna moć može da bude desetak poslova u
sekundi.
• Vreme obilaska. Ovo vreme je vreme koje protekne od momenta prijavljivanja posla do njegovog
završetka i predstavlja sumu vremena koje posao provede u čekanju da uđe u memoriju, čekanju u
redu spremnih procesa, vremena tokom kojeg se izvršavao na CPU-u i vremena tokom kojeg je
obavljao U/I operacije.
• Vreme čekanja. Ovo je ukupno vreme koje proces provede u redu čekanja spremnih procesa.
• Vreme odziva. U interaktivnim sistemima vreme obilaska nije baš najbolji kriterijum, jer proces
često na početku proizvede neki izlaz i nastavlja svoje izvršenje izračunavajući nove rezultate dok se
korisniku prikazuju prethodni rezultati. Druga mera, koja se naziva vreme odziva, predstavlja vreme
koje protekne od prijavljivanja posla dok se ne proizvede prvi izlaz programa, ne računajući vreme
potrebno da sa taj izlaz zaista i prikaže na nekom izlaznom uređaju.
Kada izaberemo kriterijum na osnovu kojeg vršimo poređenje algoritama, obično želimo da dobijemo
optimalne performanse, maksimizirajući iskorišćenost CPU-a i propusnu moć a minimizirajući
vremena obilaska, čekanja i odziva. U najvećem broju slučajeva optimiziraju se srednje vredosti, ali
će nekada biti potrebno da se optimiziraju minimalne, odnosno maksimalne vrednosti ovih mera.
Vreme
Posao
izvršavanja
1 24
2 3
3 3
Ako su ovi poslovi pristigli u redosledu navođenja i opslužuju se na osnovu FCFS algoritma, rezultat
ovoga vidimo u sledećoj Gantovoj karti.
Vreme obilaska za prvi posao je 24, za drugi 27 a za treći 30. Srednje vreme obilaska je 27. Ako
pretpostavimo da su poslovi pristigli u redosledu 2, 3, 1, dobićemo sledeću Gantovu kartu.
Sada je srednje vreme obilaska jednako 13, što predstavlja značajno smanjenje. Srednje vreme
obilaska za ovaj algoritam u opštem slučaju nije minimalno moguće, a može značajno da varira u
zavisnosti od konkretnog slučaja.
Pored ovoga, posmatrajmo performanse FCFS algoritma u dinamičkoj situaciji. Pretpostavimo da
imamo jedan posao orijentisan CPU aktivnostima i više poslova orijentisanih U/I aktivnostima.
Moguć je sledeći scenario. Posao orijentisan CPU aktivnostima dobiće CPU i držaće ga doke se ne
izvrši. Za to vreme, svi ostali poslovi će završiti njihove U/I aktivnosti i biće u redu spremnih
procesa. Dok čekaju u redu, U/I uređaju su besposleni. Kada se posao koji je držao CPU izvrši i pređe
na U/I aktivnost, ostali poslovi koji imaju kratke periode CPU aktivnosti a duge periode U/I
aktivnosti, će se brzo izvršiti i vratiti U/I aktivnostima. Sada je CPU besposlen. Posao orijentisan
CPU aktivnostima se vraća u red spremnih procesa i dodeljuje mu se procesor i priča se ponavlja.
Ova situacija, gde svi procesi čekaju da jedan dugačak proces oslobodi CPU, naziva se efekat
konvoja. Rezultat tog efekta je slaba iskorišćenost i CPU-a i U/I uređaja.
3.3.3 SJF algoritam
Različit pristup planiranju poslova prisutan je kod SJF (Shortest-Job-First) algoritma. Kod ovog
algoritma se svakom poslu pridružuje i podatak o dužini njegovog sledećeg CPU ciklusa. Kada je
procesor slobodan on se dodeljuje onom poslu kod koga je ta dužina najmanja. Ukoliko postoje dva
ili više poslova iste dužine, kao sekundarni kriterijum koristi se FCFS. Razmotrimo sledeći skup
poslova prikazan u tabeli.
Vreme
Posao
izvršavanja
1 6
2 3
3 8
4 7
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.
ASINHRONI PROGRAMI
Prilikom pisanja programa na papiru uobičajeno je da se korisnti neki pseudo programski
jezik. Službene reči PARBEGIN i PAREND se koriste za pisanje programskih delova koji se
izvršavaju asinhrono. Prilikom pisanja asinhronih programa imamo više problema.
Prvi problem je komunikacija dva računara koji nemaju zajednički sat, a jedina veza im je
jedna žica. CPU ovih računara žicu posmatra kao jedan jedno-bitni registar. To je zato što CPU
svemu pristupa na uniformni način(npr. sve posmatra kao fajl). Sinhroni način slanja između ova dva
računara bi bio u praksi problem ako bi jedan slao veliki niz 0 ili 1. Problem je jer pri velikim
brzinama neće oba sata isto raditi tako da će doći do greške. Tri žice(jedna za podatke i dve
kontrolne) su minimum za asinhronu razmenu podataka. Problem je napraviti programe za slanje i
primanje.
Pošiljalac Primalac
X = Novi; while(A == 0);
A = 1; Novi = X;
while(B == 0); B = 1;
A = 0; while(A == 1);
while(B == 1); B = 0;
Ovo je jedini način za asinhrono slanje podataka između računara pomoću tri žice. X je žica
kojom se šalju bitovi, A kontrolna od pošiljaoca ka primaocu, B kontrolna obrnuto. Program na
pošiljaocu radi tako što pošalje jedan bit i javi drugom da je poslao, a zatim čeka da drugi primi bit.
Kada drugi primi bit, prvi čeka da drugi bude spreman da prihvati sledeći bit pa tek onda šalje i tako u
krug. Drugi prvo čeka da prvi pošalje, zatim primi i čeka da mu prvi javi da je video da je primljen
bit. Onda drugi javlja da je spreman da prihvati sledeći bit.
U kritičnoj sekciji u jednom trentuku može da bude samo jedna procedura. Da procedura u
kritičnoj sekciji ne bi bila prekinuta mora se onemogućiti prekid. Rešenje sa isključivanjem interapta
se ne primenjuje često, jer više softverskih delova u današnjim računarima zavisi od sistema prekida.
Kao što su OS, keš memorija, kontrola tastature... Najveći problem ovde je taj što nije dobro
definisano šta je kritična sekcija. Isključivanje interapta se primenjuje u situacijama kad je u kritičnoj
sekciji mali broj instrukcija. Opštije rešenje treba da zadovolji nekoliko uslova.
Uzajamna isključivost, ne mogu dva procesa u isto vreme da budu u kritičnoj sekciji.
Uslov progresa, proces koji nije u kritičnoj sekciji i ne želi da uđe u nju ne treba da ometa druge
procese da uđu u nju.
Uslov konačnog čekanja, mora da postoji granica koliko jedan proces može da čeka.
Ranije se za ovo tražilo čisto softversko rešenje. Ono može na bilo kojoj platformi da se
implementira. Kasnije se okreće hardverskim rešenjima koja se sastoje iz niza nedeljivih mašnskih
instrukcija.
SOFTVERSKA REŠENJA
Postoji više ovakvih rešenja. Neka je u glavnom programu deklarisana promenljiva naredu
tipa integer koja se postavi na vrednost 1. Onda dva paralelna procesa imaju listing.
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
. .
. .
HARDVERSKA REŠENJA
Ideja za hardverska rešenja je da se naprave mašinske instrukcije koje su u stanju da rade dve
stvari istovremeno bez mogućnosti prekida. Te instrukcije su. TAS - Test And Set. FAA - Fetch And
Add. SWAP - zameni mesta.
TAS operiše sa dve promenljive. Sintaksa je A = TAS(B) prebacuje B u A i 1 u B.
Promenljive A i B moraju biti boolean tipa.
FAA operiše sa dve promenljive. Sintaksa je FAA(A, B) prebacuje B u A i B+A u B, gde
je A kod izraza B+A staro A, pre promene vrednosti. Ovde A i B nemoraju biti boolean tipa.
SWAP operiše sa dve promenljive. Sintaksa je SWAP(A, B) menja mesta A i B.
Kod hardverskog rešenja u glavnom programu se deklariše jedna promenljiva tipa
boolean(zauzeto) i setuje se na nulu, a u svakoj proceduri lokalna promenljiva takođe tipa
boolean(nemože).
Proces 1
.
.
nemoze = 1;
while(nemoze)
nemoze = TAS(zauzeto);
// Kritična sekcija
zauzeto = 0;
Ovde se, takođe, umesto TAS može koristiti SWAP. Loša strana rešenja uz korišćenje TAS
instrukcije je ta što je to hardversko rešenje. To je uslovna mana jer nemaju svi CPU ugrađenu tu
instrukciju. Prednost je ta što radi brže i može raditi za n procesa bez ikakve modifikacije. Dok su
predhodni algoritmi bili isključivo za dva procesa. Mana je što nema garancije koliko će neki proces
da čeka. Statistički ovaj algoritam dobro radi, ali teorijski uslov konačnog čekanja nije zadovoljen.
Ukoliko se želi garancija konačnog čekanja algoritam se mora modifikovati. U glavnom
programu se mora deklarisati niz tipa boolean(ceka[n]) koji se setuje na nulu, i promenljiva tipa
integer(zauzeto) koja se setuje na nulu.
Proces i
.
.
ceka[i] = 1;
while(ceka[i] && TAS(zauzeto));
ceka[i] = 0;
// Kritična sekcija
j = i+1;
while(j != i && ceka[j] == 0)
j = (j+1) mod n;
if(i == j)
zauzeto = 0;
else
Proces i
.
.
uzima[i] = 1;
broj[i] = max(broj[0], ..., broj[n-1]);
uzima[i] = 0;
for(j=0; j<n; j++) {
while(uzima[j]);
while(broj[j] != 0 && ((broj[j], j) < (broj[i], i));
}
// Kritična sekcija
broj[i] = 0;
Postoje razni problemi koji se rešavaju ovim algoritmima. Kao što je problem ograničenog
bafera. Jedan proces vrši upis u bafer dok drugi čita. Mora se voditi računa da se sadržaj bafera ne
prepiše pre nego što drugi proces pročita, a takođe da proces koji čita ne pročita više puta isti sadržaj.
Ovaj i slični problemi se moraju rešiti prilikom izgradnje OS.
SEMAFORE
Semafore predstavljaju način da se Dekerov algoritam lepše upakuje. Svi algoritmi se
zasnijvaju na ideji aktivnog čekanja, što dovodi do slabijeg iskorišćenja CPU. Zato se dolazi na ideju
da kad proces ulazi u mrtvu petlju oslobodi CPU, a kad bude slobodan da uđe u kritičnu sekciju
nastavi sa korišćenjem CPU vremena. Semafore rešavaju problem aktivnog čekanja, tako je statistički
ispalo. Aktivno čekanje nije uvek zlo. Ako je aktivno čekanje vrlo kratko onda nema smisla ukljanati
ga. Generalna ideja je da aktivno čekanje treba uklanjati, ali ne po svaku cenu.
Semafora je struktura koja može da blokira proces do određenog vremena i da ga propusti
posle određenog vremena. Jedna od definicija semafore je ta da je semafora specijalna varijabla nad
kojom mogu da se vrše samo dve operacije P i V, pored standardnih operacija kreiranja i uništavanja.
Za ove operacije se koriste još imena down(s) i up(s), ili wait(s) i signal(s). Operacija P smanjuje
varijablu za jedan do nule, a ako je nula ništa ne radi. Operacija V povećava za jedan varijablu do
jedan, a ako je jedan ništa ne radi. Varijabla S je zaštićena, kada jedan proces radi sa njom ni jedan
drugi nema pristup. Ako se semafora implementira kao deo kernela onda se definiše kao slog koji se
sastoji iz dva dela. Prva promenljiva je tipa integer, a druga je lista procesa koji čekaju. Ovim se
isključuje aktivno čekanje. Tada operacije P i V imaju sledeći oblik.
P: s--;
if(s<0) { // Proces traži da uđe u kritičnu sekciju
// Proces se stavlja na listu i čeka, a o ostalom se brine kernel
}
V: s++;
if(s0) {
// Skida se jedan proces sa liste i javlja se kernelu da taj proces propusti
}
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;
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);
KRITIČNI REGIONI
Kritična Sekcija je deo koda kome može imati pristup samo jedan proces. Kritični Region je
implementacija pristupa Kritičnoj Sekciji na višem PJ. Ovde se koriste deljene varijable. Deklaracija
se vrši.
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.
MONITORI
Kod rešenja sa monitorima koriste se specijalne varijable koje su uslovne, tipa condition.
Nad njima su definisane samo dve operacije, wait i signal. Sintaksa ovih operacija je x :
wait ili wait(x). Ovo nisu brojačke semafore. Signal budi proces ako neki proces čeka, a ako ne
signal će biti izgubljen. Monitori su strukture koje imaju procedure za inicijalizaciju, rad sa signalima
i procesima koji čekaju da budu probuđeni.
Slanje prouka se koristi kod povezanih sistema sa posebnim CPU koji ne dele istu memoriju.
Ovde se javlja veliki broj problema koje treba rešiti. Kome se šalje poruka, na čije ime, da li je
monitor pro_pot
pun, prazan : condition;
imaih : integer;
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 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
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.
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.
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.
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
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.
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
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.
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.
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.
stranična tabela
Sl. 6.10. Hardver potreban kod straničenja.
0 11 2 2
3
3
stranična tabela
4
5
Logička memorija
67
fizička memorija
Sl. 6.11. Stranični model logičke i fizičke memorije.
Veličina stranice, kao i okvira, definisana je hardverski i obično je neki stepen broja dva. Ako je
veličina stranice P, tada logička adresa U daje broj stranice p i ofset d na sledeći način:
p = U div P
d = U mod P
Izbor stepena dvojke za veličinu stranice čini translaciju logičke adrese u broj stranice i ofset veoma
jednostavnim. Ako je veličina stranice 2n, tada nižih n bitova predstavlja ofset a preostali viši bitovi
broj strane.
Kada posao pristigne u sistem, planer poslova ispituje njegovu veličinu. Veličina posla izražena je u
stranicama. Planer poslova ispituje raspoložive memorijske okvire. Ako posao zahteva n stranica,
onda n straničnih okvira mora da bude slobodno. Prva stranica posla puni se u jedan od dodeljenih
okvira, a broj okvira se smešta u straničnu tabelu za taj posao. Sledeća strana se puni u sledeći okvir
itd.
Kod straničenja nema eksterne fragmentacije. Svaki slobodni okvir može da bude dodeljen. Međutim,
postoji izvesna interna fragmentacija, jer obično poslednji okvir dodeljen poslu ne mora da bude pun.
Razmotrimo hardversku implementaciju stranične tabele. U najjednostavnijem slučaju ona se
implementira kao skup specijalizovanih registara. Dispečer CPU-a puni te registre baš kao što puni i
ostale registre. Instrukcije koje pune ili modifikuju straničnu tabelu su privilegovane i samo
operativni sistem može da ih izvrši.
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.
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.
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
Svaki korisnik ima svoj jedinstveni idenkifikacioni broj koji se čuva u prvom bajtu, znači
možemo imati najviše do 256 korisnika. Zatim sledi ime i tip fajla. Posle toga redni broj opisa – ako
fajlu nije dovoljno 16 blokova, dobija još jedan opis. Prvi opis ima redni broj 0, drugi 1 itd. Razlika
između ovih slogova je jedino u rednom broju i u listi zauzetih blokova. Karakteristika CP/M sistema
je da ne zna tačnu veličinu fajlova (bajt-po-bajt), već samo blokovsku velič inu. 2. MS-DOS
Podržava hijerarhijsku realizaciju direktorijuma. Fajlovima se dodeljuju slogovi sledeće strukture:
broj
8 3 1 10 2 2 2 4
bajtova
adresa velič ina
ime ekstenzija vreme datum
opis atributi rezervisano prvog fajla u
fajla (tip) fajla kreiranja kreiranja
bloka bajtovima
Jednokorisnički, zna tačnu veličinu fajlova (u bajtovima). Pogledamo u slogu adresu prvog bloka, a
adrese ostalih tražimo u FAT-u.
3. UNIX
Najjednostavnije rešenje:čuvamo samo adresu i-čvora i ime fajla. Atributi fajla se nalaze unutar i-
čvora.
MS-DOS prati blokove fajla preko tabele za alokaciju fajlova koja se nalazi u glavnoj
memoriji. Upis u direktorijum sadrži broj prvog bloka fajla. Ovaj broj se koristi kao indeks kod 64K
upisa FAT (File Allocation Table) u glavnu memoriju. Prateći lanac, svi blokovi se mogu pronaći.
Za MS-DOS, fajl sistem se pojavljuje u tri verzije: FAT-12, FAT-16 i FAT-32, zavisno od
toga koliko bita sadrži adresa na disku. Za sve FAT-ove, blok diska može biti setovan na multipl od
512 bajtova, sa setom dozvoljenih veličina blokova različitih za svaku varijantu. Prva verzija MS-
DOS-a koristila je FAT-12 sa blokovima od 512 bajtova, dajući tako maksimalnu veličinu particije od
12
2 x 512 bajtova. Sa ovim parametrima, maksimalna veličina particije diska bila je 2 MB a veličina
FAT tabele u memoriji bila je 4096 upisa od 2 bajta svaki. Microsoft je kasnije dodao veličine
blokova od 1KB, 2 KB i 4 KB. Onda su mogle da postoje i particije od 16 MB.
Tada je MS-DOS mogao da podrži 4 particije po disku što znači da je FAT-12 mogao da radi
sa diskovima do 64 MB. Nakon toga došlo je do predstavljanja FAT-16, sa 16-bitnim disk
pointerima. Dozvoljene su i veličine blokova od 8 KB, 16 KB i 32 KB. Tabela za FAT-16 sada je
stalno zauzimala 128 KB glavne memorije. Najveće particije na disku sada su bile 2 GB, a veličina
diska 8 GB sa maksimum 4 particije po disku.
Počev od druge verzije Windowsa 95, uveden je FAT-32 fajl sistem sa njegovim 28bitnim
adresama, a verzija MS-DOS-a je bila prilagođena da podrži FAT-32. U ovim sistemima particija je
ograničena na 2 TB (2048 GB). Maksimalna veličina particije za različite veličine blokova i za sva tri
tipa FAT-a je prikazana na slici 2.12.
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
Postavlja se pitanje kako Windows 98 zna da li upis u direktorijum sadrži MS-DOS ime fajla ili (dio)
dugačko ime fajla. Odgovor leži u polju ″Attributes″. Za upis dugačkog imena ovo polje ima
vrijednost 0x0F, što predstavlja još jednu od nemogućih kombinacija atributa. Stari MS-DOS
programi će ovo samo ignorisati kao nevažeće. Djelovi imena su sekvencirani koristeći prvi bajt
zapisa. Zadnji dio dugačkog imena je označen dodavanjem broja 64 sekvenci. S obzirom da se samo
6 bita koristi u sekvenci, teoretski maksimum za dugačka imena fajlova je 63x13=819 karaktera. U
stvari taj broj je iz istorijskih razloga ograničen na 260.
Svaki zapis dugačkog imena fajla sadrži i polje Checksum da bi se izbjegao sledeći problem.
Prvo, Windows 98 kreira fajl dugačkog imena. Drugo, računar je restartovan i podešen da radi u MS-
DOS-u ili Windowsu 3. Treće, stari program pod MS-DOS-om briše MS-DOS ime fajla, ali ne briše
njegovo dugačko ime jer ni ne zna za njega. ^etvrto, neki program stvara novi fajl koji ponovo
zauzima maloprije oslobođeni zapis. Sada imamo situaciju da postoji važeća sekvenca zapisa
dugačkih imena koji prethode zapisu fajla u MS-DOS-u a koji nemaju ništa sa tim fajlom. Polje
Cheksum omogućava Windowsu 98 da detektuje ovakvu situaciju verifikujući da MS-DOS ime fajla
koje prati dugačko ime, zaista njemu i pripada. Implementacija FAT-32 fajl sistema konceptualno je
slična implementaciji FAT-16 fajl sistema. Ovjde sada ukoliko se koristi milion blokova, tabela će
konceptualno imati milion upisa. Da bi se izbjeglo da sva budu u memoriji odjednom, Windows 98
održava prozor u tabeli i čuva samo pojedine djelove u memoriji odjednom.
NTFS i drugi fajl sistemi
Windowsa 2000 podržava: NTFS (New Technology File System), podržava FAT32 (File
Alocation Table) i FAT16 particionisane diskove. FAT16 je MS-DOS fajl sistem i omogućava
korišćenje disk particija do 2 GB. FAT32 bolje organizuje disk prostor i particije mogu biti veličine
do 2 TB. NTFS je novija vrsta fajl sistema koju koriste Windows NT 4.0 i Windows 2000. Ovaj fajl
64
sistem koristi 64 bit-ne adrese i teoretski radi sa particijama do 2 bajta. Korišćenje NTFS tehnologije
znači veću sigurnost, tj. zaštitu i veću toleranciju (i korekciju) greški. Kada govorimo o zaštiti,
ovdje mislimo na EFS sistem enkripcje fajlova. Tolerancija greške se odnosi na činjenicu da NTFS
fajl sistem automatski otklanja greške ne prikazujući pri tome poruke o greškama. On lokalizuje loše
klustere i vrši tzv. Cluster Remapping što znači da onemogućava ponovno korišćenje tih losih
klustera. Proces otkrivanja ovih greški se ovdje radi tako što prije upisa podataka na disk, Windows
2000 pravi kopiju podataka koje će privremeno držati u memoriji. Dalje, on pokušava da podatke
smjesti na disk i odmah poslije toga upoređuje te podatke sa podacima u memoriji. Ako ovi podaci u
ovom trenutku nijesu identični, znači da se radi o greški na disku pa se radi Cluster Remapping i traži
se drugo mjesto na disku za smještanje ovih podataka sa privremene memorije.
Kada se prave particije, postavlja se pitanje koje su optimalne veličine tih particija? Veće
particije s jedne strane dovode do sporijeg pristupa disku jer se mnogo toga može odjednom pisati na
tom disku. S druge strane, kod multimedijalnih zapisa, velikih baza podataka i slicno, potrebne su
veće paritcije. Optimalno riješenje je napraviti particije određene namjene tako da svaka od njih ne
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.
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.
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
- 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.
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.
14.SIGURNOST I ZAŠTITA
Sigurnost
Postoji potreba da operativni sistem onemogući neautorizovani pristup podacima svakog korisnika.
Sigurnost i zaštita su usko vezani za fajl sistem (o operativnoj memoriji smo ranije pričali). Dakle,
potrebno je onemogućiti pristup nekim fajlovima.
Sigurnost se odnosi na opšti, filozofski pojam, dok zaštitu predstavljaju usvojeni principi sigurnosti
koji se realizuju na nekom operativnom sistemu.
Kada sigurnost fajl sistema može biti ugrožena?
-viša sila (udar groma, požar, zemljotres...)
-hardverska i softverska greška
-ljudske greške
Jedan od načina na koji se branimo od gubitka važnih podataka je pravljenje rezervnih kopija
(backupa) koje se potom čuvaju na sigurnom mestu.
Operativni sistemi - predavanja 73
Pored ovih slučajnih postoje i namerni napadi na sigurnost fajl sistema. Lica koja žele pristupiti
zabranjenim fajlovima mogu biti:
-laici, koji nisu zlobni ali ako im se pruži prilika da “zavire”u tuđu poštu to će i uraditi.
-oni za koje zaobilaženje mehanizama zaštite predstavlja intelektualni izazov.
-oni koji žele da izvuku materijalnu korist iz toga (prevarom, ucenom,...)
-špijuni (vojni, privredni,...)
Nekoliko poznatih grešaka u ranijim operativnim sistemima
UNIX u fajlu /etc/passwords čuva spisak svih korisnika sistema u obliku
<korisnič ko_ime kriptovana_lozinka identifikacoini_broj grupa ime prezime ...>
Ovaj fajl je svima dostupan za čitanje. Postoji komanda UNIX-a lpr koja se koristi za štampanje
fajlova. Ova komanda između ostalih ima i opciju brisanja fajla pa se njom može obrisati i fajl
passwords. Brisanjem ovog fajla ni jedan korisnik se više ne može prijaviti na sistem.
Takođe u UNIX-u. proces koji je pokrenuo neki program ima ista prava kao i njegov vlasnik. Postoji
bit koji kontroliše prava i on se zove setuid. Ako je setuid setovan tada proces koji ga je pokrenuo ima
sva prava. Korisnik (nasilnik) iz svog procesa pokrene proces koji ima setuid postavljen na 1 (na
primer mkdir) i zatim ga nasilno prekine. Pod UNIX-om postoji standardni fajl core koji operativni
sistem kreira i popunjava kada dođe do greške pri izvršavanju programa. Ako korisnik predhodno
napravi u svom direktorijumu fajl core kao link na fajl /etc/passwords neki sadržaj će biti direktno
upisan u njega. Ovo je moguće zato što je u trenutku prekida proces imao postavljen setuid na 1 tj.
imao je sve privilegije. Uz malo muke, ono što se upisuje može ličiti na sadržaj passwords pa se
korisnik na taj način dopiše.
MULTICS je imao loše zaštićene mehanizme za paketne obrade. Bilo je moguće učitati podatke sa
trake, odnosno kartice i snimiti ih bilo gde. Jedini uslov je bio da se to uradi paketno a ne
interaktivno. Ljudi su tada pravili svoje editore koje su snimali u direktorijum odakle žele ukrasti fajl.
Kada bi korisnik pokrenuo takav editor ne bi bio svestan da dok on kuca, program mu paketno krade
podatke. Ovakvi programi, koji osim što rade ono čemu su namenjeni rade i nešto “krišom”se
nazivaju trojanski konji.
TENEX - Digital DEC10 je takođe imao neke mane:
- za svaki Page Fault se mogla “zakačiti” proizvoljna procedura
- pristup svakom fajlu se kontrolisao lozinkom i to interaktivno
- lozinka se proveravala slovo po slovo. čim bi naišao na slovo koje ne odgovara, javio bi grešku
Neka neki program želi da pristupi zaštićenom faju. On pokušava sa nekom lozinkom koja se napravi
tako da prvo slovo leži u jednoj stranici memorije a ostatak u drugoj. Memorija se popuni (nebitnim
stvarima) tako da se u njoj nađe samo prva stranica. Ovo je potrebno da bi došlo do Page Faulta
nakon što se obradi prvo slovo lozinke. Na Page Fault se “zakači”procedura koja obaveštava o
svakom Page Fault-u. Tako, ako se pogodi prvo slovo procedura će odreagovati na Page Fault i
obavestiti korisnika, a ako ne operativni sistem će javiti da je lozinka pogrešna. Kada se pogodi prvo
slovo onda se lozinka tako “šteluje”da prva dva slova budu u jednoj stranici a ostatak u drugoj i
postupak se ponavlja. Za lozinku od 6 od 30 mogućih znakova grubom silom bi trebalo izvršiti 306
provera, a na ovaj način samo 30 x 6 = 180.
Operativni sistem OS/360 je omogućavao da se u toku računanja u pozadini nešto čita. Lozinka se pri
kopiranju proveravala u dva navrata i to prvi put se proveravalo smemo li uopšte kopirati sa trake u
zadati fajl a drugi put kada kopiranje zaista i počne (ali tada se nije proveravalo i ime fajla). Ako se
između ove dve provere promeni ime fajla, bilo je moguće kopirati preko nekog fajla bez obzira da li
se imala njegova lozinka ili ne.
Šta treba da radi osoba koja provaljuje ?
- Treba da gleda deo diska sa izbačenim stranicama iz memorije. Operativni sistem ih nekad ne obriše
posle swap-ovanja pa se tu mogu kriti vredni podaci.
- Treba da poziva nepostojeće sistemske pozive ili postojeće ali sa pogrešnim parametrima. Postoji
mogućnost da će se operativni sistem zbuniti pa se iz takvih situacija može nešto korisno zaključiti.
- Pri procesu prijavljivanja nekako ga nasilno prekinuti. Tako se možda može zaobići proveravanje
lozinke.
- Modifikacija strukture podataka koja se koristi za pozivanje servisa operativnog sistema može
zbuniti operativni sistem pa se opet može nešto korisno saznati.
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:
Dom 1 R RW Enter
Dom 2 R RW RX W
Dom 3 W R W