You are on page 1of 4

КРИТИЧНА СЕКЦИЈА (critical section)

Проблем: замислимо да два процеса хоће да сачувају податке у истој меморијској локацији.
Два процеса користе исти дељени податак и мењају га, и смењују се процеси.
Више процеса захтева ексклузивно коришћење ресурса.

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

Ситуација у којој крајњи резултат зависи од редоследа извршавања корака различитих процеса
који манипулишу заједничким подацима, назива се трка за ресурсе (енг. race condition).

Нека је X променљива којој могу приступити различити процеси који желе да је увећају за 1,
X=X+1 (као у ФОР пељи)
Операција промене вредности обавља се у три корака,
1) смешта променљиву у регистар
2) увећа регистар за 1
3) премести садржај регистра у променљиву
Уколико два процеса настоје да обаве ову операцију, може се десити да један почне са
извршавањем, и да буде прекинут пре последње инструкције, а други процес почне да увећава
исту променљиву X. Други се процес изврши у потпуности, па први наставља да завршава
увећање. Тад X нема очекивану вредност.

Део програма у којем се приступа заједничким подацима назива се крититчна секција.

Најбоље би било да се обезбеди да у једном тренутку критичну секцију може да извршава само
један процес. Овакво решење није тривијално поготово у системима где је битна ефикасност. Ако
би се обезбедило да процес који приступа дељеним подацима не буде прекинут док се не изврши,
тад не би имали проблем са дељеним подацима, али би имали умањену ефикасност система, па
се ово ретко примењује.

Питања: Шта је трка за ресурсе? (+објашњење)


Шта је критична секција? (+објашњење)

Решења заснована на активном чекању


Решење за заштиту критичне секције треба да задовољи следеће услове:
1. Узајамна искључивост - не могу два процеса да буду у критичној секцији
2. Услов прогреса - то значи да процес који не улази у критичну секцију не треба да омета друге да
у њу уђу
3. Услов коначног чекања - разумна граница чекања када један процес жели да уђе у критичну
секцију
Стриктна алтернација
Стриктна алтернација је једно од решења за заштиту критичне секције. Заснива се на коришћењу
променљиве на_реду којим се одређује који од два процеса има предност. На почетку се предност
даје првом процесу (на_реду = 1). Када напусти критичну секцију поставља се вредност другог
процеса (на_реду = 2).
Мана овог алгоритма је што он подразумева да само два процеса улазе у критичну секцију и не
испуњава услове два и три, а погодан је када процеси треба наизменично да приступају дељењем
ресурса.
Декеров алгоритам
Декеров алгоритам је први комплетни алгоритам за решавање проблема критичне секције.
Користе се три променљиве:
1. желиПроцес1 - најављује да жели да уђе у критичну секцију
2. желиПроцес2 - други процес исто најављије да жели да уђе
3. на_реду - води се рачуна који процес улази у критичну секцију
На почетку се једном процесу даје предност. Ако и други процес жели да уђе у критичну секцију,
проверава се ко има предност. Овај алгоритам не дозвољава да два процеса истовремено уђу у
критичну секцију и не дозвољава да дође до заглављивања. Али нема принцип праведности јер
може да се деси да један процес два пута за редом уђе у критичну секцију. Алгоритам је намењен
искључиво за ситуацију када два процеса конкуришу за исте податке.
Питерсонов алгоритам
Основна идеја је у томе да када процес најави да жели да уђе у критичну секцију, "џентлменски"
уступа предност другом процесу. Ова предност важи само уколико и други процес жели да уђе у
критичну секцију, а у супротном први процес не чека други већ одмах иде у критичну секцију.
Овим је обезбеђено да процеси наизменично улазе у критичну секцију ако то желе у исто време
без обзира на њихову брзину.
Мана овог алгоритма је што је примењив само за два процеса.
Лампортов алгоритам (пекарски)
Уопштење Питерсоновог алгоритма за већи број процеса представља Лампортов алгоритам.
Алгоритам је добио надимак јер је заснован на идеји која се ослања на редослед услуживања
муштерија у пекари. Када уђе у пекару муштерија добија број који је већи од претходних
муштерија и муштерије се услужују редом почев од оних с најмањим бројем. Тако се редом у фор
петљи обилазе сви процеси, а процес n чека са извршавањем у критичној секцији док заврше
процеси који имају мањи број од њега. Овај алгоритам ради за произвољан број процеса и
задовољава сва три услова.

Хардверски алгоритми за критичне секције


Хардверска решења за заштиту критичне секције подразумевају употребу посебних инструкција
процесора. Идеја је да се направе машинске инструкције које су уграђене у процесор. Најчешће се
за потребе заштите критичне секције користе следеће три инструкције:
 TAS (Test and Set)
 FAA (Fetch and Add)
 SWAP (замена)
