Конкурентно програмирање

44
Конкурентно Конкурентно програмирање програмирање Мотивација за коришћење Мотивација за коришћење виших виших програмских језика програмских језика Модуларизација Модуларизација Синхронизација Синхронизација Синхронизација код Синхронизација код WinNT-a WinNT-a

Upload: sidney

Post on 21-Jan-2016

37 views

Category:

Documents


0 download

DESCRIPTION

Конкурентно програмирање. Мотивација за коришћење виших програмских језика Модуларизација Синхронизација Синхронизација код WinNT-a. Мотивација за коришћење виших програмских језика. Оперативни системи се данас углавном пишу на вишим програмским језицима. То омогућава: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Конкурентно програмирање

Конкурентно Конкурентно програмирањепрограмирање

Мотивација за коришћење Мотивација за коришћење виших виших програмских језикапрограмских језика

МодуларизацијаМодуларизацијаСинхронизацијаСинхронизацијаСинхронизација код Синхронизација код WinNT-aWinNT-a

Page 2: Конкурентно програмирање

Мотивација за коришћење виших Мотивација за коришћење виших програмских језикапрограмских језика

Оперативни системи се данас Оперативни системи се данас углавном пишу на вишим углавном пишу на вишим програмским језицима.програмским језицима.

То омогућава:То омогућава: Бољу имплеметацију ОС-а.Бољу имплеметацију ОС-а. Боље одржавање.Боље одржавање. Преносивост.Преносивост.

Page 3: Конкурентно програмирање

Мотивација за коришћење виших Мотивација за коришћење виших програмских језикапрограмских језика

Оперативни систем се састоји од Оперативни систем се састоји од великог броја програма који раде великог броја програма који раде асинхроно.асинхроно.

Page 4: Конкурентно програмирање

Мотивација за коришћење виших Мотивација за коришћење виших програмских језикапрограмских језика

Некада су се ти програми писали у Некада су се ти програми писали у асемблерским језицима, јер:асемблерским језицима, јер: Виши програмски језици нису пружали Виши програмски језици нису пружали

механизме за писање машински механизме за писање машински зависног кода као што су драјвери зависног кода као што су драјвери уређаја.уређаја.

Виши програмски језици нису пружали Виши програмски језици нису пружали алате за конкурентно програмирање.алате за конкурентно програмирање.

Виши програмски језици за Виши програмски језици за конкурентно програмирање нису били конкурентно програмирање нису били ефикасни.ефикасни.

Page 5: Конкурентно програмирање

Мотивација за коришћење виших Мотивација за коришћење виших програмских језикапрограмских језика

Временом су се развили језици за Временом су се развили језици за конкурентно програмирање који су конкурентно програмирање који су ефикасни.ефикасни.

Предности су у лакшем писању, Предности су у лакшем писању, тестирању, модификацији и прено-тестирању, модификацији и прено-сивости. сивости.

Главни недостатак, неефикасан Главни недостатак, неефикасан код, елиминисан је појавом код, елиминисан је појавом оптимизирајућих компилатора.оптимизирајућих компилатора.

Page 6: Конкурентно програмирање

МодуларизацијаМодуларизација

Модуларизација представља Модуларизација представља дељење једног програма на више дељење једног програма на више мањих модула.мањих модула.

Типови модула могу бити:Типови модула могу бити: Процеси.Процеси. Процедуре.Процедуре. Апстрактрни типови података.Апстрактрни типови података.

Page 7: Конкурентно програмирање

МодуларизацијаМодуларизација

Процеси су основни Процеси су основни градивни блок ОС-а.градивни блок ОС-а.

Процес се састоји од Процес се састоји од извесног броја локалних извесног броја локалних података и података и секвенцијалног секвенцијалног програма који ради са програма који ради са тим подацима.тим подацима.

Локални подаци

Секвенца исказа

Сл 1. Шематски приказ процеса.

Page 8: Конкурентно програмирање

МодуларизацијаМодуларизација Процедуре су следећа јединица Процедуре су следећа јединица

модуларизације.модуларизације. Ако процедуре могу да имају своје Ако процедуре могу да имају своје

