Programowanie wsp bie ne i rozproszone
This presentation is the property of its rightful owner.
Sponsored Links
1 / 122

Programowanie współbieżne i rozproszone PowerPoint PPT Presentation


  • 96 Views
  • Uploaded on
  • Presentation posted in: General

Programowanie współbieżne i rozproszone. Wspó ł bie ż no ść - sk ł adaj ą ce si ę na ni ą zjawiska, czynno ś ci lub dzia ł ania odbywaj ą si ę równocze ś nie. Proces - program (procedura) w trakcie wykonywania, który mo ż e by ć sko ń czony lub niesko ń czony.

Download Presentation

Programowanie współbieżne i rozproszone

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Programowanie wsp bie ne i rozproszone

Programowanie wspbiene i rozproszone

  • Wspbieno- skadajce si na ni zjawiska, czynnocilub dziaania odbywaj si rwnoczenie.

  • Proces - program (procedura) w trakcie wykonywania, ktry moe by skoczony lub nieskoczony.

  • Program wspbieny - zbir programw sekwencyjnych wykonywanych rwnolegle, gdzie nie jest wymagane, aby kady proces by wykonywany przez fizycznie odrbny procesor.

  • Geneza systemy operacyjne wielozadaniowe.


Programowanie wsp bie ne i rozproszone

Termin programowanie wspbiene uywa si do okrelenia technik i notacji programistycznych sucych do wyraania rwnolegoci oraz rozwizywania zagadnie zwizanych z powstaymi przy tym problemami synchronizacji i komunikacji.

Programowanie wspbiene jest bardzo wanym zagadnieniem, gdy pozwala zajmowa si rwnolegoci bez wdawania si w szczegy implementacyjne. Moliwo takiego abstrahowania okazaa si na tyle uyteczna przy pisaniu programw, e nowoczesne jzyki programowania wyposaono ju w mechanizmy programowania wspbienego.

Podstawowym problemem w programowaniu wspbienym jest wyczno procesw do wsplnych zasobw.


Programowanie sekwencyjne a wsp bie ne

Programowanie sekwencyjne a wspbiene

  • programowanie rozwiza sekwencyjnych

    jest prostsze

  • prostsza analiza poprawnoci programu

  • dua liczba problemw analizowanych i rozwizywanych za pomoc programu

    sekwencyjnego bdzie dziaaa wolniej,

Programowanie sekwencyjne :


Programowanie wsp bie ne

Programowanie wspbiene:

  • moliwo tworzenia systemw komputerowych (programw wspbienych) w sposb jak najbardziej efektywny,

  • programowania wspbiene jest znacznie trudniejsze ni programowania sekwencyjne,

  • trudniejsze jest dowodzenie poprawnoci programw wspbienych (skomplikowana analiza poprawnoci programu),

  • wspbieno wymaga uwzgldnienia trudnych do opisania zalenoci czasowych wystpujcych pomidzy poszczeglnymi procesami,

  • brakuje metod testowych umoliwiajcych wykrywanie bdw synchronizacji,

  • konieczno specyfikacji (okrelenia) instrukcji, ktre mog by wykonywane jednoczenie (problem wzajemnego wykluczania, sortowanie wspbiene tablic),


Problemy w programowaniu wsp bie nym

Problemy w programowaniu wspbienym

  • problemysynchronizacjiikomunikacji

  • problemy zwizane z przydziaem procesora (priorytetowanie procesw)


Przyk ad z o ono obliczeniowa sekwencyjnego i r wnoleg ego algorytmu sortowania tablic

Przykad:Zoono obliczeniowa sekwencyjnego i rwnolegego algorytmu sortowania tablic.


Programowanie wsp bie ne i rozproszone

Sortowanie sekwencyjne n elementowej tablicy (przez zamian):

dla wewntrznej ptli sortowania

(n-1)+ (n-2)+...+1= n(n-1)/2= n2/2

Sortowanie rwnolege

podzia tablicy na dwie tablice po n/2 elementw

liczba operacji dla jednej tablicy (n/2)2/2 = n2/8

liczba operacji potrzebnych do posortowania 2 tablic n2/4

n operacji poczenia dwch tablic


Poprawno ci program w wsp bie nych

Poprawnoci programw wspbienych

Program sekwencyjny jest poprawny, jeli zatrzymuje si oraz drukuje poprawn warto (wartoci). To twierdzenie jest te suszne dla pewnego rodzaju programw wspbienych takich jak sortowanie.

Cech wielu programw wspbienych (systemw operacyjnych, systemw czasu rzeczywistego) jest to, e nigdy si nie zatrzymuj). Wwczas w abstrakcji wspbienoci wyrnimy dwa typy wasnoci dotyczcych poprawnoci:


Programowanie wsp bie ne i rozproszone

Wasno bezpieczestwa program wspbieny jest bezpieczny, jeli nigdy nie doprowadza do niepodanego stanu.

Np.:

problem wzajemnego wykluczania,

problem producentw i konsumentw-

kadaporcja zostanie skonsumowana w

kolejnoci ichprodukowania.

Wasnoywotnoci program wspbieny jest ywotny, jeli zapewnia, e kade podane zdarzenie w kocu zajdzie.


Przejawy braku ywotno ci

Przejawy braku ywotnoci

Brak ywotnoci globalnej - blokada (zastj, zakleszczenie, martwy punkt) wystpuje wtedy, gdy kady proces z danego zbioru procesw jest wstrzymany w oczekiwaniu na zdarzenie, ktre moe by spowodowane tylko przez jaki inny proces z tego zbioru. Zjawisko blokady moe by rwnie traktowane jakoprzejawbraku bezpieczestwa programu, jest bowiem stan niepodany.

Brak ywotnoci lokalnej - zagodzenie wystpuje wtedy, gdy proces nie zostaje wznowiony, mimo e zdarzenie, na ktre czeka, wystpuje dowoln liczb razy i za kadym razem, gdy proces ten mgby by wznowiony, jest wybierany jaki inny czekajcy proces.Pomidzy cakowitym brakiem pojcia czasu w koncepcji ywotnoci, a wprowadzeniem czasu dokadnego znajduje si pojcie uczciwoci.


Cztery rodzaje uczciwo ci

Wasno uczciwoci - program wspbieny jest uczciwy (sprawiedliwy), jeli podczas przydzielania zasobu dzielonego, w taki sam sposb traktuje wszystkie procesy. Wasno ta jest szczeglnym przykadem wasnoci ywotnoci.

Cztery rodzaje uczciwoci :

  • uczciwosaba oznacza, e w przypadku nieprzerwanego zgaszania dania dostpu do zasobu przez proces, zostanie ono kiedy obsuone,

  • uczciwomocna oznacza, e gdy proces zgasza danie dostpu nieskoczenie wiele razy, zostanie ono kiedy obsuone,

  • oczekiwanie liniowe oznacza, e jeli proces zgosi danie, zostanie ono obsuone zanim dowolny inny proces zostanie obsuony wicej ni jeden raz,

  • kolejka FIFO (ang. First In, First Out) oznacza, e jeli proces zgosi danie, zostanie ono obsuone przed dowolnym innym danie zgoszonym pniej.


Poprawno ci program w wsp bie nych1

Poprawnoci programw wspbienych

Przeplot. Aby wykaza, e program wspbieny nie jest poprawny, wystarczy wskaza cig akcji poszczeglnych procesw, ktre doprowadzaj do stanu niepodanego.

System scentralizowany i rozproszony

Programowanie wspbiene moe dotyczy systemw opartych na wsplnej pamici (systemy scentralizowane), lub architektury wieloprocesorowej poczonej sieci komputerow (systemy rozproszone), gdzie kady procesor dysponuje swoj pamici.


System scentralizowany

WSPLNA PAMI

KANA KOMUNIKACYJNY

PROCESOR

PROCESOR

PROCESOR

PROCESOR

System scentralizowany


System rozproszony

SIELOKALNA

PROCESOR

PROCESOR

PROCESOR

PROCESOR

PAMI

PAMI

PAMI

PAMI

System rozproszony


Problem wzajemnego wykluczania

Problem wzajemnego wykluczania

Zasb dzielony - wsplny obiekt, z ktrego moe korzysta w sposb wyczny wiele procesw.

Zasb wasny- obiekt, z ktrego korzysta (do ktrego ma dostp w dowolnym czasie) tylko jeden proces.

Sekcjakrytyczna - fragment procesu (cig instrukcji), w ktrym proces korzysta z zasobu dzielonego.

Sekcja lokalna - fragment procesu (cig instrukcji), w ktrym proces korzysta z zasobu wasnego.


Programowanie wsp bie ne i rozproszone

Problem wzajemnego wykluczaniapolega nazsynchronizowaniu N procesw, z ktrychkadyw nieskoczonej ptli na przemian zajmuje siwasnymi sprawami ( sekcja lokalna) i wykonujesekcj krytyczn, w taki sposb, aby wykonywanie sekcji krytycznych jakichkolwiekdwch lub wicej procesw nie pokrywao si w czasie.

Rozwizanie problemu sprowadza si do specyfikacji zbioru regu (warunkw) spenienie, ktrych jest konieczne do tego, aby dany proces mg wykorzysta zasb dzielony (unikajc zagodzenia). Oznacza to, e naley dokona specyfikacji i implementacji nastpujcych protokow: protokou wstpnego i protokou kocowego.


Programowanie wsp bie ne i rozproszone

Process P1( ) Process P2( ) ......................... Process Pn()

