You are on page 1of 20

Operativni sistemi i računarske

mreže
Zaglavljivanje
MERE IZBEGAVANJA
• Za razliku od mera sprečavanja, koje u startu
eliminišu neki od neophodnih uslova da do
zaglavljivanja dođe, mere izbegavanja su dinamičke
mere koje se preduzimaju u određenim momentima
u zavisnosti od stanja u sistemu.

• Iz tog razloga troškovi algoritma su obično veći nego


kada su mere sprečavanja u pitanju, ali se sa druge
strane povećava efikasnost sistema jer se resursi
koriste optimalnije.
Bankarev algoritam
• Postoje različiti pristupi za izbegavanje
zaglavljivanja.
• Jedan veoma efikasan, a pri tome i ne previše
komplikovan, je Bankarev algoritam.
• Ime je dobio po principu davanja zajmova u
bankama.
• Korisnici traže od banke kredite kako bi mogli da realizuju svoje
projekte.
• Banka ima ograničene resurse, a korisnici znaju kolika je
maksimalna količina novca koja im je potrebna.
• Vremenom, korisnici traže određenu količinu novca (kredite), a
banke procenjuju da li će im i u kojem trenutku izaći u susret.
• Novac banci mogu vratiti samo korisnici koji su uspeli da završe
svoje projekte tako što su prethodno od banke dobili (kroz
jedan ili više kredita) maksimalnu prijavljenu količinu novca.
• Vraćeni novac je onda, uz novac koji je ostao u banci, na
raspolaganju svim ostalim korisnicima koji nisu završili svoje
projekte.
• Međutim, ukoliko banka ne napravi dobru procenu može se
dogoditi da ostane bez novca i da zbog toga neki od korisnika
ne budu u mogućnosti da završe svoj projekat.
• Bankarev algoritam podrazumeva da je pre početka
izvršavanja svakog od procesa poznat maksimalni
broj resursa svakog tipa koji će mu biti potreban.

• Ideja je da se dinamički ispituje pokušaj dodele


resursa kako bi se obezbedilo da nikada ne dođe do
kružnog čekanja.

• Stanje dodele resursa je definisano brojem


raspoloživih, dodeljenih resursa i maksimalnim
zahtevima procesa.
• Smatra se da je stanje sistema bezbedno ako sistem
može u određenom redosledu da dodeljuje resurse
kako bi svaki proces mogao da završi sa radom, tj. da
ne dođe do zaglavljivanja, a da se pri tome svi
procesi izvrše.

• Redosled kojim se vrši ovakva dodela resursa


procesima naziva se bezbedna sekvenca.
• Definicija: Sekvenca procesa <P1 , P2 , …, Pn> je
bezbedna za tekuće stanje dodele resursa akko se
potrebe svakog procesa Pi mogu zadovoljiti
slobodnim resursima i resursima koje trenutno
drže procesi Pj (j < i).
• Ako potrebni resursi za proces Pi nisu odmah
dostupni, tada proces Pi mora da sačeka dok se svi
Pj (j < i) ne izvrše. Kada procesi Pj (j < i) završe sa
radom, Pi dobija potrebne resurse, izvrši se, a
zatim vrati sve resurse koje je koristio. Kada završi
proces Pi tada Pi+1 može da dobije potrebne
resurse i tako dalje.
• Definicija: Sistem je u bezbednom stanju akko
postoji bezbedna sekvenca.

• Važno je napomenuti da, ako stanje nije


bezbedno, to ne znači da će sigurno doći do
zaglavljivanja, već da postoji mogućnost da do
njega dođe
• Definicija: Sistem je u bezbednom stanju akko
postoji bezbedna sekvenca.

• Važno je napomenuti da, ako stanje nije


bezbedno, to ne znači da će sigurno doći do
zaglavljivanja, već da postoji mogućnost da do
njega dođe
Osnovna ideja Bankarevog algoritma
• Da se resursi procesima dodeljuju tako da se sistem
sprovodi kroz niz bezbednih stanja kako bi se izbegla
mogućnost da dođe do zaglavljivanja.

• Kao što je već napomenuto, banke vode računa da


novac rasporede tako da zadovolje potrebe što većeg
broja svojih klijenata. One će se truditi da kreditiraju
perspektivne klijente i ne bi trebalo da dopuste da se
novac dodeli jednom ili grupi klijenata, a da pri tome
ne ostane sredstava za ostale.
Kod Bankarevog algoritma:
• pri dodeli resursa vodi se računa o tome da sistem
uvek bude u bezbednom stanju,
• odnosno, po zahtevu procesa za dobijanje resursa
vrši se provera da li postoji mehanizam kojim će se
novododeljeni zajam kasnije (kada proces kojem je
dodeljen završi svoj rad) vratiti i biti na
raspolaganju drugim procesima.
Za prikaz Bankarevog algoritma potrebno je
definisati sledeće promenljive:
• n – broj procesa,
• m – broj resursa.

Niz raspoloživo dužine m ukazuje na broj raspoloživih resursa određenog tipa.