сопствене постојане променљиве, сопствене постојане променљиве, тада се неки глобални подаци тада се неки глобални подаци могу инкапсулирати унутар могу инкапсулирати унутар процедуре.процедуре.

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

Page 9: Конкурентно програмирање

МодуларизацијаМодуларизација

Апстрактни Апстрактни типови података типови података карактеришу се карактеришу се скупом операција скупом операција дефинисаним од дефинисаним од стране стране програмера.програмера.

Сл. 2. Шематски приказ апстрактног типа података.

Локални подаци

Код за иницијализациј

у

Операције

Page 10: Конкурентно програмирање

МодуларизацијаМодуларизација

Програмски модул који представља Програмски модул који представља репрезентацију апстрактног типа репрезентацију апстрактног типа података назива се података назива се класомкласом..

Овај појам уведен је у језик Овај појам уведен је у језик Simula67Simula67 и коришћен је у конкурентном и коришћен је у конкурентном Паскалу и другим језицима.Паскалу и другим језицима.

Page 11: Конкурентно програмирање

МодуларизацијаМодуларизацијаtypetype ime-klaseime-klase = = classclass

deklaracije promenljivihdeklaracije promenljivihprocedureprocedure PP1(…);1(…);

beginbegin … … endend;;procedureprocedure PP2(…);2(…);

beginbegin … … endend;;......

procedureprocedure PnPn(…);(…);beginbegin … … endend;;

beginbeginkod za inicijalizacijukod za inicijalizaciju

endend..

Page 12: Конкурентно програмирање

МодуларизацијаМодуларизација

Класа не мора да извози све своје Класа не мора да извози све своје процедуре.процедуре.

Да би разликовали извезене Да би разликовали извезене процедуре користићемо нотацијупроцедуре користићемо нотацију

procedure entry procedure entry PP(…);(…);

Page 13: Конкурентно програмирање

СинхронизацијаСинхронизација

Критичне областиКритичне областиvarvar v: v: sharedshared T; T;

Променљивој Променљивој vv може се може се приступати само унутар исказа приступати само унутар исказа следећег обликаследећег облика

regionregion v v dodo S S;; Док се извршава исказ Док се извршава исказ SS ниједан ниједан

други процес не може да други процес не може да приступи променљивој приступи променљивој vv..

Page 14: Конкурентно програмирање

СинхронизацијаСинхронизација

Условне критичне областиУсловне критичне области (Хоар, (Хоар, 1972)1972)

regionregion v v when when B B dodo S S;; Ако је логички израз Ако је логички израз BB једнак једнак truetrue

извршава се извршава се SS.. Ако је Ако је BB==falsefalse процес ослобађа процес ослобађа

критичну секцију и одлаже се док критичну секцију и одлаже се док BB не постане не постане truetrue и ниједан други и ниједан други процес није у области придруженој процес није у области придруженој променљивој променљивој vv..

Page 15: Конкурентно програмирање

СинхронизацијаСинхронизација

Илуструјмо овај концепт на примеру Илуструјмо овај концепт на примеру ограниченог бафера. Бафер и ограниченог бафера. Бафер и поинтери инкапсулирани су поинтери инкапсулирани су следећој дељивој структури следећој дељивој структури података:података:

varvar baferbafer: : sharedshared recordrecord

nizniz: : arrayarray[0..[0..nn-1] -1] ofof itemitem;;

brojbroj, , inin, , outout: : integerinteger;;

endend;;

Page 16: Конкурентно програмирање

СинхронизацијаСинхронизација

Произвођач додаје нови елемент Произвођач додаје нови елемент nextpnextp у бафер: у бафер:

regionregion baferbafer whenwhen brojbroj < < nn dodo

beginbegin

nizniz[[inin]:=]:=nextpnextp;;

inin:=(:=(inin+1) +1) modmod nn;;

brojbroj:=:=brojbroj+1;+1;

endend;;

Page 17: Конкурентно програмирање

СинхронизацијаСинхронизација

