2088


PROGRAMOWANIE WSPÓŁBIEŻNE

PODSTAWOWE POJĘCIA I PROBLEMY

Współpraca wymaga od procesów komunikowania się. Akcje komunikujących się procesów muszą być częściowo uporządkowane w czasie, ponieważ informacja musi najpierw zostać utworzona, zanim zostanie wykorzystana. Takie porządkowanie w czasie różnych procesów nazywa się synchronizacją.

Współzawodnictwo także wymaga synchronizacji - akcja procesu musi być wstrzymana, jeśli zasób potrzebny do jej wykonania jest w danej chwili zajęty przez inny proces.

PROBLEM WZAJEMNEGO WYKLUCZENIA

zsynchronizować N procesów, z których każdy w nieskończonej pętli na przemian zajmuje się własnymi sprawami i wykonuje sekcję krytyczną, w taki sposób, aby wykonanie sekcji krytycznych jakichkolwiek dwóch lub więcej procesów nie pokrywało się w czasie

Aby ten problem rozwiązać, należy do treści tego procesu wprowadzić dodatkowe instrukcje poprzedzające sekcję krytyczną (nazywa się je protokołem wstępnym) i instrukcje następujące bezpośrednio po sekcji krytycznej (zwane protokołem końcowym)

PRZYKŁĄD PROBLEMU WZAJEMNEGO WYKLUCZENIA

  1. Pierwszy proces pobiera swoją kopię x : x = 5 .

  1. Pierwszy proces oblicza x = x + 1 : x = 6 (lecz wartość wynikowa nie zostaje jeszcze zapisana do pamięci wspólnej) .

  1. Drugi proces włącza się do akcji, pobierając swoją kopię x : x = 5 .

  1. Drugi proces oblicza x = x + 2 : x = 7, nie zapisując wyniku do pamięci wspólnej.

  1. Pierwszy proces zapisuje swój wynik x = 6 do pamięci.

  1. Drugi proces zapisuje swój wynik x = 7 do pamięci wspólnej.

Wniosek: Otrzymujemy x = 7 zamiast prawidlowego wyniku

x = 8

BLOKADA I ZAGŁODZENIE

MECHANIZMY SYNCHRONIZACJI

SEMAFORY

Semafor - abstrakcyjny typ danych, na którym oprócz określenia jego stanu początkowego, można wykonywać tylko dwie operacje, umożliwiające wstrzymywanie i wznawianie procesów, a mianowicie:

o których zakłada się, że są niepodzielne, co oznacza, że dana operacja musi być wykonana od początku do końca bez możliwości przerwania przez inną operację

SEMAFOR BINARNY

definicja klasyczna:

czekaj aż S = = 1; wtedy ustaw S = 0 (i kontynuuj proces)

S = 1

definicja praktyczna :

jeżeli S = = 1, to S =0, w przeciwnym razie wstrzymaj

działanie procesu wykonującego tę operację;

jeżeli są procesy wstrzymane w wyniku wykonania operacji

opuszczania semafora S, to wznów jeden z nich, w przeciwnym

razie S = 1.

SEMAFOR OGÓLNY

definicja praktyczna :

jeżeli S > 0, to S =S -1, w przeciwnym razie wstrzymaj

działanie procesu wykonującego tę operację;

jeżeli są procesy wstrzymane w wyniku wykonania operacji

opuszczania semafora S, to wznów jeden z nich, w przeciwnym

razie S = S + 1 .

Definiowanie zmiennych semaforowych w programach

semafor ogólny

semaphore SEM = 4;

semafor binarny

binary semaphore SEM = 1;

PRZYKŁADY PROGRAMÓW WSPÓŁBIEŻNYCH

Z WYKORZYSTANIEM SEMAFORÓW

WZAJEMNE WYKLUCZENIE

int n = ? ;

binary semaphore S = 1;

process P ( int i ) /* i = 0 . . n-1 */

{ while {true}

{ własne_sprawy;

PB(S);

sekcja_krytyczna;

VB(S);

}

}

PROBLEM PIĘCIU FILOZOFÓW

