You are on page 1of 4

Мере избегавања

За разлику од мера спречавања, које у старту елеминишу неки од неопходних


услова да до заглављивања дође, мере избегавања су динамичке мере које се
предузимају у одређеним моментима у зависности од стања у систему. Из тог разлога
трошкови алгоритма су обично већи него када су мере спречавања у питању, али се са
друге стране повећава ефикасност система јер се ресурси користе оптималније.

Банкарев алгоритам

Постоје различити приступи за избегавање заглављивања. Један веома ефикасан,


а при томе и не превише компликован, је Банкарев алгоритам. Име је добио по
принципу давања зајмова у банкама. Наиме, корисници траже од банке кредите како
би могли да реализују своје пројекте. Банка има ограничене ресурсе, а корисници знају
колика је максимална количина новца која им је потребна. Временом, корисници
траже одређену количину новца (кредит), а банка процењује да ли ће им и у којем
тренутку изаћи у сусрет. Новац банци могу вратити само корисници који су успели да
заврше своје пројекте тако што су претходно од банке добили (кроз један или више
кредита) максималну пријављену количину новца. Враћени новац је онда, уз новац који
је остао у банци, на располагању свим осталим корисницима који нису завршили своје
пројекте. Међутим, уколико банка не направи добру процену може се догодити да
остане без новца и да због тога неки од корисника не буду у могућности да заврше своје
пројекте.
У складу са претходним, идеја је да се динамички испитује покушај доделе
ресурса како би се обезбедило да никада не дође до кружног чекања. Стање доделе
ресурса је дефинисано бројем расположивих, додељених ресурса и максималним
захтевима процеса. Сматра се да је стање система безбедно ако систем може у
одређеном редоследу да додељује ресурсе како би сваки процес могао да заврши са
радом, тј. да не дође до
заглављивања, а да се при томе сви
процеси изврше. Редослед којим се
врши оваква додела ресурса
процесима назива се безбедна
секвенца.

Безбедно и небезбедно заглављивање


Дефиниција: Секвенца процеса <Р1, Р2, ..., Рn> је безбеднa за текуће стање доделе
ресурса ако се потребе сваког процеса Pi могу задовољити слободним ресурсима и
ресурсима које тренутно држе процеси Pj(j<i).

Ако потреби ресурси за процес Pi нису одмах доступни, тада процес Pi мора да
сачека док се сви Pj(j<i) не изврше. Када процеси Pj(j<i) заврше са радом, Pi добија
потребне ресурсе, изврши се, а затим врати све ресурсе које је користио. Када заврши
процес Pi тада Pi+1 може да добије потребне ресурсе и тако даље.

Дефиниција: Систем је у безбедном стању ако постоји безбедна секвенца.

Важно је напоменути да, ако стање није безбедно, то не значи да ће сигурно доћи
до заглављивања, већ да постоји могућност да до њега дође.

Основна идеја Банкаревог алгоритма је да се ресурси процесима додељују тако


да се систем спроводи кроз низ безбедних стања како би се избегла могућност да дође
до заглављивања. Као што је већ напоменуто, банке воде рачуна да новац распореде
тако да задовоље потребе што већег броја својих клијената. Оне ће се трудити да
кредитирају перспективне клијенте и не би требало да допусте да се новац додели
једном или групи клијената, а да при томе не остане средстава за остале. Аналогно,
када је Банкарев алгоритам у питању, при додели ресурса води се рачуна о томе да
систем увек буде у безбедном стању, односно по захтеву процеса за добијање ресурса
врши се провера да ли постоји механизам којим ће се новододељени зајам касније
(када процес којем је додељен заврши свој рад) вратити и бити на располагању другим
процесима.

За приказ овог алгоритма потребно је дефинисати следеће променљиве:


n – број процеса
m – број ресурса
Низ raspoloživo дужине m указује на број расположивих ресурса одређеног типа.

raspoloživo[j]=k, означава да има k расположивих инстанци ресурса Rj.

Матрица max димензије nxm дефинише максималне захтеве сваког процеса.

мax[i,j]=i – процес Pi захтева највише i инстанци ресурса Rj