Потрошач узима елемент из Потрошач узима елемент из бафера на следећи начин:бафера на следећи начин:

regionregion bafer bafer whenwhen broj broj > 0> 0 dodo

beginbegin

nextcnextc:=:=nizniz[[outout];];

outout:=(:=(out+out+1)1) modmod n; n;

brojbroj:=:=brojbroj-1;-1;

endend;;

Page 18: Конкурентно програмирање

СинхронизацијаСинхронизација Израчунавање услова се код ове Израчунавање услова се код ове

конструкције врши само на почетку конструкције врши само на почетку критичне областикритичне области

Стога Брич Хансен (1972) уводи Стога Брич Хансен (1972) уводи следећу конструкцију:следећу конструкцију:

Page 19: Конкурентно програмирање

СинхронизацијаСинхронизација

regionregion v v dodo

beginbegin

SS11;;

awaitawait((BB););

SS2;2;

endend;;

Page 20: Конкурентно програмирање

СинхронизацијаСинхронизација

Илустроваћемо овај концепт на Илустроваћемо овај концепт на другом проблему читалаца и другом проблему читалаца и писаца.писаца.

Page 21: Конкурентно програмирање

СинхронизацијаСинхронизација

typetype citaoci-pisci citaoci-pisci = = classclass

varvar vv: : shared recordshared record

brcitalacabrcitalaca, , brpisacabrpisaca: : integerinteger;;

zauzetzauzet: : booleanboolean;;

endend;;

Page 22: Конкурентно програмирање

СинхронизацијаСинхронизација

procedure entryprocedure entry pocni-citanjepocni-citanje;;

regionregion v v dodo

beginbegin

awaitawait((brpisacabrpisaca = 0); = 0);

brcitalacabrcitalaca:=:=brcitalacabrcitalaca+1;+1;

endend;;

Page 23: Конкурентно програмирање

СинхронизацијаСинхронизација

procedure entryprocedure entry zavrsi-citanjezavrsi-citanje;;

regionregion v v dodo

beginbegin

brcitalacabrcitalaca:=:=brcitalaca brcitalaca - 1;- 1;

endend;;

Page 24: Конкурентно програмирање

СинхронизацијаСинхронизација

procedure entryprocedure entry pocni-pisanjepocni-pisanje;;

regionregion v v dodo

beginbegin

brpisacabrpisaca:=:=brpisacabrpisaca+1;+1;

awaitawait((((not not zauzetzauzet) ) and and ((brcitalacabrcitalaca = = 0));0));

zauzetzauzet:= := truetrue;;

endend;;

Page 25: Конкурентно програмирање

СинхронизацијаСинхронизација

procedure entryprocedure entry zavrsi-pisanjeezavrsi-pisanjee;;

regionregion v v dodo

beginbegin

brpisacabrpisaca:=:=brpisaca - brpisaca - 1;1;

zauzetzauzet:= := falsefalse;;

endend;;

Page 26: Конкурентно програмирање

СинхронизацијаСинхронизација

beginbegin

zauzetzauzet:=:=falsefalse;;

brcitalacabrcitalaca:=0;:=0;

brpisacabrpisaca:=0;:=0;

end.end.

Page 27: Конкурентно програмирање

СинхронизацијаСинхронизација

Процес читалац може да врши Процес читалац може да врши читање у следећој секвенци:читање у следећој секвенци:

rw.pocni-citanjerw.pocni-citanje;;

……

citaj podatkecitaj podatke

……

rw.zavrsi-citanje; rw.zavrsi-citanje;

где је где је rwrw примерак класе примерак класе citaoci-citaoci-piscipisci. .

Page 28: Конкурентно програмирање

СинхронизацијаСинхронизација

Код уписа података извршава Код уписа података извршава се:се:

rw.pocni-pisanjerw.pocni-pisanje;;

……

pisi podatkepisi podatke

……

rw.zavrsi-pisanje;rw.zavrsi-pisanje;

Page 29: Конкурентно програмирање

СинхронизацијаСинхронизација

МониториМонитори (Брич Хансен, 1973; Хоар, 1974) (Брич Хансен, 1973; Хоар, 1974)