{ while (TRUE) { while (TRUE) { while (TRUE )

{ sekcja_lokalna; { sekcja_lokalna; { sekcja_lokalna;

protok_wstpny; protok_wstpny; protok_wstpny;

sekcja_krytyczna; sekcja_krytyczna;

sekcja_krytyczna;

protok_kocowy; protok_kocowy;

protok_kocowy;

} } }

} } {


Schemat procesu

Sekcjalokalna

Protokwstpny

Sekcjakrytyczna

Protokkocowy

Schemat procesu


Problem wzajemnego wykluczania1

Problem wzajemnego wykluczania

Dany jest zbir N wspbienych procesw cyklicznych, N = {P1, P2,..., Pn}. Kady z procesw w nieskoczonej ptli, na przemian, wykonuje prac: na zasobie wasnym i zasobie dzielonym lub tylko na zasobach dzielonych. Ograniczenie w pracy systemu polega na tym, e w tym samym czasie tylko zbir m procesw (m ||M||, gdzie M jest podzbiorem zbioru N; M N oraz moc ||M|| jest rwna pojemnoci zasobu dzielonego) moe wykorzystywa zasb dzielony.


Warunki poprawnego rozw i zania problemu wzajemnego wykluczania

Warunki poprawnego rozwizania problemu wzajemnego wykluczania:

  • procesy musz by traktowane jako rwnowane, nie mog mie przypisanych im statycznych priorytetw (sprawiedliwe decyzje)

  • aden proces nie moe wykonywa swej sekcji krytycznej nieskoczenie dugo, nie moe ulec awarii podczas wykonywania sekcji krytycznej). Taki sam warunek dotyczy protokow wstpnego i kocowego

  • jeeli wicej ni jeden proces chce wej do sekcji krytycznej, to decyzja o tym, ktry proces zostanie wybrany musi by podjta w skoczonym czasie. Natomiast, jeeli aden z procesw nie wykonuje sekcji krytycznej, to przy zgoszeniu si dowolnego procesu musi by mu umoliwione wejcie do sekcji krytycznej


Programowanie wsp bie ne i rozproszone

  • zachowanie si procesw poza sekcj krytyczn nie powinno by w aden sposb ograniczone (lune powizanie procesw). Zatrzymanie si jakiego procesu w poza sekcj krytyczn nie moe prowadzi do blokowania innych procesw

  • Procesy mog si wykonywa z rnymi prdkociami. W rozwizaniu nie wolno czyniadnych zaoe dotyczcych wzgldnej szybkoci procesw.

  • ywotno globalna i lokalna programu - brak blokady i zagodzenia.

  • Bezpieczestwo programu.


Programowanie wsp bie ne i rozproszone

Modele komunikacji midzy procesami:

model pamici wspdzielonej-systemy scentralizowanych

model przesyania komunikatw - systemy rozproszone

W modelu pamici wspdzielonej rolcza komunikacyjnego pomidzy procesami spenia pami dzielona:

wymiana informacji poprzez zapisywanie i odczytywanie wartoci zmiennej

dzielonej

udogodnienie sprztowe - arbiter pamici, zapewnia wyczno odczytu

lub zapisu informacji z danej komrki pamici

W modelu przesyania komunikatw rolcza spenia kana komunikacyjny:

wymiana informacji jest realizowana poprzez wysyaniekomunikatw

nadaj(komunikat)iodbierz(komunikat).


Programowanie wsp bie ne i rozproszone

Problem wzajemnego wykluczanie w rodowisku scentralizowanym poniszy algorytm nadaje si do wykorzystania na kadym komputerze niezalenie od zainstalowanego na nim systemu operacyjnego. Uywa on wycznie instrukcji jzyka maszynowego udostpnionych przez komputer bez korzystania z mechanizmw wysokiego poziomu, takich jak semafory czy monitory.


Programowanie wsp bie ne i rozproszone

Program 1

int czyja_kolej=1;

proces_P1 ( )

{

while (1)

{

while (czyja_kolej =2); // aktywne oczekiwanie

sekcja_krytyczna_P1;

czyja_kolej =1; // protok kocowy

sekcja_lokalna_P1;

}

}

//////////////////////////////

proces_P2 ( )

{

while (1)

{

while (czyja_kolej =1); // aktywne oczekiwanie

sekcja_krytyczna_P2;

czyja_kolej =2; // protok kocowy

sekcja_lokalna_P2;

}

}


W asno ci programu

Wasnoci programu

  • program jest bezpieczny,

  • brak zagodzenia,

  • procesy nie s luno powizane, pozwolenie jest przekazywane wprost od procesu do procesu, std:

  • awaria procesu w sekcji lokalnej -> blokada systemu

  • procesy wykorzystuj zasb naprzemiennie


Programowanie wsp bie ne i rozproszone

Program 2

int k1=1, k2 =1;

proces_P1 ( )

{

while (1)

{

while (k2 =0); // aktywne oczekiwanie

k1=0;

sekcja_krytyczna_P1;

k1=1; // protok kocowy

sekcja_lokalna_P1;

}

}

//////////////////////////////

proces_P2 ( )

{

while (1)

{

while (k1 =0); // aktywne oczekiwanie

k2=0;

sekcja_krytyczna_P2;

k2=1; // protok kocowy

sekcja_lokalna_P2;

}

}


W asno ci programu1

Wasnoci programu

  • program nie jest bezpieczny,

  • brak zagodzenia,

  • procesy s luno powizane, pozwolenie jest przekazywane bezporednio od procesu do procesu, std:

  • awaria procesu w sekcji lokalnej umoliwia realizacje drugiemu procesowi

  • procesy nie wykorzystuj zasobu naprzemiennie


Programowanie wsp bie ne i rozproszone

Program 3

int k1=1, k2 =1;

proces_P1 ( )

{

while (1)

{

k1=0;

while (k2 =0); // aktywne oczekiwanie

sekcja_krytyczna_P1;

k1=1; // protok kocowy

sekcja_lokalna_P1;

}

}

//////////////////////////////

proces_P2 ( )

{

while (1)

{

k2=0;

while (k1 =0); // aktywne oczekiwanie

sekcja_krytyczna_P2;

k2=1; // protok kocowy

sekcja_lokalna_P2;

}

}


W asno ci programu2

Wasnoci programu

program jest bezpieczny,

brak zagodzenia,

moliwo wystpienia blokady


Programowanie wsp bie ne i rozproszone

Program 4

int k1=1, k2 =1;

proces_P1 ( )

{

while (1)

{

k1=0;

while (k2 =0)

{

k1=1;

delay(n); //czasowa rezygnacja z wejcia do sekcji

//aby P2 mg wej

k1=0

}

sekcja_krytyczna_P1;

k1=1; // protok kocowy

sekcja_lokalna_P1;

}

}


Programowanie wsp bie ne i rozproszone

//////////////////////////////

proces_P2 ( )

{

while (1)

{

k2=0;

while (k1 =0)

{

k2=1;

delay(n); //czasowa rezygnacja z wejcia do sekcji

//aby P1 mg wej

k2=0

}

sekcja_krytyczna_P2;

k2=1; // protok kocowy

sekcja_lokalna_P2;

}

}


W asno ci programu3

Wasnoci programu

  • program jest bezpieczny,

  • moliwo wystpienia cigego zagodzenia dwch procesw, co prowadzi doblokady

    Rozwizanie poprawne - algorytm Dekkera - rozwizuje problem wzajemnego wykluczania dla dwch procesw konkurujcych ze sob o dostp do zasobu dzielonego przy uyciu trzech zmiennych.


W asno ci algorytmu dekkera

Wasnoci algorytmu Dekkera

  • wasno bezpieczestwa: wzajemnego wykluczania,

  • nie wystpuje w nim blokada,

  • aden proces w nim nie zostanie zagodzony

  • przy braku wspzawodnictwa proces moe natychmiast wej do swojej sekcji krytycznej

  • posiada moliwo zastosowania na kadym komputerze

    WADA: wymaga on aktywnego oczekiwania, czyli pracy procesu w ptli w oczekiwaniu na zmian lokacji w pamici, co jest bardzo niepodane ze wzgldu na marnotrawstwo czasu procesora.


Programowanie wsp bie ne i rozproszone

W algorytmie tym prawo do nalegania na wejcie do sekcji krytycznej jest jawnie przekazywane midzy procesami za pomoc zmiennych K1 i K2. Zmienne te zapewniaj ju wzajemne wykluczanie, ale po wykryciu wspzawodnictwa proces np. P1 sprawdza w dodatkowej zmiennej globalnej czyja_kolej , czy teraz jest jego kolej na wejcie do sekcji krytycznej. Jeli nie to przywraca pocztkow warto zmiennej K1 ustpujc w ten sposb procesowi P2 i przechodzi w ptl oczekiwania na swoj kolej. Gdy P2 koczy swoj sekcj krytyczn zmienia zmienn czyja_kolej na 1, dopuszczajc proces P1 do jego sekcji krytycznej. Nawet, gdy proces P2 natychmiast zgosi swoje danie na ponowne wejcie do sekcji krytycznej, zostanie on powstrzymany przez zmienn czyja_kolej, gdy tylko P1 ponownie zgosi swoje danie. Jeeli jednak proces P2 pierwszy opuci swoj sekcj lokaln przed procesem P1 (proces P1 jeszcze nie nalega na wejcie do sekcji krytycznej, tzn. jest jeszcze w swojej sekcji lokalnej - nie wykona jeszcze instrukcji K1=0;) moe on wej do swojej sekcji krytycznej, pomimo e nie bya to jego kolej.


Wysokopoziomowe mechanizmy synchronizacji

Wysokopoziomowe mechanizmy synchronizacji

Semafory

Semafor - abstrakcyjny typ danych zdefiniowany przez Dijkstr.

Semafor s jest zmienn przyjmujc (w zalenoci od rodzaju) wartoci cakowite

nieujemne lub wartoci logiczne.

nadanie wartoci pocztkowej zmiennej cakowitej (semaforowej),

podnoszenie semafora

opuszczanie semafora

Wszystkie operacje semafora s atomowe, co oznacza, i nie mog by

wykonywane w tym samym czasie przez wicej, ni jeden proces.


Programowanie wsp bie ne i rozproszone

Oznaczenie operacji:

- Nadanie wartoci pocztkowej(s): sem s=1 //{0,1}

- Czekaj(s) : wait (s), P(s)

- Sygnalizuj(s) : signal(s), V(s)

Operacja Czekaj(s) (zwana rwnie z ang. Wait(s)) okrelona jest nastpujco:

Znaczenie operacji zmniejsz s okrelone jest w zalenoci od rodzaju semafora.


Programowanie wsp bie ne i rozproszone

Operacja Sygnalizuj(s): (Signal(s)):

  • jeeli istniej procesy zawieszone przez semafor (na skutek wykonania operacji Czekaj(s)), to wznw jeden z nich

  • w przeciwnym przypadku zwiksz warto s.

    Definicja nie okrela, ktry proces zostanie wznowiony. Znaczenie operacji zwiksz

    s okrelone jest w zalenoci od rodzaju semafora.


Og lny schemat dzia ania semafora

Istniej procesy zawieszone

przez semafor

S po zwikszeniu przekraczaoby

maksymaln dopuszczaln

warto

Wznw jeden z

zawieszonych

procesw

Wygeneruj bd

Zwiksz S

Oglny schemat dziaania semafora


Programowanie wsp bie ne i rozproszone

Semafor binarny

Przyjmuje tylko wartoci logiczne: prawda oraz fasz.

  • Sygnalizuj(s):

  • jeeli istniej procesy zawieszone przez semafor, to wznw jeden z nich, w przeciwnym przypadku nadaj s warto prawda


Programowanie wsp bie ne i rozproszone

Semafor oglny

Warto pocztkowa jest liczb nieujemn. Operacje elementarne przyjmuj posta:

Sygnalizuj(S):

  • jeeli istniej procesy zawieszone przez semafor, to wznw jeden z nich, w przeciwnym przypadku zwiksz warto s o jeden (s = s + 1)

    Sposoby realizacji wznawiania procesw zawieszonych na semaforze.


Programowanie wsp bie ne i rozproszone

Semafory ze zbiorem oczekujcych

Procesy zawieszone umieszczane s w zbiorze zawieszonych procesw. Wznowienie procesu nie okrela, ktry z nich ma kontynuowa dziaanie. Semafor tego typu atwo moe wic doprowadzi do zagodzenia przy obecnoci co najmniej trzech procesw. Zalet tego semafora jest prostota realizacji i nieznacznie wiksza szybko w porwnaniu z semaforem z kolejk oczekujcych.

Semafory z kolejk oczekujcych

Procesy zawieszone umieszczane s w kolejce FIFO. O kolejnoci wznawiania decyduje pozycja w tej kolejce najpniej zawieszony proces zostaje wznowiony. Zalet tego semafora jest brak moliwoci zagodzenia jakiegokolwiek procesu.

Zastosowanie semafora

Semafor znajduje zastosowanie do wzajemnego wykluczania procesw przy prbie wejcia do sekcji krytycznej, umoliwiajc jej wykonanie w danym czasie tylko okrelonej (przez warto pocztkow) liczbie procesw. Jest on rwnie wykorzystywany w celu wymiany informacji midzy procesami.


Zasad dzia ania operacji semaforowych mo na przedstawi na rysunku

P(S)

V(S)

S=0

Kto czeka

S:=S-1

S:=S-1

Zasad dziaania operacji semaforowych mona przedstawi na rysunku:

Proces A

Proces B

Zasada dziaania operacji semaforowych


Strukturalne mechanizmy synchronizacji

Strukturalne mechanizmy synchronizacji

Rejony krytyczne

Rejony krytyczne (ang. critical regions) zaproponowaliniezalenie Hoare i Brinch Hansen. Stanowi one czyste przemodelowanie operacji semaforowych Dijkstry P i V w kierunku strukturalizacji.

Punktem wyjcia do ustalenia odpowiedniej notacji jzykowej byo stworzenie instrukcji, ktr obejmowaaby sekcj krytyczn, zapewniajc dla niej wykluczenie wzajemne. Sekcja krytyczna najczciej suy do wykonania operacji na pewnym zasobie, a mwic jzykiem programowania" na pewnej zmiennej okrelonego typu. Co wicej zazwyczaj jest niedopuszczalne operowanie na tym obiekcie poza sekcj krytyczn.


Programowanie wsp bie ne i rozproszone

Struktura rejonu krytycznego

Obiekt typu T, na ktrym s wykonywane operacje wewntrz sekcji krytycznej,

nazywamy zmienn dzielon (ang. shared variable). Jej deklaracja w postaci

var v: sharedT;

oznacza zadeklarowanie zmiennej v typu T, ktra moe by uywana wycznie w

okrelonych sekcjach krytycznych. Instrukcja strukturalna, tworzca sekcj

krytyczn dla instrukcji I1,...,IN zwizuje j jednoczenie ze zmienn dzielon v

region v doI1;...; IN end

Instrukcj t nazywamy instrukcj rejonu krytycznego (lub krcej rejonem

krytycznym).


Programowanie wsp bie ne i rozproszone

Zaoenia dotyczce rejonu krytycznego s okrelone trzema

warunkami:

(1) Wykonywanie instrukcji wewntrz rejonw zwizanych z t sam zmienn dzielon w tym samym czasie przez dwa lub wicej procesw jest wykluczajce si (inaczej mwic wewntrz zwizanych ze sob rejonw krytycznych moe pracowa co najwyej jeden proces).

(2) Proces moe przebywa wewntrz rejonu krytycznego w skoczonym czasie, czyli instrukcje operujce na zmiennej dzielonej musz mie moliwo koczenia si.

(3) Wejcie do rejonu krytycznego musi by umoliwione dowolnemu procesowi w skoczonym czasie.

Warto zauway, e powysza notacja pozwala kompilatorowi jzyka, w ktrym zostaaby zastosowana, na sprawdzenie, czy odwoania do zmiennych dzielonych s dokonywane wycznie z instrukcji zawartych wewntrz odpowiednich rejonw krytycznych.


Programowanie wsp bie ne i rozproszone

Rejony krytyczne mog by wewntrz siebie zagbiane na podobnych zasadach

jak instrukcje cyklu w wikszoci jzykw programowania.

var z1, z2; shared resource;

procedure p;

begin

region z1 do

. . .

region z2 do

. . .

end; (*z2*)

end (*z1*)

end; (*p*)


Zastosowanie rejon w krytycznych

Zastosowanie rejonw krytycznych

Przeznaczeniem rejonw krytycznych jest zapewnienie wykluczenia wzajemnego

procesw, ktre korzystaj z tego samego zasobu.

PRZYKADSynchronizacja dostpu do zasobw

Naley zsynchronizowa dostp N procesw wspbienychdo zasobu R.

var R: sharedresource;

procedure pp;

begin

cycle

przetwarzanie-A;

region R do

request R;

hold(t);

release R

end;

przetwarzanie-B

end

end;

process ( 1..N) pp end.


Programowanie wsp bie ne i rozproszone

PRZYKAD Producentkonsument

Dla uproszczenia przyjmiemy, e operowanie na buforze dla wszystkich procesw

producenta i konsumenta powinno odbywasi wewntrz sekcji krytycznej.

const N = MAX

var R shared record

buf: array [1..N]of buffer;

lp, lk: integer :=1,1

end;

peny, pusty: semaphore:=0, N;

procedure producent;

begin

cycle

(* przygotowywanie wiadomoci*)

hold(t1);

(*wysaniewiadomoci*)

P (pusty);


Programowanie wsp bie ne i rozproszone

region R do

fill buf [lp];

hold(t2);

release buf [Ip]:

lp := lp modN+1

end;

V (peny)

end

end; (*producent*)

procedure konsument;

begin

cycle

(* odebranie wiadomoci*)

P (peny);

region R do

quit buf [lk];

hold(t3);

release buf [lk];

lk := lk mod N+1

end;

V (pusty);

(*przetwarzanie *)

hold(t4)

end

end; (*konsument*)

process (1 .. P)producent;

(1 .. K)konsument

end.


Warunkowe rejony krytyczne

Warunkowe rejony krytyczne

Niekompletno rejonw krytycznych, polegajca na braku prostej komunikacji midzy procesami, spowodowaa rozwj prac nad ich uzupenieniem o odpowiednie mechanizmy komunikacyjne. Pierwsze postulaty rozszerze zaproponowa Hoare , natomiast szerokiego ich rozwinicia i wzbogacenia o nowe elementy dokona Brinch Hansen. Powstae w ten sposb konstrukcje, jakkolwiek majce czsto rny zapis, otrzymay nazw warunkowych rejonw krytycznych (ang. conditional critical regions).


Struktura warunkowych rejon w krytycznych

Struktura warunkowych rejonw krytycznych

Oglna posta warunkowego rejonu krytycznego dopuszcza wystpienie midzy instrukcjami umieszczonymi wewntrz tego rejonu (dowoln liczb razy i w dowolnych miejscach) instrukcji synchronizacji await

var R:shared T;

. . .

region R do

I1; I2;...; await W1;

. . .

Ii, Ii+1;...; await Wj;

. . .

IN-1; IN

end


Programowanie wsp bie ne i rozproszone

Dziaanie instrukcji await, gdzie Wj jest wyraeniem logicznym

(najczciej zalenym od zmiennej R), polega na tym, e w czasie jej

wykonywania jest sprawdzany warunek Wj. Jeeli jest on speniony, to

proces przechodzi do wykonania nastpnej instrukcji, natomiast w

przypadku przeciwnym zostaje zawieszony do czasu spenienia warunku z jednoczesnym zwolnieniem dostpu do sekcji krytycznej.


Programowanie wsp bie ne i rozproszone

Przyjmujc zasad, e rejony krytyczne powinny by krtkie, suy sprawdzaniu i zmienianiu warunkw, natomiast inne operacje (Jak np. wpisywanie do buforu) powinny odbywa si poza nimi (oczywicie jednak z zapewnieniem wszelkiej ochrony). Stosujc si do tych postulatw przed operacjami zwizanymi z buforem, naley za pomoc warunkowego rejonu krytycznego sprawdzi, czy proces moe wykona dane operacje i czy nie ma adnego innego procesu ju je wykonujcego.Po zakoczeniu dziaania na buforze Procesy dokonuj wewntrz rejonu krytycznego zmiany odpowiednich warunkw.


Programowanie wsp bie ne i rozproszone

constN = MAX;

var R: shared record

np: integer := 0; (*liczba producentw*)

nk: integer := 0; (*liczba konsumentw*)

m: integer := 0; (*liczba porcji nieodebranych*)

end;

buf: array [1..N] ofbuffer;

lp, lk: integer := 1,1;

procedure producent;

begin

cycle

( * przygotowanie wiadomoci *)

hold(t1);

(*wysanie wiadomoci*)

region R do

await np = 0 and m <N;

np := np +1

end;


Programowanie wsp bie ne i rozproszone

fill buf [lp];

hold(t2);

release buf[lp];

lp:=lp mod N+1;

region R do

np := np -l;

m := m+1

end

end

end; (*producent*)

procedure konsument;

begin

cycle

(* odebranie wiadomoci*)

region R do

await nk = 0 and m > 0;

nk:= nk+1

end;


Programowanie wsp bie ne i rozproszone

quit buf[lk];

hold(t3);

release buf [lk];

lk:= lk mod N+1;

region R do

nk := nk l;

m := m1

end;

(* przetwarzanie *)

hold{t4)

end

end; (*konsument*)

process (1..P) producent;

(1..K) konsument

end.


Programowanie wsp bie ne i rozproszone

PRZYKADCzytajcy-piszcy

W przykadzie podamy rozwizanie drugiej wersji tego problemu. Opiera si ona bdzie na sprawdzeniu relacji midzy liczb procesw czytajcych, ktre wykonuj operacj czytania (lc) i liczb procesw piszcych, ktre chciayby pisa (lp). Warto zauway, jak przez zmian kolejnoci operacji wewntrz rejonu krytycznego mona pewnej grupie procesw zapewni priorytet w stosunku do procesw drugiej grupy.

varR :shared record

lc, lp: integer := 0,0

end;

Z:resource;

W: shared boolean := true;


Programowanie wsp bie ne i rozproszone

procedure czytanie;

begin

cycle

regionRdo

await lp = 0;

lc:=lc+1

end;

request Z;

(* czytanie*)

release Z;

region R do

lc:=lc-1

end

end

end; (*czytanie*)


Programowanie wsp bie ne i rozproszone

procedure pisanie;

begin

cycle

region R do

lp:=lp+1;

await lc = 0

end;

region Wdo

request Z;

(*pisanie*)

release Z

end;

region R do

lp:=lp-1

end

end

end;(*pisanie*)

process (1.. N) czytanie;

(1..M) pisanie

end.

atwo zauway, e rejon krytyczny zwizanyze zmienn dzielon W suy do wykluczenia midzy sob procesw piszcych w czasie pisania.


Implementacja warunkowych rejon w krytycznych

Implementacja warunkowych rejonw krytycznych

Warunkowe rejony krytyczne s naturalnym mechanizmem komunikacji midzy procesami, dostosowanym do potrzeb jzykw wysokiego poziomu. Pozwalaj one na jawne przedstawienie faktu oczekiwania przez dany proces na spenienie pewnego warunku dotyczcego zmiennej dzielonej. Cen za niewtpliwe zalety tej metody synchronizacji s znaczne utrudnienia realizacyjne.

Pierwsz propozycj implementacji warunkowych rejonw krytycznych poda Brinch Hansen . Proces wywoujc instrukcj rejonu krytycznego w zalenoci od tego, czy sekcja objta tym rejonem jest wolna czy nie, przechodzi do wykonania instrukcji rejonu lub jest zawieszany w kolejce wejciowej zwizanej z dan zmienn dzielon (RYS). Wykonujc instrukcj await przyniespenionym warunku, proces opuszcza czasowo sekcj krytyczn i zostaje umieszczony w kolejce warunku QE, rwnie zwizanej z dan zmienn dzielon. W tym czasie inne procesy z kolejki QV mog po kolei wchodzi do sekcji krytycznej, natomiast procesy z kolejki QE powinny okresowo sprawdza, czy nie zosta speniony warunek zawieszenia. W chwili, gdy sekcja krytyczna zostaje zwolniona, a obie kolejki s niepuste, wystpuje konflikt dwch procesw, ktre powinny wej do sekcji krytycznej. W takiej sytuacji musi by podjta jednoznaczna decyzja i jednoczenie programista musi by jej wiadomy. Propozycj Brinch Hansena jest, aby wyszy priorytet nada procesom z kolejki warunku.


Programowanie wsp bie ne i rozproszone

a)

