440 likes | 548 Views
Конкурентно програмирање. Мотивација за коришћење виших програмских језика Модуларизација Синхронизација Синхронизација код WinNT-a. Мотивација за коришћење виших програмских језика. Оперативни системи се данас углавном пишу на вишим програмским језицима. То омогућава:
E N D
Конкурентно програмирање Мотивација за коришћење виших програмских језика Модуларизација Синхронизација Синхронизација код WinNT-a
Мотивација за коришћење виших програмских језика • Оперативни системи се данас углавном пишу на вишим програмским језицима. • То омогућава: • Бољу имплеметацију ОС-а. • Боље одржавање. • Преносивост.
Мотивација за коришћење виших програмских језика • Оперативни систем се састоји од великог броја програма који раде асинхроно.
Мотивација за коришћење виших програмских језика • Некада су се ти програми писали у асемблерским језицима, јер: • Виши програмски језици нису пружали механизме за писање машински зависног кода као што су драјвери уређаја. • Виши програмски језици нису пружали алате за конкурентно програмирање. • Виши програмски језици за конкурентно програмирање нису били ефикасни.
Мотивација за коришћење виших програмских језика • Временом су се развили језици за конкурентно програмирање који су ефикасни. • Предности су у лакшем писању, тестирању, модификацији и прено-сивости. • Главни недостатак, неефикасан код, елиминисан је појавом оптимизирајућих компилатора.
Модуларизација • Модуларизација представља дељење једног програма на више мањих модула. • Типови модула могу бити: • Процеси. • Процедуре. • Апстрактрни типови података.
Локални подаци Секвенца исказа Сл 1. Шематски приказ процеса. Модуларизација • Процеси су основни градивни блок ОС-а. • Процес се састоји од извесног броја локалних података и секвенцијалног програма који ради са тим подацима.
Модуларизација • Процедуре су следећа јединица модуларизације. • Ако процедуре могу да имају своје сопствене постојане променљиве, тада се неки глобални подаци могу инкапсулирати унутар процедуре. • На тај начин процес не приступа подацима директно него само преко процедура.
Локални подаци Операције Код за иницијализацију • Сл. 2. Шематски приказ апстрактног типа података. Модуларизација • Апстрактни типови података карактеришу се скупом операција дефинисаним од стране програмера.
Модуларизација • Програмски модул који представља репрезентацију апстрактног типа података назива се класом. • Овај појам уведен је у језик Simula67 и коришћен је у конкурентном Паскалу и другим језицима.
Модуларизација typeime-klase = class deklaracije promenljivih procedureP1(…); begin … end; procedureP2(…); begin … end; . . . procedurePn(…); begin … end; begin kod za inicijalizaciju end.
Модуларизација • Класа не мора да извози све своје процедуре. • Да би разликовали извезене процедуре користићемо нотацију procedure entry P(…);
Синхронизација • Критичне области var v: shared T; • Променљивој v може се приступати само унутар исказа следећег облика region v do S; • Док се извршава исказ S ниједан други процес не може да приступи променљивој v.
Синхронизација • Условне критичне области (Хоар, 1972) region v when B do S; • Ако је логички израз B једнак trueизвршава се S. • Ако је B=false процес ослобађа критичну секцију и одлаже се док B не постане true и ниједан други процес није у области придруженој променљивој v.
Синхронизација • Илуструјмо овај концепт на примеру ограниченог бафера. Бафер и поинтери инкапсулирани су следећој дељивој структури података: varbafer: sharedrecord niz: array[0..n-1] ofitem; broj, in, out: integer; end;
Синхронизација • Произвођач додаје нови елемент nextp у бафер: regionbaferwhenbroj < ndo begin niz[in]:=nextp; in:=(in+1) modn; broj:=broj+1; end;
Синхронизација • Потрошач узима елемент из бафера на следећи начин: region bafer when broj > 0do begin nextc:=niz[out]; out:=(out+1)mod n; broj:=broj-1; end;
Синхронизација • Израчунавање услова се код ове конструкције врши само на почетку критичне области • Стога Брич Хансен (1972) уводи следећу конструкцију:
Синхронизација region v do begin S1; await(B); S2; end;
Синхронизација • Илустроваћемо овај концепт на другом проблему читалаца и писаца.
Синхронизација typecitaoci-pisci = class varv: shared record brcitalaca, brpisaca: integer; zauzet: boolean; end;
Синхронизација procedure entrypocni-citanje; region v do begin await(brpisaca = 0); brcitalaca:=brcitalaca+1; end;
Синхронизација procedure entryzavrsi-citanje; region v do begin brcitalaca:=brcitalaca - 1; end;
Синхронизација procedure entrypocni-pisanje; region v do begin brpisaca:=brpisaca+1; await((not zauzet) and (brcitalaca = 0)); zauzet:= true; end;
Синхронизација procedure entryzavrsi-pisanjee; region v do begin brpisaca:=brpisaca - 1; zauzet:= false; end;
Синхронизација begin zauzet:=false; brcitalaca:=0; brpisaca:=0; end.
Синхронизација • Процес читалац може да врши читање у следећој секвенци: rw.pocni-citanje; … citaj podatke … rw.zavrsi-citanje; где је rw примерак класе citaoci-pisci.
Синхронизација • Код уписа података извршава се: rw.pocni-pisanje; … pisi podatke … rw.zavrsi-pisanje;
Дељиви подаци Операције Код за иницијализацију • Сл. 3. Шематски приказ монитора. Синхронизација • Монитори (Брич Хансен, 1973; Хоар, 1974)
Синхронизација • Монитори поседују сопствене синхронизационе механизме. • Сваки монитор садржи једну или више променљивих типа condition. • Дозвољене операције су wait и signal. • Операција x.wait значи да се процес суспендује док неки други процес не обави операцију x.signal.
Синхронизација • Пример монитора који симулира рад бинарног семафора:
Синхронизација typesemaphore = monitor varzauzet: boolean; slobodan: condition; procedure entryP; begin if zauzetthenslobodan.wait; zauzet:=true; end; procedure entryV; begin zauzet:=false; slobodan.signal; end; begin zauzet:=false; end.
Синхронизација • FCFS шема по којој раде редови придружени променљивој типа condition често не задовољава.
Синхронизација • Хоар (1974) је увео conditional wait x.wait(c) где је c целобројни израз (број приоритета) који се израчунава у моменту извршења операције. • Када се изврши x.signal обнавља се процес са најмањом вредношћу броја приоритета.
Синхронизацијакод Windows NT-a • Windows NT обезбеђује механизам синхронизације нити као део објектне архитектуре.
Синхронизацијакод Windows NT-a • Фамилија синхронизационих објеката садржи следеће типове објеката: • Процес • Нит • Датотека • Догађај • Пар догађаја • Семафор • Тајмер • Мутант
Синхронизацијакод Windows NT-a • Прва три типа објеката имају у основи другачију намену али се такође могу користити и за синхронизацију. • Остали типови објеката су специјално пројектовани да подрже синхронизацију.
Синхронизацијакод Windows NT-a • Синхронизациони објекат може бити у • сигнализираном, или у • несигнализираном стању. • Нит може бити суспендована на објекту у несигнализираном стању, а ослобађа се када дотични објекат дође у сигнализирано стање.
Синхронизацијакод Windows NT-a • Нит издаје захтев за чекањем NT егзекутиви путем хендла синхронизационог објекта. • Када објекат пређе у сигнализирано стање NT егзекутива ослобађа све објекте нити који чекају на тај синхронизациони објекат.
Синхронизацијакод Windows NT-a • Пар догађаја је објекат придружен клијент/сервер апликацији и могу му приступати само нити клијента и сервера. • Било клијент било сервер могу да поставе објекат у сигнализирано стање што изазива да друга нит (нит сервера или нит клијента) буде сигнализирана.
Синхронизацијакод Windows NT-a • За све остале синхронизационе објекте више нити може да чека на једном објекту.
Синхронизацијакод Windows NT-a • Објекат мутант се користи да наметне узајмно искључив приступ неком ресурсу при чему се дозвољава да само један објекат нити може да добије приступ. Према томе, ова врста синронизационог објекта делује као бинарни семафор.
Синхронизацијакод Windows NT-a • Када објекат мутант уђе у сигнализирано стање само једна нит од оних које чекају се ослобађа. • За остале синхронизационе објекте који подржавају чекање више нити све нити које чекају се ослобађају када објекат уђе у сигнализирано стање.