Сл. 3. Шематски приказ монитора.

Дељиви подаци

Код за иницијализациј

у

Операције

Page 30: Конкурентно програмирање

СинхронизацијаСинхронизација

Монитори поседују сопствене Монитори поседују сопствене синхронизационе механизме.синхронизационе механизме.

Сваки монитор садржи једну или Сваки монитор садржи једну или више променљивих типа више променљивих типа conditioncondition..

Дозвољене операције су Дозвољене операције су waitwait и и signalsignal..

Операција Операција x.waitx.wait значи да се значи да се процес суспендује док неки други процес суспендује док неки други процес не обави операцију процес не обави операцију x.signalx.signal..

Page 31: Конкурентно програмирање

СинхронизацијаСинхронизација Пример монитора који симулира Пример монитора који симулира

рад бинарног семафора:рад бинарног семафора:

Page 32: Конкурентно програмирање

СинхронизацијаСинхронизацијаtypetype semaphore = semaphore = monitormonitorvarvar zauzetzauzet: : booleanboolean;;

slobodanslobodan: : conditioncondition;;procedure entryprocedure entry PP;;

beginbeginif if zauzetzauzet thenthen slobodan.waitslobodan.wait;;zauzetzauzet:=:=truetrue;;

endend;;procedure entryprocedure entry VV;;

beginbeginzauzetzauzet:=:=falsefalse;;slobodan.signalslobodan.signal;;

endend;;beginbegin

zauzetzauzet:=:=falsefalse;;end.end.

Page 33: Конкурентно програмирање

СинхронизацијаСинхронизација

FCFSFCFS шема по којој раде редови шема по којој раде редови придружени променљивој типа придружени променљивој типа conditioncondition често не задовољава. често не задовољава.

Page 34: Конкурентно програмирање

СинхронизацијаСинхронизација

Хоар (1974) је увео Хоар (1974) је увео conditional waitconditional wait

x.waitx.wait((cc))

где је где је cc целобројни израз ( целобројни израз (број број приоритетаприоритета) који се израчунава у ) који се израчунава у моменту извршења операције.моменту извршења операције.

Када се изврши Када се изврши x.signalx.signal обнавља се обнавља се процес са најмањом вредношћу процес са најмањом вредношћу броја приоритета.броја приоритета.

Page 35: Конкурентно програмирање

СинхронизацијаСинхронизација код код WiWindows ndows NT-aNT-a

Windows NTWindows NT обезбеђује механизам обезбеђује механизам синхронизације нити као део синхронизације нити као део објектне архитектуре.објектне архитектуре.

Page 36: Конкурентно програмирање

СинхронизацијаСинхронизација код код WiWindows ndows NT-aNT-a

Фамилија синхронизационих објеката Фамилија синхронизационих објеката садржи следеће типове објеката:садржи следеће типове објеката:

ПроцесПроцес НитНит ДатотекаДатотека ДогађајДогађај Пар догађајаПар догађаја СемафорСемафор ТајмерТајмер МутантМутант

Page 37: Конкурентно програмирање

СинхронизацијаСинхронизација код код WiWindows ndows NT-aNT-a

Прва три типа објеката имају у Прва три типа објеката имају у основи другачију намену али се основи другачију намену али се такође могу користити и за такође могу користити и за синхронизацију.синхронизацију.

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

Page 38: Конкурентно програмирање

СинхронизацијаСинхронизација код код WiWindows ndows NT-aNT-a

Синхронизациони објекат може Синхронизациони објекат може бити убити у сигнализираном,сигнализираном, или у или у несигнализираномнесигнализираном стању. стању.

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

Page 39: Конкурентно програмирање

СинхронизацијаСинхронизација код код WiWindows ndows NT-aNT-a

Нит издаје захтев за чекањем Нит издаје захтев за чекањем NTNT егзекутиви путем хендла егзекутиви путем хендла синхронизационог објекта.синхронизационог објекта.