b)

QV

QV

...

...

QE

...

SEKCJA

KRYTYCZNA

SEKCJA

KRYTYCZNA

await

RYS. Schemat wykonywania rejonu krytycznego (a) i warunkowego rejonu

krytycznego (b)


Programowanie wsp bie ne i rozproszone

Z powyszego schematycznego algorytmu implementacji wida od razu kolejn jego wad. Przy kadorazowym zwolnieniu sekcji krytycznej naley sprawdza, czy nie zosta speniony warunek dla ktregokolwiek z procesw oczekujcych w kolejce warunku, chocia do rejonu krytycznego bdzie mg wej tylko jeden proces, a pozostae ponownie zostan zawieszone. Jest to oczywicie wysoce nieefektywne, zwaszcza w przypadku, gdy wiele procesw moe by zawieszonych w tym samym czasie.


Programowanie wsp bie ne i rozproszone

PRZYKAD Implementacja warunkowych rejonw krytycznych

Celem naszym jest pokazanie realizacji rejonw krytycznych w postaci:

varv: sharedT;

. . .

regionv do ...await W ... end;

W czasie translacji instrukcji rejonw krytycznych dokonywane jest ich przeksztacenie w instrukcje jzyka sekwencyjnego, uzupenione procedurami realizujcymi algorytm dziaania rejonw. Przeksztacenie to przedstawimy kolejno dla poszczeglnych elementw struktury.