Rozwiązanie z możliwością blokady

binary semaphore widelec [5] = {1, 1, 1, 1, 1};

process FILOZOF(int i) /* i = 0 . . 4 */

{ while {true}

{ myślenie;

PB(widelec [i] );

PB(widelec[ (i+1) % 5 ] );

jedzenie;

VB(widelec [i] );

VB(widelec[ (i+1) % 5 ] );

}}

PROBLEM PIĘCIU FILOZOFÓW

Rozwiązanie poprawne

binary semaphore widelec [5] = {1, 1, 1, 1, 1};

semaphore LOKAJ = 4;

process FILOZOF(int i) /* i = 0 . . 4 */

{ while {true}

{ myślenie;

P(LOKAJ);

PB(widelec [i] );

PB(widelec[ (i+1) % 5 ] );

jedzenie;

VB(widelec [i] );

VB(widelec[ (i+1) % 5 ] );

V(LOKAJ);

} }

MONITORY

Monitor to zebrane w jednej konstrukcji programowej pewne wyróżnione zmienne oraz procedury i funkcje synchronizujące działające na tych zmiennych. Część tych procedur i funkcji jest udostępniona na zewnątrz monitora. Tylko ich wywołanie umożliwia procesom dostęp do zmiennych ukrytych wewnątrz monitora.

- wait ( c ) powoduje wstrzymanie procesu wykonującego tę

operację i wstawienie go na koniec kolejki związanej ze

zmienną c , z jednoczesnym zwolnieniem monitora,

- signal ( c ) powoduje wznowienie pierwszego procesu wstrzy

manego w kolejce związanej ze zmienną c . Jeśli operacja ta nie

jest ostatnią instrukcją procedury monitorowej, to proces wyko-

nujący tę operację jest wstrzymany aż do chwili, gdy wznowio-

ny przezeń proces zwolni monitor. Jeśli w chwili wywołania

operacji signal żaden proces nie czeka w kolejce, to operacja ta

ma efekt pusty.

PROCES A MONITOR M

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

procedure P(x : integer);

0x08 graphic
M.P(y) begin

0x08 graphic

Procesy . . .

oczekujące

na wejście wait ( C ) ;

. . .

Procesy

wstrzymane signal ( C ) ; Procesy

po signal oczekujące na C

0x08 graphic
. . .

end;

0x08 graphic
0x08 graphic

PROBLEM PIĘCIU FILOZOFÓW

ROZWIĄZANIE POPRAWNE Z MONITOREM

monitor WIDELCE;

var WIDELEC : array [0 .. 4] of condition;

zajęty : array [0 .. 4] of boolean;

LOKAJ : condition;

jest , i : integer;

export procedure BIORĘ (i : integer);

begin

if jest = 4 then wait (LOKAJ); jest := jest + 1;

if zajęty[i] then wait (WIDELEC [ i ] );

zajęty [ i ] := true;

if zajęty[ (i+1) mod 5] then wait (WIDELEC [(i+1) mod 5 ] );

zajęty [ (i+1) mod 5 ] := true;

end; {BIORĘ}

export procedure ODKŁADAM (i : integer);

begin

zajęty [i] := false;

SIGNAL (WIDELEC [i] );

zajęty[ (i+1) mod 5] := false;

signal (WIDELEC [ (i+1) mod 5 ] );

jest := jest -1; SIGNAL (LOKAJ);

end; {ODKŁADAM}

begin

for i := 0 to 4 do zajęty [i] := false;

jest := 0;

end; {WIDELCE}

PROBLEM PIĘCIU FILOZOFÓW

ROZWIĄZANIE POPRAWNE Z MONITOREM

process FILOZOF (i: 0 .. 4);

begin

while (true) do

begin

myślenie;

WIDELCE . BIORĘ (i);

jedzenie;

WIDELCE . ODKŁADAM (i);

end;

end;



Wyszukiwarka

Podobne podstrony:
2088
2088
2088
2088
2088
2088
2088
2088 ac
Shimano EV ST EF29 8 2088 v1

więcej podobnych podstron