Матрица dodeljeno димензије nxm дефинише број ресурса сваког типа који је тренутно
додељен сваком процесу.

dodeljeno[i,j]=h – процес Pi је тренутно у поседу h инстанци Rj.

Матрица potrebno димензије nxm приказује преостале потребе сваког процеса за


ресурима.
potrebno[I,j]=s - процесу Pi је потребно s инстанци Rj.

Из претходних дефиниција може се закључити да матрица potrebno представља


разлику матрице max и dodeljeno.

potrebno[I,j]= мax[i,j]- dodeljeno[i,j]

Да би се једноставније објаснили неки од алгоритама, променљиве dodeljeno[i] и


potrebno[i] означавају низове дужине M који представљају све додељене и потребне
ресурсе за процес i. Другим речима, ови низови су, у ствари, врсте одговарајуће
мартица.
Потребно је дефинисати и неједнакост два низа исте димензије. Тако је низ А „мањи
или једнаки“ од низа В ако сваки његов елемент има мању или бар једнаку вредност
од вредности одговарајућег елемента низа В:
АВ, ако I {1,2,…,n}, A[i]B[i]

Са овако дефинисаним променљивама може се илустровати алгоритам којим се


проверава да ли је систем у безбедном стању.
Нека су radni и gotovi низови дужине m и n.

Алгоритам: Провера стања


//иницијализација
radni=raspoloživo;
gotov[i]=0, za i=0,1,…,n-1;
sledeći_proces_u_sekvenci:
//Проверава да ли постоји процес који може бити задовољен расположивим
//ресурсима
If (ne postoji i takvo da je gotov[i]=0 i potrebno[i] radni;
Idi na kraj;
//Проналази се процес који може бити задовољен расположивим ресурсима
Odaberi prvo i takvo da je gotov[i]==0 i potrebno[i] radni;
//радном скупу се додају ресурси који има могућност да се изврши
radni=radni+dodeljeno[i];
gotov[i]=1;
Idi na sledeći_proces_u_sekvenci;
kraj:
//Ако сусви процеси имали могућност да се изврше – стање је безбедно
If (gotov[i]==1 ya svako i)
bezbedno_stanje=true;
Else
bezbedno_stanje=false;

Низ radni се иницијализује тако да буде једнак низу расположивих ресурса у


првом тренутку извршавања. Овај низ представља низ ресурса који су на располагању
процесима. Низ gotov, који носи информацију о томе да ли i-ти процес има услова да
се изврши са расположивим ресурсима, иницијализује се на нулу. У кораку
sledeći_proces_u_sekvenci се тражи процес који није имао услове да се изврши
(gotov[i]==0), а у тренутном радном низу постоје расположиви ресурси који су му
потребни да би се извршио. Ако такав процес постоји, у следећем кораку се низ radni
проширује са ресурсима које је i-ти процес држао јер се претпоставља да он може да
заврши са радом и ослободи додељене и своје ресурс. У том случају се вредност
gotov[i] поставља на 1 и поново, сада са већим радним низом, тражи процес који може
бити задовољен. Ако у кораку kraj не постоји процес који задовољава постављане
услове, то значи да је алгоритам завршио са радом и да треба проверити да ли је систем
у безбедном стању или не. Уколико се пролазом кроз gotov утврди да су сви процеси
имали услове да добију потребне ресурсе, искористе их и врате, онда је систем у
безбедном стању. У супротном следи да није пронађена безбедна секвенца и да због
тога систем није у безбедном стању.
Када систем добије захтев за ресурсима од неког процеса, он покреће Банкарев
алгоритам како би донео одлуку да ли ће доделити ресурсе процесу, одложити или
одбити захтев. Нека је zahtev[i] низ захтева процеса Pi у неком тренутку. Према
Банкаревом алгоритму, када процес изврши захтев за ресурсима, предузимају се
кораци описани у следећем алгоритму.

Алгоритам: Додела ресурса


//Провера да ли су захтеви у складу са најављеним пре почетка извршавања
If (raspoloživo<zahtev[i])
Resursi nisu raspoloživi pa će Pi morati da sačeka;
//Систем покушава да додели тражене ресурсе процесу Pi модификујући
//стање на следећи начин:
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;

You might also like