(1) Uzupenienie deklaracji zmiennej dzielonej deklaracj:

varvv: record

v: T;

r: rejon

end;

gdzie pole r typu rejon jest przeznaczone dla potrzeb implementacji.


Programowanie wsp bie ne i rozproszone

(2) Zastpienie instrukcji wejcia do rejonu (region...) instrukcj:

withvv.v do wejscie(vv.r);

(3) Zastpienie instrukcji await instrukcj:

while not W dooczekiwanie(vv.r) end;

(4) Poprzedzenie instrukcji wyjcia z rejonu (end) instrukcj:

wyjcie (vv.r) end (* zamyka instrukcj with vv ... *);

W pierwszej wersji implementacji procedur wykorzystamy znane ju operacje kolejkach i procesach. Struktura danych typu rejon ma posta:

type rejon = record

stan:Boolean:=false; (*dostpno rejonu*)

Qv, Qe: queue := nil, nil; (*kolejka wejciowa i warunku*)

lqe:integer:= 0; (*licznik procesw zawieszonych w Qe*)

pr: proc

end;


Monitory

Monitory

Monitor jest skadnikiem programu, zoonym z deklaracji zmiennych wsplnych, dzielonych przez kooperujce ze sob procesy, oraz ze zbioru wszystkich procedur dziaajcych na tych zmiennych. Zazwyczaj monitor deklaruje si jako zmienn specjalnego typu monitorowego. Schematyczna posta deklaracji monitora wyglda nastpujco:

var identyfikator-monitora: monitor

deklaracje-zmiennych;

procedury;

lista-udostpnionych-na-zewntrz-nazw-procedur

end.

Na zmiennych monitora mog by wykonywane operacje wycznie w procedurach monitora, przy czym niektre z tych ostatnich (lub wszystkie) mog by wywoane ze rodowiska zewntrznego (np. z procesw lub innych monitorw). Wywoujc procedur monitora, naley poda jego identyfikator, nazw procedury i list jej parametrw aktualnych.

identyfikator-monitora.nazwa-procedury(parametry aktualne)


Programowanie wsp bie ne i rozproszone

var M: monitor

var R:resource;

procedure A;

begin

. . .

(* operacja A na zasobie R*)

. . .

end; (*A*)

procedure Z;

begin

. . .

(* operacja Z na zasobie R*)

. . .

end;(*Z*)

export A,..., Z

end;(*M*)

. . .

(*proces 1*)

. . .

M.A;

. . .

(*proces N*)

. . .

M.Z;

. . .


Programowanie wsp bie ne i rozproszone

Z kolejk s zwizane jeszcze dwie pomocnicze operacje:

clear(kol) procedura przywracajca pierwotny stan kolejki pusty

(przypowstawaniu monitora kolejki s zawsze puste),

empty(kol) funkcja sprawdzajca czy kolejka jest

pusta (warto true), czy nie (warto false).

Zastosowanie monitorw

PRZYKAD Producent-konsument

var bufor: monitor

const N = MAX;

var buf: array [1..N]of buffer;

peny, pusty: queue;

lp, lk: integer := 1, 1;

m: integer := 0; (*liczba nieodebranych zapenionych pl buforowych*)


Programowanie wsp bie ne i rozproszone

procedure wpisz;

begin

if m = N then delay (peny) end;

fill buf[lp];

hold(t2);

release buf[lp];

lp := lp mod N+1;

m := m+1;

continue (pusty)

end; (*wpisz*)

procedure pobierz;

begin

if m = 0 then delay (pusty) end;

quit buf[lk];

hold(t3);

release buf [lk];

lk := lk mod N+1;

m := m1;

continue(peny)

end; (*pobierz*)


Programowanie wsp bie ne i rozproszone

export wpisz, pobierz

end; (*bufor*)

procedure producent;

begin

cycle

(* przygotowaniewiadomoci*)

hold(t1)

(* wysaniewiadomoci*)

bufor.wpisz

end

end; (*producent*)

procedure konsument

begin

cycle

(* odebranie wiadomoci *)

bufor. pobierz;

(*przetwarzanie*)

hold(t4)

end

end; (*konsument*)

process (1 . .P) producent;

(1 . .K) konsument

end.


Wyra enia cie kowe

Wyraenia ciekowe

Wyraenia ciekowe (ang. path expressions), bdce koncepcyjnie odmiennym mechanizmem synchronizacji procesw wspbienych, zostay wprowadzoneprzez Campbella i Habermanna. Zaproponowana przez nich metoda opisuje synchronizacj na poziomie procedur. Oznacza to, e kada akcja, ktra ma podlega synchronizacji, musi wystpi w programie w postaci oddzielnej procedury.

Wzajemne powizania midzy tymi procedurami s opisywane przy uyciu specjalnych operatorw, ustalajc warunki, jakie musz by spenione, aby po wywoaniu dana procedura moga by wykonana.