Када објекат пређе у Када објекат пређе у сигнализирано стање сигнализирано стање NTNT егзекутива ослобађа све објекте егзекутива ослобађа све објекте нити који чекају на тај нити који чекају на тај синхронизациони објекат.синхронизациони објекат.

Page 40: Конкурентно програмирање

СинхронизацијаСинхронизација код код WiWindows ndows NT-aNT-a

Тип Тип објектаобјекта

ДефиницијаДефиницијаПоставља се у сигнализирано Поставља се у сигнализирано

стање када (се)стање када (се)Ефекат на нити које Ефекат на нити које

чекајучекају

ПроцесПроцес Позивање програма обухватајући адресни Позивање програма обухватајући адресни простор и ресурсепростор и ресурсе

терминира последња ниттерминира последња нит Све се ослобађајуСве се ослобађају

НитНит Ентитет који се може извршити у оквиру Ентитет који се може извршити у оквиру процесапроцеса

нит терминиранит терминира Све се ослобађајуСве се ослобађају

ДатотекаДатотека Примерак отворене датотеке или У/И уређајаПримерак отворене датотеке или У/И уређаја У/И операција завршиУ/И операција заврши Све се ослобађајуСве се ослобађају

ДогађајДогађај Објава да се јавио системски догађајОбјава да се јавио системски догађај нит постави догађајнит постави догађај Све се ослобађајуСве се ослобађају

Пар Пар догађајадогађаја

Назнака да је посвећена клијентска нит Назнака да је посвећена клијентска нит копирала поруку копирала поруку WinWin3232 северу или обрнуто северу или обрнуто

посвећена клијентска или посвећена клијентска или серверска нит постави догађајсерверска нит постави догађај

Друга посвећена нит Друга посвећена нит се ослобађасе ослобађа

СемафорСемафор Бројач који регулише број нити које могу Бројач који регулише број нити које могу користити ресурскористити ресурс

вредност семафора постане 0вредност семафора постане 0 Све се ослобађајуСве се ослобађају

ТајмерТајмер Бројач који прати проток временаБројач који прати проток времена Пристигло време које треба Пристигло време које треба поставити или истекао поставити или истекао интервал временаинтервал времена

Све се ослобађајуСве се ослобађају

МутантМутант Механизам који обезбеђује узајамну Механизам који обезбеђује узајамну искључивост за искључивост за WinWin32 или 32 или OSOS/2 окружење/2 окружење

Нит власник или друга нит Нит власник или друга нит ослободи мутантаослободи мутанта

Једна нит се Једна нит се ослобађаослобађа

Page 41: Конкурентно програмирање

СинхронизацијаСинхронизација код код WiWindows ndows NT-aNT-a

Пар догађајаПар догађаја је објекат придружен је објекат придружен клијент/сервер апликацији и могу клијент/сервер апликацији и могу му приступати само нити клијента му приступати само нити клијента и сервера.и сервера.

Било клијент било сервер могу да Било клијент било сервер могу да поставе објекат у сигнализирано поставе објекат у сигнализирано стање што изазива да друга нит стање што изазива да друга нит (нит сервера или нит клијента) (нит сервера или нит клијента) буде сигнализирана.буде сигнализирана.

Page 42: Конкурентно програмирање

СинхронизацијаСинхронизација код код WiWindows ndows NT-aNT-a

За све остале синхронизационе За све остале синхронизационе објекте више нити може да чека објекте више нити може да чека на једном објекту.на једном објекту.

Page 43: Конкурентно програмирање

СинхронизацијаСинхронизација код код WiWindows ndows NT-aNT-a

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

Page 44: Конкурентно програмирање

СинхронизацијаСинхронизација код код WiWindows ndows NT-aNT-a

Када објекат мутант уђе у Када објекат мутант уђе у сигнализирано стање само једна сигнализирано стање само једна нит од оних које чекају се нит од оних које чекају се ослобађа.ослобађа.

За остале синхронизационе За остале синхронизационе објекте који подржавају чекање објекте који подржавају чекање више нити све нити које чекају се више нити све нити које чекају се ослобађају када објекат уђе у ослобађају када објекат уђе у сигнализирано стање.сигнализирано стање.