Ове инструкције оперишу са две променљиве, и мењају им вредности. Декларише се глобална
променљива заузето и поставља се на нулу и она штити улаз у критичну секцију. Сваки процес
има локалну променљиву неМоже. процеси чекају да се ослободи улаз. Кад глобална
променљива дозволи улаз следећем процесу да уђе у критичну секцију, променљива неМоже
постаје Може употребом инструкција и улази у критичну секцију. Мана овог решења јесте
чињеница да процесор мора да има уграђене инструкције.

Решења за заштиту критичне секције без активног чекања


За разлику од претходних решења где су процеси чекали да се испуни неки услов за улаз у
критичну секцију, постоје друга решења која су ефикаснија и подразумевају заустављање процеса
на неко време (избаци се из меморије) и покретање у одговарајућем тренутку. Процес се блокира
па се у погодном тренутку одблокира. Ова решења су компликованија за имплементацију.
Најпознатије методе су:
1. Семафори
2. Критични региони
3. Монитори
Семафори
Семафор је структура која може да блокира процес на неко време и да га пропусти кад се за то
стекну услови. Семафор може да блокира, одблокира процес, садржи показивач на листу која чува
податке о блокираним процесима, има ненегативну променљиву која има број блокираних
процеса. У зависности да ли је неки процес у критичној секцији или не, семафори се обично
реализују као сервис оперативног система. На овај начин се елиминише активно чекање.
Семафори се имплементирају на нивоу оперативног система.
Критични региони
Семафор је доста добро решење за заштиту од критичне секције, али није флексибилно јер са
малом грешком могу да настану велики проблеми. Решења у виду критичног региона дају већу
флексибилност. Критични региони представљају имплементацију заштите приступа критичној
секцији на вишем програмском језику. Код овог решења потребно је дефинисати коју
променљиву дели више процеса. Ако нека променљива треба да буде увећана за један, прво се
променљива прогласи дељеном, а затим се означи операција увећања да има само приступ
променљивој. Добра страна је то што се у потпуности решава проблем критичне секције, а мана је
слаба синхронизација процеса.
Монитори
Монитори представљају највиши ниво апстракције када је заштита критичне секције без активног
чекања у питању. Монитори су конструкције програмског језика у којима је имплементиран
механизам за заштиту критичне секције и механизам за синхронизацију.
Главна одлика монитора је да у оквиру њега може да буде активан само један процес и на тај
начин је заштићена критична секција. Семафори се имплементирају на нивоу оперативног
система, а монитори се имплементирају на програмском језику и монитори имају лакшу
синхронизацију процеса.
Заглављивање
Ситуација у којој два или више међусобно блокираних и зависних процеса чекају на ресурсе које
никада неће добити, назива се заглављивање (death block). Овакво заглављивање је трајно и за
последицу често има заглављивање целог система. Пример, ако четири аутомобила уђу
истовремено у раскрсницу, поштујући правило десне стране, сви ће бити заглављени.
Ситуација у којој процеси нису блокирани али нема напретка у извршавању назива се живо
блокирање. Пример, две особе које требају да се мимоиђу у уском пролазу, а обе се померају у
исту страну покушавајући да пропусте једна другу, не стоје у месту, а не могу да се мимоиђу.
Изгладњивање се односи на ситуацију у систему где постоји напредак али неки процеси доста
дуго не напредују. Пример, ако се аутомобили крећу на раскрсници са првенством права пролаза
у колони, остали неће имати прилику да уђу у раскрсницу бар неко време. За разлику од
заглављивања и живог блокирања, изгладњивање није трајна ситуација. После дужег времена,
процеси који чекају настављају са извршавањем.
До заглављивања обично долази када процеси имају ресурсе који су другима потребни и ти други
чекају, а процеси немају намеру да ослободе ресурсе пре него што изврше планиране задатке.
Ресурси могу бити хардверски (меморија, штампач, скенер, диск) и софтверски (фајл, слог у бази,
итд).
Мере избегавања су:
- спречавање
- избегавање
- детекција и опорављање
- игнорисање;
Спречавање заглављивања
То су системске мере које нису алгоритамски захтевне, а за циљ имају да у старту дефинишу
правила за извршавање процеса тако да до заглављивања не дође. Трошкови алгоритма су мали
али су зато ограничења велика. Главна идеја је да увођење ограничења које онемогућава да
процес држи неке ресурсе док тражи нове. Овом мером неће доћи до заглављивања али су слабо
искоришћени ресурси. Постоје два приступа:
1. Подразумева да пре него што почне са извршавањем, процес захтева да му се доделе сви
потребни ресурси и да извршавање крене тек када их све добије. Лоша страна оваквог приступа је
то што за све време свог извршавања процес држи све потребне ресурсе и тиме онемогућава
друге процесе да их у тренуцима. Још једна мана је што се често не зна на почетку шта све
процесу треба.
2. Решава проблем претходног јер подразумева да процес тражи ресурсе у тренуцима када су му
потребни, али да пре сваког узимања нових ресурса има обавезу да оне које држи врати
оперативном систему како би оперативни систем донео одлуку коме да их додели. На овај начин
процес не држи ниједан ресурс у тренутку када тражи нови.

You might also like