Zapis wyrae ciekowych

Podstawowymi powizaniami wystpujcymi w wyraeniach ciekowych s sekwencja i selekcja akcji (przez termin akcja bdziemy w tym rozdziale rozumieli wykonanie przez proces procedury, ktre, zgodnie z uprzedni definicj pojcia akcji, bdzie traktowane jako czynno jednostkowa, niepodzielna).


Programowanie wsp bie ne i rozproszone

Omwione podstawowe elementy wyrae ciekowych mog by czone, tworzc bardziej skomplikowane cieki. Na przykad cieka

p;(q, r);s

synchronizuje cztery akcje. Pierwsz z nich musi by wykonanie procedury p, nastpnie jednej z procedur q lub r , po czym kolejn akcj moe by tylko wykonanie procedury s. A wic powysza cieka okrela dwie moliwe serie wykona wymienionych procedur: p-q-s lub p-r-s (RYS.). W podanym przykadzie zostayuyte dodatkowe nawiasy okrge; ich znaczenie jest takie samo, jak w wyraeniach arytmetycznych. Pozwalaj one na sprecyzowanie kolejnoci analizowania operatorw w ramach cieki (w pracy Campbella i Habermanna zaoono jednakowy priorytet wszystkich operatorw wystpujcych w wyraeniach ciekowych).


Programowanie wsp bie ne i rozproszone

q

s

p

r

RYS. Graf pierwszestwa dla cieki p; (q, r); s


Programowanie wsp bie ne i rozproszone

Kolejnym elementem sterowania wykonaniem procedur jest ich rwnoczesno. Pozwala ona na rwnolege wykonywanie danej procedury lub fragmentu wyraenia ciekowego przez kilka procesw. Operatorami rwnoczesnoci s nawiasy ktowe <i> (oryginalnie zaproponowano nawiasy {i}, ktre jednak zazwyczaj nie wystpuj wrd znakw w urzdzeniach peryferyjnych). Przykadem zastosowania rwnoczesnoci moe by cieka

<q;s>

Przykadem bardziej skomplikowanej cieki moe by wyraenie

path n,(p; <q ; s>) end


Zastosowanie wyra e cie kowych

Zastosowanie wyrae ciekowych

Wyraenia ciekowe s jasn i zwiz metod opisu synchronizacji dla szerokiej klasy problemw. Zasady stosowania wyrae ciekowych pokaemy na podstawie kilku wersji przykadu wsppracy procesw czytajcych i piszcych.

PRZYKAD Czytajcy-piszcy

Najprostsz synchronizacj obu grup procesw mona przedstawi nastpujco:

var

R: resource;

procedureczytanie;

begin

reguest R;

(* czy tanie*)

release R

end;(*czytanie*)


Programowanie wsp bie ne i rozproszone

procedurepisanie;

begin

request R;

(*pisanie*)

release R

end;(*pisanie*)

procedureczyt;

begin

cycle

czytanie

end

end;(*czyt*)


Programowanie wsp bie ne i rozproszone

procedurepisz;

begin

cycle

pisanie

end

end;(*pisz*)

path czytanie, pisanie end;

process(1..N) czyt;

(1..M) pisz

end.


Programowanie wsp bie ne i rozproszone

Zastosowane wyraenie ciekowe synchronizuje wykonywanie procedur czytanie i pisanie w taki sposb, e w kadej chwili moe by realizowana tylko jedna z nich przez dokadnie jeden proces. Wyraenie to nie okrela rwnie kolejnoci wykonywania obu tych procedur.

Wymiana uytej ciekiprzez

path<czytanie>, pisanie end;

powoduje, e procedura czytanie moe by realizowana rwnoczenie przez kilka procesw. Jeeli jaki proces rozpocz czytanie, to dostp do tej procedury bdzie natychmiastowy dla innych procesw tale dugo jak dugo procedura ta bdzie wykonywana przez co najmniej jeden proces (priorytet czytania jest wyszy ni pisania).


Programowanie wsp bie ne i rozproszone

W celu wyrwnania priorytetw obu operacji czytania i pisania naley poprzedni ciek zastpi wyraeniem

path <czytanie>, <pisanie> end;

pathpisanie end

Pierwsza cieka zapewnia rwno priorytetwobu operacji, natomiast druga wykluczenie wzajemne wykonania procedury pisanie. Analiza tego rozwizania pokazuje, e jego wad jest blokowanie dostpu do zasobu jeeli jaki proces zacznie czyta (lub pisa), to ze wzgldu na rwnoczesno przez pewien czas moe by blokowany dostp dla zapisu (odczytu).

Zlikwidowanie blokowania jest moliwe przez dodanie do poprzedniego rozwizania procedury pustej zgoszenie-czytania

procedure zgoszenie-czytania,

begin end;


Programowanie wsp bie ne i rozproszone

zmienienie procedury czyt;

procedureczyt;

begin

cycle

zgloszenie-czytania;

czytanie

end

end; (*czytanie*)

oraz wymian wyraenia ciekowego na

pathzgoszenie-czytania, pisanie end;

path<zgoszenie-czytania; czytanie>, pisanie end;


Programowanie wsp bie ne i rozproszone

Proces czytajcy musi obecnie wykona sekwencj procedur zgoszenie-czytania i czytanie. Pierwsza z nich jest procedur pomocnicz, ktrej jedyn funkcj jest zapewnienie pojedynczego przyjmowania da czytania lub pisania w czasie wykonywania tych operacji. Tak wic pierwsza cieka powoduje, e szanse startu operacji czytania i pisania s rwne. Jeeli zostaa wykonana procedura zgoszenie-czytania, to druga cieka powoduje, e pisanie bdzie mogo by realizowane dopiero po wykonaniu procedury czytanie. Rwnoczesno w drugiej ciece pozwala na rwnolege czytanie przez wiele procesw czytajcych pod warunkiem, e nie nadeszy adne dania zapisu informacji.


Programowanie wsp bie ne i rozproszone

Powysze rozwizanie odpowiadao pierwszemu problemowi piszcych i czytajcych. Rozwizanie drugiego problemu, w ktrym procesy piszce maj wyszy priorytet, wymaga pewnej modyfikacji wyraenia ciekowego do postaci

pathzgoszenie-czytania end;

pathzgoszenie-czytania, <pisanie> end;

path<zgoszenie-czytania; czytanie>, pisanie end;


Mechanizmy komunikacji i synchronizacji w systemie unix

Mechanizmy komunikacji i synchronizacji w systemie Unix

Wspbieno procesw w systemie Unix

Unix jest systemem wielozadaniowym i wielodostpnym, co oznacza, e w jednym momencie z jednego komputera moe korzysta wielu uytkownikw, oraz e kady uytkownik moe uruchomi w danej chwili wicej ni jeden proces. Proces jest torodowisko wykonania programu, ktre skada si z segmentu instrukcji, segmentu danych uytkowych oraz segmentu danych systemowych, podczas gdy program jest to plik zawierajcy instrukcje i dane suce do inicjacji segmentu instrukcji oraz segmentu danych uytkowych procesu.

Pojciejednoczesnego (wspbienego) wykonywania wielu procesw na maszynie jednoprocesorowej jest w znacznym stopniu umowne i oznacza ono podzia czasu procesora pomidzy wykonywane procesy.


Programowanie wsp bie ne i rozproszone

Jednym z dobrodziejstw systemu operacyjnego Unix jest moliwo rozwidlania procesw. Rozwidlajcy proces zwany procesem macierzystym tworzyprocesy potomne, podczas gdy kady z procesw potomnych ma moliwo tworzenia nastpnych procesw. Pozwala to nam na wspbiene wykonywanie np. procedur obliczeniowych, co zwaszcza przy maszynach wieloprocesorowych lub podziale obowizkw na kilka komputerw korzystnie moe wpyn na czas trwania oblicze.

Mwic o rozwidlaniu procesw nie mona nie wspomnie o metodach komunikacji i synchronizacji midzyprocesowej. O tym jak wane jest to zagadnienie niech wiadczy poniszy przykad. Niech zagadnieniem procesu P1 bdzie odjcie z zasobu dzielonego wartoci 5 (student podejmuje pienidze na ksiki z konta bankowego). W tym celu odczytuje aktualn warto konta np. 5,00 , odejmuje od niej warto 5 i otrzyman rnic (0,00) wanie chce zapisa jako nowy stan kta. Lecz w tym momencie proces P2 (dzia ds. stypendiw naukowych ) przelewa na konto stypendium w wysokoci 20. W tym celu odczytuje warto 5,00 (cigle jest tam niezmieniona warto) i dodaje do niej 20. Cay przelew trwa uamek sekundy , nowa warto to 25,00. Proces P1 dokacza operacj zapisu nowej wartoci (tej pocztkowej pomniejszonej o 5) i stan kta wynosi 0,00. W wyniku tych operacji konto studenta posiada nieprawidow warto.


Programowanie wsp bie ne i rozproszone

Jednak system operacyjny Unix dostarcza nam ca gam przernych mechanizmw komunikacji i synchronizacji midzyprocesowej. W systemach unixowych, ktre poprzedzay System III, procesy mogy komunikowa si midzy sob za pomoc dzielonych wskanikw do plikw, sygnaw, ledzenia procesw, plikw oraz czy komunikacyjnych potokw. W Systemie III zastosowanokolejki proste FIFO (cza nazwane). W Systemie V pojawiy si semafory, komunikaty oraz pami dzielona, potem zdalne wywoanie procedur w systemie Unix BSD.

Dzielone wskaniki do pliku s rzadko uywane do komunikacji. Teoretycznie, jeden proces moe ustawi wskanik do pliku (na pewne fikcyjne miejsce na pliku), a drugi moe sprawdzi, co ten wskanik wskazuje. To miejsce w pliku stanowioby obszar komunikacji.

Sygnays uywane, gdy proces potrzebuje tylko da znak innemu procesowi. Za ich pomoc nie mona jednak przekaza tylu informacji, aby mogy by one przydatne w wikszoci zastosowa. Wad sygnaw jest to, e powoduje on przerwanie wykonywania procesu, do ktrego jest on skierowany. Sygnay su gwnie do koczenia wykonywania procesw.