raspoloživo[j] = k, označava da ima k raspoloživih instanci resursa Rj.
Matrica max dimenzije n×m definiše maksimalne zahteve svakog procesa.
max[i,j] = l – proces Pi zahteva najviše l instanci resursa Rj.
Matrica dodeljeno dimenzije n×m definiše broj resursa svakog tipa koji je trenutno
dodeljen svakom procesu.
dodeljeno[i,j] = h – proces Pi je trenutno u posedu h instanci Rj.
Matrica potrebno dimenzije n×m prikazuje preostale potrebe svakog procesa za
resursima.
potrebno[i,j] = s – procesu Pi je potrebno s instanci resursa Rj.
Iz prethodnih definicija može se zaključiti da matrica potrebno predstavlja razliku matrica
max i dodeljeno.
• Da bi se jednostavnije objasnili neki od algoritama,
promenljive dodeljeno[i] i potrebno[i] označavaju
nizove dužine m koji predstavljaju sve dodeljene i
potrebne resurse za proces i.
• Drugim rečima, ovi nizovi su vrste odgovarajućih
matrica.
• Potrebno je definisati i nejednakost dva niza iste
dimenzije. Tako je niz A „manji ili jednak“ od niza B
ako svaki njegov element ima manju ili bar jednaku
vrednost od vrednosti odgovarajućeg elementa niza B:
Algoritam kojim se proverava da li je sistem u
bezbednom stanju:

• Sa ovako definisanim promenljivama može se


ilustrovati algoritam kojim se proverava da li je
sistem u bezbednom stanju.

• Neka su radni i gotov nizovi dužine m i n.


Algoritam 4.1. Provera stanja

//Inicijalizacija

radni = raspoloživo;

gotov[i] = 0, za i = 0, 1, …, n – 1;

sledeći_proces_u_sekvenci:

//Provera da li postoji proces koji može biti zadovoljen raspoloživim

//resursima

IF (ne postoji i takvo da je gotov[i] == 0 i potrebno[i] £ radni)

idi na kraj;

ENDIF

//Pronalazi se proces koji može biti zadovoljen raspoloživim resursima

Odaberi prvo i takvo da je gotov[i] == 0 i potrebno[i] £ radni;

//Radnom skupu se dodaju resursi procesa koji ima mogućnost da se izvrši

radni = radni + dodeljeno[i];

gotov[i] = 1;

idi na sledeći_proces_u_sekvenci;

kraj:

//Ako su svi procesi imali mogućnost sa se izvrše – stanje je bezbedno

IF (gotov[i] == 1 za svako i)

bezbedno_stanje = true;

ELSE

bezbedno_stanje = false;

ENDIF
• Niz radni se inicijalizuje tako da bude jednak nizu
raspoloživih resursa u prvom trenutku izvršavanja.

• Ovaj niz predstavlja niz resursa koji su na


raspolaganju procesima.

• Niz gotov, koji nosi informaciju o tome da li i-ti


proces ima uslova da se izvrši sa raspoloživim
resursima, inicijalizuje se na nulu.
• U koraku sledeći_proces_u_sekvenci se traži proces
koji nije imao uslove da se izvrši (gotov[i] == 0), a u
trenutnom radnom nizu postoje raspoloživi resursi
koji su mu potrebni da bi se izvršio.
• Ako takav proces postoji, u sledećem koraku se niz
radni proširuje sa resursima koje je i-ti proces držao,
jer se pretpostavlja da on može da završi sa radom i
oslobodi dodeljene i svoje resurse.
• U tom slučaju se vrednost gotov[i] postavlja na 1 i
ponovo, sada sa većim radnim nizom, traži proces
koji može biti zadovoljen.
• Ako u koraku kraj ne postoji proces koji zadovoljava
postavljene uslove, to znači da je algoritam završio sa
radom i da treba proveriti da li je sistem u
bezbednom stanju ili ne.

• Ukoliko se prolazom kroz niz gotov utvrdi da su svi


procesi imali uslove da dobiju potrebne resurse,
iskoriste ih i vrate, onda je sistem u bezbednom
stanju.

• U suprotnom sledi da nije pronađena bezbedna


sekvenca i da zbog toga sistem nije u bezbednom
Dodela resursa
• Kada sistem dobije zahtev za resursima od nekog
procesa, on pokreće Bankarev algoritam kako bi
doneo odluku da li će dodeliti resurse procesu,
odložiti ili odbiti zahtev.
• Neka je zahtev[i] niz zahteva procesa Pi u nekom
trenutku.
• Prema Bankarevom algoritmu, kada proces izvrši
zahtev za resursima, preduzimaju se koraci opisani u
algoritmu za dodelu resursa.
Algoritam 4.2. Dodela resursa

//Provera da li su zahtevi u skladu sa najavljenim pre početka izvršavanja

IF (potrebno[i] < zahtev[i])

Došlo je do greške jer proces prevazilazi svoje prethodno definisane

maksimalne zahteve;

ENDIF

IF (raspoloživo < zahtev[i])

Resursi nisu raspoloživi pa će Pi morati da sačeka;

ENDIF

//Sistem pokušava da dodeli tražene resurse procesu Pi modifikujući

//stanje na sledeći način:

raspoloživo = raspoloživo – zahtev[i];

dodeljeno[i] = dodeljeno[i] + zahtev[i];

potrebno[i] = potrebno[i] – zahtev[i];

IF (provera stanja sistema je bezbedna)

transakcija je završena, a proces Pi je dobio svoje resurse;

ELSE

Pi će morati da sačeka zahtevane resurse iz zahtev[i] a sistem se vraća na

staro stanje dodele resursa;

ENDIF

You might also like