Programowanie wsp bie ne i rozproszone

ledzenie procesw suy do kontrolowania przez proces swoich potomkw. Proces macierzysty moe czyta oraz pisa w obszarze danych swego potomka, co pozwala im na wspln komunikacj.

Pliki s najbardziej powszechn metod komunikacji midzyprocesowej, nie s jednak odpowiednie dla procesw wykonywanych wspbienie.

Mechanizm czy komunikacyjnych skutecznie rozwizuje problemy synchronizacji midzy procesami. Pomimo, e cze, podobnie jak plik, ma swj i-ty wze to dowizania do niego nie istniej. Jeeli proces czytajcy wyprzedzi proces piszcy, to musi on czeka na nastpne dane. Jeeli proces piszcy wyprzedzi proces czytajcy, to zostanie on wstrzymany, a dogoniony zostanie przez proces czytajcy.

Kolejka FIFO jest plikiem specjalnym, ktry moe zosta otwarty do czytania lub pisania przez kady proces majcy odpowiednie uprawnienia. Zagwarantowana jest rwnie niepodzielno wykonywanych operacji. Bajty danych zapisywane lub odczytywane podczas jednego wywoania funkcji systemowej tworz zawsze spjny blok.

Komunikat jest to niewielka liczba danych, ktr mona przesa do kolejki komunikatw. Komunikaty mog by rnych typw. Proces majcy odpowiednie uprawnienia, moe pobiera komunikaty z kolejki.


Programowanie wsp bie ne i rozproszone

Przy rozwizywaniu problemw programowania wspbienego w tej pracy

wykorzystane zostay nastpujce mechanizmy:

- mechanizmy IPC Systemu V :

- semafory,

- pami dzielona,

- zdalne wywoanie procedur (RPC- Remote Procedur Cali, wersja Sun RPC).

Aby rozwidli proces w systemie Unix naley w kodzie programu

wywoa funkcj

int fork()


Programowanie wsp bie ne i rozproszone

Funkcja fork() tworzy kopi procesu, ktry t funkcj wywoa. Proces wywoujcy funkcj fork() nazywa si procesem macierzystym lub przodkiem (rodzicem) nowego procesu, nowy za proces - procesem potomnym lub potomkiem (dzieckiem). Funkcja systemowa fork() wywoana raz (przez proces macierzysty) przekazuje warto dwukrotnie (przodkowi i potomkowi). Te wartoci rni si tym, e w przypadku procesu macierzystego jest to numer identyfikacyjny nowo utworzonego procesu potomnego, a wartoci przekazywan procesowi potomnemu jest zero. Gdy funkcji for k () nie uda si wykona pomylnie, wwczas jej wynikiem jest -1. Jeli proces potomny chce uzyska numer identyfikacyjny swojego przodka, to moe wywoa funkcj systemow getppid () .


Programowanie wsp bie ne i rozproszone

Przykad:

main ()

{

int pid_potomka;

if ((pid_potomka=fork())==-1)

perror(Bd fork" ) ;

else

if(pid_potomka==0)

/ /proces potomny

printf(Potomek: pid potomka=%d, pid przodka=%d\n",getpid(),

getppid());

else

/ /proces macierzysty

printf(Przodek:pid potomka=%d, pid przodka=%d\n",pid potomka,

getpid());


Programowanie wsp bie ne i rozproszone

Aby zakoczy wykonywanie procesu naley wywoa funkcj

systemow exit()

void exit(int stan)

Argument stan jest wartoci stanu kocowego procesu wywoujcego funkcj exit().

Powrt z tej funkcji nigdy nie nastpuje. Przyjmuje si, e zerowy stan oznaczapoprawne zakoczenie procesu, niezerowy za (najczciej -1) oznacza wystpienie bdu.

Proces macierzysty procesu koczcego dziaanie otrzymuje jego kod

stanu przy pomocy funkcji systemowej wait().

int wait(int *stan)


Programowanie wsp bie ne i rozproszone

Argument *stan jest miejscem, pod ktre wstawiony zostanie kod wyjcia procesu potomnego (argument funkcji exit () ). Funkcja zwraca identyfikator procesu lub -1 w przypadku bdu.

Jeeli istniej procesy potomne, to funkcja systemowa wait() czeka na zakoczenie jednego z nich. Nie mona zleci czekania na okrelony proces potomny. Potomek, ktry pierwszy zakoczy dziaanie, powoduje odwieszenie" rodzica, ktry wywoa wait().Jeli wskanik stan ma warto NULL, stan zakoczenia procesu potomnego nie jest nigdzie zapamitany.

Semafory

W systemie UNIX operacje semaforowe (chocia w dalszym cigu najwaniejsze to nadanie wartoci pocztkowej, zwikszenie i zmniejszenie) nie wygldajju tak prosto.

Operacji P(S) (opuszczenie) odpowiada wywoanie funkcji semop() z nastpujcymi argumentami:

struct sembuf sem_lock={0,-1,0};

semop(sid,&sem_lock,1);


Programowanie wsp bie ne i rozproszone

Aby uywa semaforw w programach pisanych w jzyku C naley do ich treci doczy za pomoc dyrektywy #include nastpujce pliki:

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

Oto funkcja zablokuj() odpowiadajca operacji P(S). Argument sid jest numerem identyfikacyjnym zestawu semaforw zwrconym przez funkcj semget(), za numer_semafora jest kolejnym numerem semafora w zestawie liczc od zera.


Programowanie wsp bie ne i rozproszone

void zablokuj (int sid, int numer_semafora)

{

int wartosc;

struct sembuf sem_lock={numer_semafora,-1,0};

wartosc=semctl(sid,numer_semafora,GETVAL,0);

if(!wartosc)

{

fprintf(stderr,"PID:%d-Proces wstrzymany na semaforze !\n",getpid());

fflush(stdout);

}

i f ( ( semop (sid, &sem_lock, 1) ) ==-1)

{

fprintf (stderr, "PID: %d-Blokowanie nie powiodlo sie!\n", getpid ());

f flush (stdout) ;

exit (EXIT_FAILURE) ;

}

else

printf ( "PID : %d-Semafor opuszczony do wartosci %d\n",

getpid ( ) , wartosc) ;

}


Programowanie wsp bie ne i rozproszone

Wywoaniewartosc=semctl (sid,numer_semafora,GETVAL, 0) nadajezmiennej warto aktualn warto semafora o numerze podanym jako drugi argument.

Natomiast operacji V(S) - podniesienie ,odpowiada wywoanie funkcji semop() znastpujcymi argumentami:

struct sembuf sem_lock={0,1,0};

semop(sid,&sem lock,1);

Oto funkcja odblokuj() odpowiadajca operacji V(S).


Programowanie wsp bie ne i rozproszone

void odblokuj (int sid, int numer_semafora)

{

struct sembuf sem_unlock={numer_semafora,1,0};

int wartosc;

i f ( (semop (sid, &sem_unlock, 1) ) ==-1)

{

fprintf (stderr, "PID: %d-0dblokowanie nie powiodlo sie! \n",getpid() ) ;

fflush (stdout) ;

exit (EXIT_FAILURE) ;

}

else

}

wartosc=getval (sid, numer_semafora) ;

printf ( "PID: %d-Semafor opuszczony do wartosci %d\n",

getpid(), wartosc );

}

}


Programowanie wsp bie ne i rozproszone

System UNIX daje nam moliwo wykonywania jednoczesnych operacji semaforowych, przy czym kada z nich moe by inna. Wykonanie operacji jednoczesnej wtedy koczy si sukcesem, gdy zostan wykonane wszystkie jej operacje skadowe.

Poniszy kod wykonuje zablokowanie semafora o numerze SEMAFOR_PELNE (element sem_num struktury sembuf ustawiony na -1) z jednoczesnym odblokowaniem semafora o numerze SEMAFOR_CK (element ten ustawiony na 1) z zestawu semaforw identyfikowanego przez zmiennsid (warto zwrcona przez semget()). Operacja ta bdzie blokujca, tzn. w przypadku zajtych zasobw proces bdzie tak dugo czeka z wywoaniem funkcji semop() dopki jaki inny proces ich nie zwolni (element sem_flg struktury sembuf nie jest ustawiony na IPC_NOWAIT).


Programowanie wsp bie ne i rozproszone

struct sembuf sops[2];

sops[0].sem_num=SEMAFOR_PELNE;

sops[0].sem_op=-1;

sops[0].sem_flg=0;

sops[1].sem_num=SEMAFOR_CK;

sops[1].sem_op=1;

sops[1].sem_flg=0;

if((semop(sid,sops,2)==-1)

{

fprintf(stderr,"PID:%d-Blokowanie nie powiodlo sie!\n",getpid());

exit(EXIT_FAILURE);

}


Funkcje systemowe unixa dotycz ce semafor w

Funkcje systemowe Unixa dotyczce semaforw:

1.

key_t ftok (char *cieka, char projekt)

Funkcja ftok () przeksztaca nazw cieki i identyfikator projektu na klucz, uywany w komunikacji midzyprocesowej. Klucze su do identyfikowania kolejek komunikatw, semaforw i pamici dzielonej. Typ danych key_t znajduje si w pliku <sys/types . h> .

Procesy, ktre korzystaj z jednej lub kilku metod komunikacji midzyprocesowej powinny mie uzgodnion nazw cieki oraz identyfikator projektu aby mie pewno, e procesy korzystaj z tego samego kanau komunikacyjnego /tego samego zestawu semaforw /tego samego obszaru pamici dzielonej.

Funkcja zwraca now warto klucza na podstawie kombinacji numeru i-wza i podrzdnego numeru urzdzenia z pliku podanego w argumencie cieka wraz z identyfikatorem projektu podanym jako drugi argument, lub -1 w przypadku bdu. Moe to nastpi np. gdy nazwa cieki okrelona argumentem cieka nie istnieje, lub gdy nie jest dostpna dla procesu wywoujcego funkcj ftok () .


Programowanie wsp bie ne i rozproszone

Przykad:

key_t klucz; klucz=ftok(".",'S')

printf("Warto klucza wygenerowanego przy pomocy ftok() :%x\n" ,klucz);

Efekt dziaania programu:

[[email protected] /root]# Warto klucza wygenerowanego przy pomocy ftok():53454d55

2.

int semget(key_t klucz, int nsems, int semflg)

Wywoanie systemowe semget () tworzy nowy zestaw semaforw lub

uzyskuje dostp do ju istniejcego. Zwraca identyfikator IPC zestawu semaforw

przypomylnym wykonaniu lub -1 w przypadku bdu.

Argument klucz jest wartoci zwrcon przez funkcj f tok () .

Argument nsems okrela liczb semaforw ,ktre zostan utworzone dla nowego

zestawu. W przypadku otwarcia ju istniejcego zestawu semaforw argument ten

jestignorowany, moemy nada temu argumentowi warto 0.


Programowanie wsp bie ne i rozproszone

Argument semflg mwi o tym, czy ma by utworzony nowy zestaw, czy te bdzieuywany ju istniejcy.

Gdy semflg jest rwne:

IPC_CREAT - zostanie utworzony nowy zestaw semaforw jeeli do tej pory nie istnia. Semget () zwraca identyfikator zestawu, ktry zosta utworzony lub identyfikator ju istniejcego, ktry posiada podan warto klucza. IPC_CREAT|IPC_EXCL - zostanie utworzony nowy zestaw semaforw lub semget () zwrci bd. Gwarantuje to, e nie bdzie uywany ju istniejcy zestaw.

Przykad:

semid=semget(klucz,l,0666|IPC_CREAT|IPC_EXCL)

Wynikiem takiego wywoania bdzie nadanie zmiennej semid numeru identyfikacyjnego nowoutworzonego zestawu semaforw zoonego z jednego semafora (drugi argument funkcji) lub -1 w przypadku, gdy zestaw semaforw o wartoci klucza rwnej parametrowi klucz ju istnieje. Nowoutworzony zestaw bdzie posiada prawa czytania i pisania dla waciciela, grupy oraz innych uytkownikw (prawa 0666).


Programowanie wsp bie ne i rozproszone

3.

int semop(int semid, struct sembuf *sops, unsigned nsops)

Wywoanie systemowe semop () umoliwia wykonywanie operacji na semaforach, zwraca 0 gdy sukces, -1 w przeciwnym wypadku.

Argument semid jest numerem identyfikacyjnym zestawu semaforw zwrconym przez semget().

Argument sops jest wskanikiem do tablicy operacji, ktre maj zosta przeprowadzone na grupie semaforw. Wskazuje to na tablic nastpujcych struktur zdefiniowanych w<sys/sem.h>:

struct sembuf

{

ushort sem_num; //numer semafora

short sem_op;//operacja(dodatnia, ujemna lub zero)short sem_flg;//flagi operacji

}


Programowanie wsp bie ne i rozproszone

Gdy sem_op jest ujemny jego warto zostaje odjta od wartoci semafora. Odpowiadato zajciu (zablokowaniu) zasobw. Jeeli nie ustawiono semjlg na IPC_NOWAITproces wywoujcy funkcj semop() pi do czasu a wymagana liczba bdziedostpna.

Gdy sem__op jest dodatni jego warto jest dodawana do semafora. Odpowiada tozwolnieniu (odblokowaniu) zasobw.

Gdy sem_op jest rwny zero to proces wywoujcy funkcj semop() bdzie czeka,a wartoci semafora bdzie zero.

Argument nsops jest liczb operacji w tablicy (liczba elementw tablicy struktur).


Programowanie wsp bie ne i rozproszone

Przykad:

void locksem(int sid)

{

struct sembuf sem_lock={0,-1, 0 };

if((semop(sid,&sem_lock,1))==-!)

{

fprintf(stderr,"PID:%d-Blokowanie semafora nie powiodo sie!\n", getpid());

fflush(stdout);

exit(EXIT FAILURE);

}

}

Funkcja ta powoduje opuszczenie (zablokowanie) semafora o numerze 0 z zestawu identyfikowanego przez sid (parametr zwrcony przez funkcj semget ())

4.

int semctl(int semid, int semnum, int cmd, imion semun arg)


Programowanie wsp bie ne i rozproszone

Wywoanie systemowe semctl() uywane jest do kontrolowania zestawu semaforw,

zwraca 0 gdy sukces, -1 w przeciwnym wypadku.

Argument semid jest numerem identyfikacyjnym zestawu semaforw zwrconym

przez semget().

Argument semnum jest numerem semafora w zestawie (liczonym od zera).

Argument cmd jest komend, ktra ma zosta wykonana:

IPC_STAT - pobiera struktur semid_ds i zachowuje j pod adresem buf

argumentu semun.

IPC_SET - ustawia warto ipc_perm struktury semid_ds. Warto pobiera z buf

unii semun.

IPC_RMID - usuwa zestaw z jdra.

GETALL - Uywany do pobierania wartoci wszystkich semaforw z zestawu.

Wartoci cakowite przechowywane s w tablicy unsigned short int wskazanejprzez

array - czonka unii semun.


Programowanie wsp bie ne i rozproszone

GETNCNT - zwraca ilo procesw oczekujcych na zasoby.

GETPID - zwraca PID procesu, ktry jako ostatni wywoa semop().

GETYAL - zwraca warto pojedynczego semafora z zestawu.

SETALL - ustawia wartoci wszystkich semaforw wartociami z tablicy arrayzawartej w unii semun.

SETY AL - ustawia warto jednego semafora z zestawu. Warto pobiera zvalzawartego w unii semun.

Argument arg jest elementem typu semun.Typ ten jest uni zadeklarowan w <sys/sem.h>

union semun {

int val;/* warto dla SETVAL */struct semid_ds *buf; /* bufor dla IPC_STAT i IPC_SET */unsigned short int *array; /* tablica dla GETALL i SETALL */struct seminfo * _buf; /* bufor dla IPC INFO */

}


Programowanie wsp bie ne i rozproszone

Przykad:

semval = semctl(sid,0,GETVAL, 0) ;

Funkcja zwrci warto semafora o numerze 0 z zestawu identyfikowanego przez sid (parametr zwrcony przez funkcj semget () ).

union semun unia_sem;

if (semctl(semid, 0,IPC_RMID,unia_sem)==-1)

fprintf(stderr, "Nie udao sie usunac semafora\n");

else

printf("Semafor zosta usuniety\n");

Funkcja semctl () w tym przypadku usunie zestaw semaforw identyfikowany przez semid (parametr zwrcony przez funkcj semget()), zoony z jednego semafora ( drugi argument).


Programowanie wsp bie ne i rozproszone

Dla kadego zestawu semaforw w systemie przydzielona jest jedna struktura semid_ds.

struct semid_ds {

struct ipc_perm sem_perm;

time_t sem_otime;

time_t sem_ctime;

struct sem *sem_base;

struct wait_queue *eventn;

struct wait_queue *eventz;

struct sem_undo *undo;

ushort sem nsems;

};

Najwaniejsze z elementw struktury to:

sem_perm -jest to struktura typu ipc_perm, ktry jest zdefiniowany w sys/ipc . h.

Przechowuje prawa dostpu, oraz informacje o twrcy i wacicielu zestawu;

sem_otime - czas ostatniej operacji semop ();

sem_ctime - czas ostatniej zmiany struktury. Np. zmiana praw;

sem nsems - liczba semaforw w zestawie.


Programowanie wsp bie ne i rozproszone

Aby pobra struktur semid_ds naley wywoa funkcj semctl() z parametrem IPC_STAT:

union semun semopts;

struct semid_ds moja_ds;

semopts.buf=&moja_ds; //pobranie aktualnej wartoci struktury

semctl(sid,0,IPC_STAT,semopts);

printf(Stare prawa dostpu :%o\n", semopts.guf->sem_perm.mode);

Aby zapisa zmiany w strukturze naley wywoa funkcj semctl() z parametrem IPC_SET:

sscanf(nowe_prawa,"%ho",&semopts.buf->sem_perm.mode); semctl(sid,O,IPC SET,semopts);


Programowanie wsp bie ne i rozproszone

Pami dzielona.

Pami dzielona jest najszybszym z mechanizmw IPC, poniewa nie istnieje aden porednik. Dane w niej umieszczone przez proces piszcy staj si natychmiast dostpne dla innych procesw. Pami dzielona pozwala na dostp do tej samej, logicznej pamici kilku nie spokrewnionym procesom. Jest bardzo wydajn metod przekazywania danych.

Pami dzielona jest specjalnym zakresem adresw, tworzonych prze IPC na uytek jednego procesu i pojawiajcym si w jego przestrzeni adresowej. Inne procesy mog nastpnie doczy segment pamici dzielonej do swojej przestrzeni adresowej. Segment pamici dzielonej moe zosta utworzony przez jeden proces, a korzysta z niego moe dowolna liczba procesw. Wszystkie procesy mog uywa pamici dzielonej tak samo, jakby zostaa ona przydzielona funkcj malloc(). Dokonanie zapisu do pamici dzielonej prze jeden z procesw spowoduje, e bd one widoczne rwnie dla innych procesw majcych do niej dostp. Moe istnie kilka segmentw pamici dzielonej, z ktrych kady jest dzielony przez okrelony podzbir aktywnych procesw. Kady proces moe mie dostp do kilku segmentw pamici dzielonej.


Programowanie wsp bie ne i rozproszone

Pami dzielona nie udostpnia adnych mechanizmw synchronizacji procesw. Nie ma moliwoci, aby automatycznie zapobiega odczytywaniu pamici przez jeden proces, zanim inny nie zakoczy jej zapisywa. W tym celu naley samemu zapobiec takiej sytuacji, np. tak jak to zostao zrobione w tej pracy, uywajc semaforw.

Funkcje systemowe Unixa dotyczce pamici dzielonej.

1.

int shmget(key t klucz, int size, int shmflg)

Wywoanie systemowe shmget () tworzy nowy segment pamici dzielonej lubuzyskuje dostp do ju istniejcego. Zwraca identyfikator IPC segmentu pamici przypomylnym wykonaniu lub -1 w przypadku bdu.

Argument klucz jest wartoci zwrcon przez funkcj f tok () .

Argument size okrela rozmiar nowotworzonego obszaru pamici dzielonej.

Argument shmflg mwi o tym, czy ma by utworzony nowy segment, czy te bdzieuywany ju istniejcy.


Programowanie wsp bie ne i rozproszone

Gdy shmflg jest rwne:

IPC CREAT - zostanie utworzony nowy segment pamici dzielonej jeeli do tejpory nie istnia. Shmget () zwraca identyfikator segmentu, ktry zostautworzony lub identyfikator ju istniejcego, ktry posiada podan wartoklucza.

IPC_CREAT|IPC_EXCL - zostanie utworzony nowy segment pamici lubshmget () zwrci bd. Gwarantuje to, e nie bdzie uywany ju istniejcyobszar.

Przykad:

shmid=shmget(klucz,100,0666 IPC CREAT IPC EXCL)

Wynikiem takiego wywoania bdzie nadanie zmiennej shmid numeru identyfikacyjnego nowoutworzonego obszaru pamici dzielonej o wielkoci 100 bajtw (drugi argument funkcji) lub -l w przypadku, gdy obszar pamici o wartoci kluczarwnej parametrowi klucz ju istnieje. Nowoutworzony segment bdzie posiada prawa czytania i pisania dla waciciela, grupy oraz innych uytkownikw (prawa 0666).


Programowanie wsp bie ne i rozproszone

2.

int shmat(int shmid, char *shmaddr, int shmflg)

Wywoanie systemowe shmat () suy do podczenia (mapowania) segmentu pamici dzielonej w obszar adresowy. Shmat () zwraca adres pod ktrym segment zosta przyczony do procesu lub -1 w przypadku bdu.

Argument shmid jest numerem identyfikacyjnym segmentu pamici dzielonej zwrconym przez shmget () .

Argument shmadrr powinien by ustawiony na 0. W takim przypadku jdro wybiera adres dla procesu wywoujcego. W innym przypadku musimy zrobi to sami. Jeeli nie chcemy wymusza stronicowego wyrwnania adresu (zaokrglenia w d do najbliszego rozmiaru strony) ani nie chcemy aby segment zosta wmapowany jako "tylko_do_odczytu" (SHM_RDONLY) argument shmflg ustawiamy na zero.


Programowanie wsp bie ne i rozproszone

Przykad:

if((segptr=shmat(shmid,0,0))==-1)

{

perror(shmat);

return(1);

}

3.

int shmctl(int shmid, int cmd, struct shmid ds *buf)

Wywoanie systemowe shmctl () uywane jest do kontrolowania segmentu pamici dzielonej, zwraca 0 gdy sukces, -l w przeciwnym wypadku. Argument shmid jest numerem identyfikacyjnym obszaru pamici zwrconym przez shmget(). Argument cmd jest komend, ktra ma zosta wykonana:

IPC_STAT - pobiera struktur shmid_ds i zachowuje j pod adresem buf.


Programowanie wsp bie ne i rozproszone

IPC_SET - ustawia warto ipc_perm struktury shmid_ds. Warto pobiera z

argumentu buf.

IPC_RMID - zaznacza segment do usunicia.

Argument buf jest wskanikiem do elementu typu shmid_ds. Typ ten jest struktur

zadeklarowan w <sys/shm.h>

Podanie komendy IPC_RMID nie usuwa segmentu, lecz go tylko zaznacza do

usunicia. Ostateczne usunicie segmentu nastpuje po odczeniu segmentu

przez ostatni proces. Przykad:

Aby zaznaczy do usunicia segment naley wywoa funkcj shmctl() z

parametrem IPC_RMID

shmctl(shmid,IPC_RMID,0);


Programowanie wsp bie ne i rozproszone

Aby pobra struktur semid_ds naley wywoa funkcj shmctl () z parametrem IPC STAT:

char *prawa;

struct shmid_ds struktura_ds;

shmctl(shmid,IPC_STAT,&struktura_ds);

printf("Stare prawa dostpu: %o\n" , struktura__ds . shm_perm.mode) ;

Aby zapisa zmiany w strukturze naley wywoa funkcj shmctl() z parametrem IPC_SET:

printf("Podaj nowe prawa :");

scanf("%o",prawa);

struktura__ds . shm_perm.mode=*prawa; if((shmctl(shmid,IPC_SET,&struktura_ds))==-1)

printf("Bd shmctl\n"};

else

printf("Zaktualizowano prawa dostpu..\n",struktura ds.shm perm.mode ) ;


Programowanie wsp bie ne i rozproszone

4.

int shmdt(char *shmaddr)

Wywoanie systemowe shmdt () odcza segment pamici dzielonej, zwraca 0 gdy sukces, -1 w przeciwnym wypadku.

Argument shmaddr jest wskanikiem do obszaru pamici dzielonej (warto zwrcona przez shmat () ).

Aby zobaczy aktualnie istniejce mechanizmy IPC naley z linii komend wyda polecenie ipcs. Uzyskamy w ten sposb informacje na temat istniejcego klucza, numeru identyfikacyjnego utworzonych mechanizmw IPC, waciciela mechanizmu, prawach dostpu do niego, liczby bajtw segmentu oraz liczby procesw z niego korzystajcych w przypadku pamici dzielonej, liczby semaforw w zestawie.


Programowanie wsp bie ne i rozproszone

Przykadowy wynik wykonania polecenia ipcs na ekranie terminala:

Shared Memory Segments

key shmid owner perms bytes nattch status

0x53454d55 1 root 666 50 0

Semaphore Arrays

key semid owner perms nsems status

0x53454d550 root 666 6

Message Queues

key msqid owner perms used-bytes messages


Rozwi zywanie problem w wzajemnego wykluczania za pomoc semafor w

Rozwizywanie problemw wzajemnego wykluczania za pomoc semaforw

Dziki semaforom w prosty sposb mona zrealizowa wzajemne wykluczanie. Wystarczy do tego jeden semafor binarny.

binarny_semafor S=1; // warto pocztkowa semafora ustawiona na 1

process P

{

while (TRUE)

{

sekcja_lokalna;

P(S); // opuszczenie ( zablokowanie ) semafora

sekcja_krytyczna; // korzystanie z zasobu dzielonego

V(S); // podniesienie ( odblokowanie ) semafora

}

}


Programowanie wsp bie ne i rozproszone

Poniewa warto pocztkowa semafora jest rwna 1 tylko jeden proces bdzie mg wykona P(S) natychmiast. Pozostae procesy bd musiay poczeka, a proces ten wykona operacj V(S), inaczej mwic pozostae procesy bd wstrzymane na semaforze S.


Programowanie wsp bie ne i rozproszone

Zablokuj(SEMAFOR_WW)

Protok wstpny

Wywietl(znak)

Sekcja krytyczna

Czekaj(czas_kryt)

Wywietl(znak)

odblokuj(SEMAFOR_WW)

Protok kocowy

Czekaj(czas_lok)

Sekcja lokalna

Wzajemne wykluczanie

Funkcja proces(czas_kryt, czas_lok)

Pocztkowa warto semafora:

SEMAFOR_WW=1;


Rozwi zywanie problemu wzajemnego wykluczania z tablic czas w trwania sekcji za pomoc semafor w

Rozwizywanie problemu wzajemnego wykluczania z tablic czasw trwania sekcji za pomoc semaforw

Aby do rozwizania problemu wzajemnego wykluczania za pomoc semaforw wprowadzi moliwo podawania z klawiatury czasw przebywania procesw w ich sekcji lokalnej i krytycznej, naleao te procesy w jednoznaczny sposb zidentyfikowa.

Kady proces w systemie Unix otrzymuje od niego numer nazywany numerem identyfikacyjnym procesu (PID). Daje to programicie moliwo kontroli nad rozwidlonymi procesami. Aby uruchomi funkcjproces() z parametrami czas_krytyczny i czas_lokalny naleao najpierw (po rozwidleniu procesu macierzystego na liczb procesw podanych przez uytkownika) gdzie zapisa PID-y kadego z procesw. Posuya do tego pami dzielona. Przez ograniczenie liczby procesw do 10 otrzymano rozmiar pamici dzielonej 10*sizeof(int) .


Programowanie wsp bie ne i rozproszone

Numery procesw zostay zapisane w kolejnoci zgoszenia si. Do zapewnienia wzajemnego wykluczania procesw chccych zapisa swj PID do obszaru pamici dzielonej naleao zastosowa tradycyjnie jeden semafor (w programie zosta on nazwany SEMAFOR_CZASY ). Do indeksacji miejsca wstawiania PIDu uyto take semafora ( SEMAFOR_INDEX ). (patrz rys. Funkcja zapisz_pid( ) ) Nastpnie kademu z procesw przyporzdkowany zosta zestaw danych skadajcy si z dwch liczb zmiennopozycyjnych odpowiadajcych kolejno czasowi przebywania procesu w sekcji krytycznej i w sekcji lokalnej. Majc ju zestaw potrzebnych parametrw uruchomiono funkcjproces(czas_kryt, czas_lok) (patrz rys. Funkcja proces(czas_kryt, czas_lok) ).


Programowanie wsp bie ne i rozproszone

START

Generowanie klucza

klucz=ftok()

u

i

Menu()

p

Otwrz_zestaw_semaforw_i_pami_dzielon(klucz)

Zainicjuj_zestaw_semaforw_i_pami_dzielon(rozmiar_magazynu,klucz)

Otwrz_zestaw_semaforw_i_pami_dzielon(klucz)

Usu_semafor_i_pami_dzielon()

Liczba procesw ?

Wczytaj tablic czasw

Rozwidl (liczba_procesw)

Zapisz PID do pamici dzielonej

Zapisz PID do pamici dzielonej

................

Wybierz czasy kryt. i lokal. z tablicy

odpowiadajce indeksowi PID-u w pamici dzielonej

Wybierz czasy kryt. i lokal. z tablicy

odpowiadajce indeksowi PID-u w pamici dzielonej

Uruchom proces(czas_kryt, czas_lok)

Uruchom proces(czas_kryt, czas_lok)

................

EXIT

Rozwizanie problemu wzajemnego wykluczania z tablic czasw trwania sekcji za pomoc semaforw


  • Login