T3 dp

background image

Programowanie współbieżne

Wzajemne wykluczanie

Prowadzący: dr inż. Dariusz Pierzchała

dariusz.pierzchala@wat.edu.pl

background image

Mechanizm wzajemnego wykluczania

2

Model wzajemnych oddziaływań

procesów

Komunikacja (kooperacja):

niezbędna do uporządkowanej (synchronizowanej) współpracy;

dzieli się na: synchroniczną i asynchroniczną;

często realizowana poprzez wspólną pamięć – kwalifikowana
bywa do współzawodnictwa – wymaga wówczas wzajemnego
wykluczania procesów będących stronami w komunikacji;

Współzawodnictwo:

dwa procesy ubiegają się o ten sam zasób – np.
obliczeniowy, dostęp do pewnej komórki pamięci lub
kanału komunikacyjnego;

współzawodnictwo zawsze wymaga synchronizacji, w
tym wzajemnego wykluczania;

background image

Mechanizm wzajemnego wykluczania

3

Współzawodnictwo – przykład 1/2

Bankomaty połączone z serwerem w banku (K – stan konta
klienta);

Algorytm (uproszczony) działania systemu:

Sprawdź, czy kwota wypłaty nie przekracza kwoty na
rachunku.

Jeśli NIE, wykonaj wypłatę i zmniejsz kwotę K o wypłatę;

Jeśli TAK, odmów wykonania operacji wypłaty;

Jakie problemy mogą wystąpić?

Jeden proces sprawdza stan konta (read);

Inny proces może w tym samym czasie zmienić stan
(write) obsługując wpłatę lub wypłatę;

background image

Mechanizm wzajemnego wykluczania

4

Współzawodnictwo – przykład 2/2

Stan konta może zmieniać się następująco (w EUR):

Bankomat / proces nr
1

Bankomat / proces nr
2

Stan konta
1

Stan konta
2

Stan konta
3

1000

2000

3000

read (1) : 1000

1000

2000

3000

write (1) = 1000-

100

900

2000

3000

read (3) : 3000

900

2000

3000

write (3) = 3000-

200

900

2000

2800

read (2) : 2000

900

2000

2800

read (2) : 2000

900

2000

2800

write (2) =

2000+200

900

2200

2800

write (2) =

2000+100

900

2100

2800

900

2100

2800

Na koncie nr 2 błąd (brakuje)200 EUR –
dlaczego?

czas

background image

Mechanizm wzajemnego wykluczania

5

Problem wzajemnego wykluczania

Problem wzajemnego wykluczania można zdefiniować jako:

Zsynchronizować N procesów, z których każdy,

w pętli

realizuje:

o

sekcję lokalną

o

potem protokół wstępny (często oparty na pętli
aktywnego czekania)

o

następnie działania na części współdzielonej,

o

i kończy iterację protokołem końcowym;

Należy zapewnić spełnienie zasad:

W sekcji krytycznej może przebywać co najwyżej jeden
proces jednocześnie (bezpieczeństwo);

Każdy proces, który chce wykonać sekcję krytyczną, w
skończonym czasie powinien do niej wejść (żywotność) - nie
wystąpi zagłodzenie.

background image

Mechanizm wzajemnego wykluczania

6

Problem wzajemnego wykluczania

Schemat pracy procesów współbieżnych wyglądać może
następująco:

begin

loop

begin

• sekcja lokalna;
• protokół_wstępny;

sekcja_krytyczna;

• protokół_końcowy;

end loop;

end;

loop

end loop

sekcja lokalna

protokół wstępny

sekcja krytyczna

protokół końcowy

background image

Mechanizm wzajemnego wykluczania

7

Problem wzajemnego wykluczania

Dalsze założenia w rozwiązaniu wzajemnego wykluczania:

Procesy muszą być traktowane jako równoważne (brak priorytetów);

Wynik działania programu współbieżnego nie może zależeć od
przebiegu przeplotu (przełączania procesów);

Wynik działania musi być poprawny dla wszystkich możliwych
przeplotów;

Jeśli nie będzie rywalizacji o wejście do sekcji krytycznej, to proces,
który zażąda wejścia, zrealizuje to wejście;

Program musi zawierać własność wzajemnego wykluczania, tzn.
instrukcje z sekcji krytycznych dwu lub więcej procesów nie mogą
się wykonywać jednocześnie;

Rola protokołów jest następująca:

wstępnego: przy wejściu do sekcji krytycznej proces sprawdza, czy
może wejść do sekcji;

końcowego: po wyjściu z sekcji informuje inne procesy, iż opuścił
sekcję krytyczną, zatem inny proces może wejść do sekcji;

background image

Mechanizm wzajemnego wykluczania

8

Algorytm – schemat

Proces 1

Proces 2

loop

end loop

sekcja lokalna

protokół wstępny

sekcja krytyczna

protokół końcowy

loop

end loop

sekcja lokalna

protokół wstępny

sekcja krytyczna

protokół końcowy

Czynności protokołu końcowego wpływają na warunki sprawdzane w protokole wstępnym

background image

Mechanizm wzajemnego wykluczania

9

Algorytmy naiwne

background image

Mechanizm wzajemnego wykluczania

10

Alg. naiwny - Pierwsza próba

1: Czyja_kolej:Integer := 1;

2: proces P1 is
3: begin
4:

loop

5:

Sekcja_lokalna_1;

6:

loop

7:

if Czyja_kolej = 1 then exit;

8:

end loop;

9:

Sekcja_krytyczna;

10:

Czyja_kolej := 2;

11:

end loop;

12: end P1;

13: proces P2 is
14: begin
15:

loop

16:

Sekcja_lokalna_2;

17:

loop

18:

if Czyja_kolej = 2 then exit;

19:

end loop;

20:

Sekcja_krytyczna;

21:

Czyja_kolej := 1;

22:

end loop;

23: end P2;

Definiujemy jedna zmienną sterującą, wskazującą czyja jest kolej na sekcję.

Uwaga: tu występuje „aktywne oczekiwanie”!

Protokół wstępny:

linie 6-8, 17-19

Protokół końcowy: linie 10, 21

background image

Mechanizm wzajemnego wykluczania

11

Pierwsza próba – opis 1/2

1. To rozwiązanie zapewnia wzajemne wykluczanie -

nigdy dwa procesy nie znajdą się jednocześnie w sekcji

krytycznej. Zapewnia to zmienna czyja_kolej określająca

uprawnionego do wejścia do sekcji krytycznej.
2. To rozwiązanie nigdy nie doprowadzi do

zakleszczenia - aby w programie wystąpiło zakleszczenie

procesy muszą nieskończenie długo testować wartość

zmiennej czyja_kolej, przy czym warunek musi być stale

fałszywy.
3. W tym rozwiązaniu nie może wystąpić zagłodzenie -

jeden proces musi nieskończenie wiele razy wchodzić do sekcji

krytycznej, podczas gdy drugi wciąż wykonuje swój protokół

wstępny.
4. Niestety w przypadku braku współzawodnictwa to

rozwiązanie może zawieść - gdy jeden z procesów utknie w

swojej sekcji lokalnej, to drugi proces może wejść do sekcji

krytycznej co najwyżej raz.
Zatem Pkt. 4 wyklucza przyjęcie tego rozwiązania.

background image

Mechanizm wzajemnego wykluczania

12

Pierwsza próba – opis 2/2

5. Obydwa procesy są zmuszane do pracy w tym samym

tempie:
- gdy jeden z procesów musi wchodzić bardzo często do sekcji

krytycznej (np. co 1 sekundę) a drugi bardzo rzadko (np. raz na

dobę), to takie rozwiązanie nie może być przyjęte;
- naprzemienne przekazywanie prawa wejścia do sekcji krytycznej w

takim przypadku wyklucza zadawalającą pracę programu;
- podobnie może być w przypadku, gdy dwa procesy są wykonywane

na różnych procesorach. Wtedy nawet zakładając jednakową liczbę

instrukcji w każdym procesie, może dojść do sytuacji kiedy znaczne

różnice obciążenia każdego z procesorów będą wypaczać działanie

programu. Proces na mocniej obciążonym procesorze będzie blokował

pracę procesu z mniej obciążonego procesora.
Pkt. 5 wyklucza przyjęcie tego rozwiązania.

6. Technika programowania polegająca na jawnym przekazywaniu

prawa do wykonywania się nazywana jest współprogramowaniem.

background image

Mechanizm wzajemnego wykluczania

13

Alg. naiwny - Pierwsza próba

1 public class Naiwny implements Runnable {
2 volatile static int nextThd = 0;
3 private int thdNum;
4 public void run ( ) {
5

thdNum = ThreadID.get ( ) ;

6

while ( true ) {

7

// s e k c j a l o k a l n a

8

//

9

// TO DO

10

//

11

// protokół wstępny

12

while ( nextThd != thdNum) {

13

Thread.yield( ) ;

14

}

15

// s e k c j a k r y t y c z n a

16

//

17

//

18

// TO DO

19

//

20

//

21

// protokół końcowy

22

nextThd = 1 - thdNum;

23

}

24 }

background image

Mechanizm wzajemnego wykluczania

14

Alg. naiwny - Druga próba

1: K1, K2 :Integer := 1;

2: proces P1 is
3: begin
4: loop
5: Sekcja_lokalna_1;
6: loop
7: if K2 = 1 then exit;
8: end loop;
9: K1 := 0;
10: Sekcja_krytyczna;
11: K1 := 1;
12: end loop;
13: end P1;

14: proces P2 is
15: begin
16:

loop

17:

Sekcja_lokalna_2;

18:

loop

19:

if K1 = 1 then exit;

20:

end loop;

21:

K2 := 0;

22:

Sekcja_krytyczna;

23:

K2 := 1;

24:

end loop;

25: end P2;

Druga próba

Zamiast testować i ustawiać jedna zmienną sterującą (co prowadzi do
potencjalnej blokady), procesy zostają uzupełnione o własne zmienne
sterujące
;

To rozwiązanie jest tak fatalne, że nie ma nawet własności wzajemnego wykluczania

background image

Mechanizm wzajemnego wykluczania

15

Druga próba - opis

1. Proces Pi sygnalizuje potrzebę wejścia do sekcji krytycznej nadając zmiennej Ki wartość
0.
2. To rozwiązanie jest tak fatalne, że nie ma nawet własności wzajemnego
wykluczania
. Uwaga! Własność wzajemnego wykluczania jest podstawową i najłatwiejszą
do wykazania cechą programowania współbieżnego i od niej należy rozpoczynać analizę
każdego rozwiązania.
3. W tym rozwiązaniu dwa procesy mogą być jednocześnie w sekcji krytycznej.
Przykładowy ciąg instrukcji udowadnia taką możliwość:
a) P1 sprawdza wartość K2 i stwierdza, że K2 = 1.
b) P2 sprawdza wartość K1 i stwierdza, że K1 = 1.
c) P1 ustawia wartość K1 na 0.
d) P2 ustawia wartość K2 na 0.
e) P1 wchodzi do sekcji krytycznej.
f) P2 wchodzi do sekcji krytycznej.
4. W celu pokazania, że własność wzajemnego wykluczania nie zachodzi wystarczy podać
jeden przeplot instrukcji (tzw. killer’ski przeplot).

5. Wada tego rozwiązania polega także na tym, że proces po wyjściu z pętli (protokołu
wstępnego) nie może być powstrzymany przed wejściem do sekcji krytycznej.

6. Protokół wstępny: linie 6-8, 18-20
Protokół końcowy: linie 11, 23

Patrz – następny slajd

background image

Mechanizm wzajemnego wykluczania

16

Alg. naiwny - Druga próba

1: K1, K2 :Integer := 1;

2: proces P1 is
3: begin
4: loop
5: Sekcja_lokalna_1;
6: loop
7: if K2 = 1 then exit;
8: end loop;
9: K1 := 0;
10: Sekcja_krytyczna;
11: K1 := 1;
12: end loop;
13: end P1;

14: proces P2 is
15: begin
16:

loop

17:

Sekcja_lokalna_2;

18:

loop

19:

if K1 = 1 then exit;

20:

end loop;

21:

K2 := 0;

22:

Sekcja_krytyczna;

23:

K2 := 1;

24:

end loop;

25: end P2;

6-8: P1 sprawdza wartość K2 i stwierdza, że K2 =
1.
18-20: P2 sprawdza wartość K1 i stwierdza, że K1 =
1.
9: P1 ustawia wartość K1 na 0.
21: P2 ustawia wartość K2 na 0.
10: P1 wchodzi do sekcji krytycznej.

22: P2 wchodzi do sekcji krytycznej.

background image

Mechanizm wzajemnego wykluczania

17

Alg. naiwny – Trzecia próba

1: K1, K2 :Integer := 1;

2: proces P1 is
3: begin
4:

loop

5:

Sekcja_lokalna_1;

6:

K1 := 0;

7:

loop

8:

if K2 = 1 then exit;

9:

end loop;

10:

Sekcja_krytyczna;

11:

K1 := 1;

12:

end loop;

13: end P1;

14: proces P2 is
15: begin
16:

loop

17:

Sekcja_lokalna_2;

18:

K2 := 0;

19:

loop

20:

if K1 = 1 then exit;

21:

end loop;

22:

Sekcja_krytyczna;

23:

K2 := 1;

24:

end loop;

25: end P2;

Trzecia próba

Uznajemy praktycznie pętlę za część sekcji krytycznej i ustawianie zmiennej
przesuwamy przed petlę;

background image

Mechanizm wzajemnego wykluczania

18

Trzecia próba - opis

1. Proces Pi sygnalizuje potrzebę wejścia do sekcji krytycznej nadając zmiennej Ki
wartość 0. Przypisanie odpowiedniej zmiennej wartości zero sygnalizuje nie tylko chęć
wejścia do sekcji krytycznej, ale oznacza także naleganie na przyznanie tego prawa, co
niestety może doprowadzić do blokady.

2. To rozwiązanie zapewnia własność wzajemnego wykluczania - czyli nie zdarzy
się sytuacja, że dwa procesy będą jednocześnie w sekcji krytycznej.

3. Niestety już po kilku instrukcjach może nastąpić zakleszczenie. Przykładowy
ciąg instrukcji udowadnia taką możliwość:
a) P1 nadaje zmiennej K1 wartość 0.
b) P2 nadaje zmiennej K2 wartość 0.
c) P1 sprawdza wartość K2 i pozostaje w pętli.
d) P2 sprawdza wartość K1 i pozostaje w pętli.

4. Protokół wstępny: linie 6-9, 18-21
Protokół końcowy: linie 11, 23

P1

P2

„R1”

„R2”

linie 8 i 20

K1 := 0

K2 := 0

Patrz – następny slajd

background image

Mechanizm wzajemnego wykluczania

19

Alg. naiwny – Trzecia próba

1: K1, K2 :Integer := 1;

2: proces P1 is
3: begin
4:

loop

5:

Sekcja_lokalna_1;

6:

K1 := 0;

7:

loop

8:

if K2 = 1 then exit;

9:

end loop;

10:

Sekcja_krytyczna;

11:

K1 := 1;

12:

end loop;

13: end P1;

14: proces P2 is
15: begin
16:

loop

17:

Sekcja_lokalna_2;

18:

K2 := 0;

19:

loop

20:

if K1 = 1 then exit;

21:

end loop;

22:

Sekcja_krytyczna;

23:

K2 := 1;

24:

end loop;

25: end P2;

6: P1 nadaje zmiennej K1 wartość 0.
18: P2 nadaje zmiennej K2 wartość 0.
7-9: P1 sprawdza wartość K2 i pozostaje w pętli.

19-21: P2 sprawdza wartość K1 i pozostaje w pętli.

background image

Mechanizm wzajemnego wykluczania

20

Alg. naiwny – Czwarta próba

1: K1, K2 :Integer := 1;

2: proces P1 is
3: begin
4: loop
5: Sekcja_lokalna_1;
6: K1 := 0;
7: loop
8: if K2 = 1 then exit;
9: K1 := 1;
10: K1 := 0;
11: end loop;
12: Sekcja_krytyczna;
13: K1 := 1;
14: end loop;
15: end P1;

16: proces P2 is
17: begin
18:

loop

19:

Sekcja_lokalna_2;

20:

K2 := 0;

21:

loop

22:

if K1 = 1 then exit;

23:

K2 := 1;

24:

K2 := 0;

25:

end loop;

26:

Sekcja_krytyczna;

27:

K2 := 1;

28:

end loop;

29: end P2;

Czwarta próba

Naleganie na przyznanie prawa wejścia do sekcji może powodować blokadę;
Algorytm działania procesów modyfikujemy tak, aby potrafiłu rezygnować z
chęci wejścia do sekcji krytycznej w przypadku wykrycia współzawodnictwa;

Ten ciąg przypisań ma sens tylko w programie współbieżnym (nie w sekwencyjnym)

background image

Mechanizm wzajemnego wykluczania

21

Czwarta próba - opis (1/3)

1. Proces Pi sygnalizuje potrzebę wejścia do sekcji krytycznej nadając zmiennej Ki wartość 0.

2. Wprowadzono wymaganie, aby proces po wykryciu współzawodnictwa o wejście do sekcji
krytycznej rezygnował z tego prawa na rzecz innego procesu.
Świadczy o tym ciąg instrukcji typu: K1 := 1; K1 := 0; tj. linie 9 i 10 oraz przez analogię linie
23 i 24.

3. To rozwiązanie zapewnia własność wzajemnego wykluczania - czyli nie zdarzy się
sytuacja, że dwa procesy będą jednocześnie w sekcji krytycznej.
4. Niestety może dojść do zagłodzenia procesu. Przykładowy ciąg instrukcji udowadnia
taką możliwość:
a) P1 przypisuje K1 wartość 0.
b) P2 przypisuje K2 wartość 0.
c) P2 sprawdza wartość K1 i przypisuje K2 wartość 1.
d) P1 wykonuje pełny obrót pętli:
- sprawdza wartość K2,
- wchodzi do sekcji krytycznej,
- przywraca wartość 1 zmiennej K1,
- wykonuje sekcję lokalną,
- przypisuje zmiennej K1 wartość 0.
e) P2 przypisuje zmiennej K2 wartość 0.
f) Jeżeli przejdziemy do kroku c) to mamy zagłodzenie procesu P2.

Patrz – następny slajd

background image

Mechanizm wzajemnego wykluczania

22

Czwarta próba - opis (2/3)

1: K1, K2 :Integer := 1;

2: proces P1 is
3: begin
4: loop
5: Sekcja_lokalna_1;
6: K1 := 0;
7: loop
8: if K2 = 1 then exit;
9: K1 := 1;
10: K1 := 0;
11: end loop;
12: Sekcja_krytyczna;
13: K1 := 1;
14: end loop;
15: end P1;

16: proces P2 is
17: begin
18:

loop

19:

Sekcja_lokalna_2;

20:

K2 := 0;

21:

loop

22:

if K1 = 1 then exit;

23:

K2 := 1;

24:

K2 := 0;

25:

end loop;

26:

Sekcja_krytyczna;

27:

K2 := 1;

28:

end loop;

29: end P2;

Przykład przeplotu prowadzącego do zagłodzenia procesu P2:

6, 20, 8, 22, 9, 23, 10, 8, 12, 13, 5, 6, 24,

8, 22, 9, 23, 10, 8, 12, 13, 5, 6, 24,
8, 22, 9, 23, 10, 8, 12, 13, 5, 6, 24, itd.

Warto zwrócić uwagę na powtarzającą się linię 5 - sekcja krytyczna wielokrotnie
niezajęta!

background image

Mechanizm wzajemnego wykluczania

23

Czwarta próba - opis (3/3)

5. W tym rozwiązaniu może wystąpić półblokada (inaczej livelock).
W przypadku zakleszczenia nie ma żadnego możliwego ciągu wykonań instrukcji, który
by doprowadził do wejścia do sekcji krytycznej. W przypadku półblokady możliwe są
obliczenia kończące się sukcesem, ale można też podać jeden lub więcej ciągów wykonań
instrukcji, w których żaden proces nigdy nie wejdzie do sekcji krytycznej.
Przykładowy ciąg instrukcji udowadnia taką możliwość. Zakładamy, że instrukcje obydwu
procesów występują naprzemiennie.
a) P1 przypisuje K1 wartość 0.
b) P2 przypisuje K2 wartość 0.
c) P1 bada wartość K2 i pozostaje w pętli.
d) P2 bada wartość K1 i pozostaje w pętli.
e) P1 przywraca zmiennej K1 wartość 1.
f) P2 przywraca zmiennej K2 wartość 1.
g) P1 przypisuje K1 wartość 0.
h) P2 przypisuje K2 wartość 0.
i) P1 bada wartość K2 i pozostaje w pętli.
j) P2 bada wartość K1 i pozostaje w pętli.

6. Protokół wstępny: linie 6-11, 20-25
Protokół końcowy: linie 13, 27

background image

Mechanizm wzajemnego wykluczania

24

Algorytm Dekkera

background image

Mechanizm wzajemnego wykluczania

25

Alg. Dekkera (poprawny)

1: K1, K2 :Integer := 1;

2: Czyja_kolej: Integer := 1;

3: proces P1 is

4: begin

5:

loop

6:

Sekcja_lokalna_1;

7:

K1 := 0;

8:

loop

9:

if K2 = 1 then exit;

10:

if Czyja_kolej = 2 then

11:

K1 := 1;

12:

loop

13:

if Czyja_kolej = 1

then exit;

14:

end loop;

15:

K1 := 0;

16:

end if;

17:

end loop;

18:

Sekcja_krytyczna;

19:

K1 := 1;

20:

Czyja_kolej := 2;

21:

end loop;

22: end P1;

23: proces P2 is

24: begin

25:

loop

26:

Sekcja_lokalna_2;

27:

K2 := 0;

28:

loop

29:

if K1 = 1 then exit;

30:

if Czyja_kolej = 1 then

31:

K2 := 1;

32:

loop

33:

if Czyja_kolej = 2

then exit;

34:

end loop;

35:

K2 := 0;

36:

end if;

37:

end loop;

38:

Sekcja_krytyczna;

39:

K2 := 1;

40:

Czyja_kolej := 1;

41:

end loop;

42: end P2;

background image

Mechanizm wzajemnego wykluczania

26

Alg. Dekkera (poprawny) – opis 1/2

1. Algorytm Dekkera (poprawny) jest połączeniem pierwszego i
czwartego rozwiązania.

2. W pierwszym podejściu jawnie przekazywano prawo wejścia do sekcji
krytycznej, co przy braku współzawodnictwa wykluczało to rozwiązanie.

3. W czwartym podejściu każdy proces miał własną zmienną co
zapobiegało brakowi współzawodnictwa.
Jednak, gdy ono wystąpiło to procesy albo głodziły siebie nawzajem,
albo półblokowały.

4. Algorytm Dekkera jest podobny do rozwiązania proponowanego w
czwartym podejściu lecz prawo do nalegania jest jawnie przekazywane
między procesami.

5. Zmienne Ki zapewniają wzajemne wykluczanie. Zmienna
czyja_kolej służy do przekazywania prawa nalegania.

background image

Mechanizm wzajemnego wykluczania

27

Alg. Dekkera (poprawny) – opis 2/2

6. Każdy proces sprawdza, czy teraz jest jego kolej na naleganie. Jeśli
nie, to przywraca początkową wartość zmiennej (K1 na 1 dla P1, K2
na 2 dla P2), po czym cierpliwie czeka na swoją kolej.

7. Jeżeli proces wejdzie do protokołu wstępnego, to po pewnym
czasie wejdzie do sekcji krytycznej.

8. Żaden proces nie może być zagłodzony i przy braku
współzawodnictwa proces może natychmiast wejść do swojej sekcji
krytycznej.

9. Protokół wstępny: linie 7-17, 27-37
Protokół końcowy: linie 19-20, 39-40

background image

Mechanizm wzajemnego wykluczania

28

Alg. Dekkera (poprawny) – przykład

1/2

1 // Przykład alg. Dekkera w Java

2

3 public class JDekker implements Runnable {

4

5 static AtomicIntegerArray kSter = new AtomicIntegerArray( 2 ) ;

6 static volatile int nextThd = 0 ;

7 int thdNum;

8

9 static {

10

kSter.set ( 0 , 1) ;

11

kSter.set ( 1 , 1) ;

12 }

13

14 public void run ( ) {

15

16

thdNum = ThreadID.get ( ) ;

17

18

while ( true ) {

19

20

// s e k c j a l o k a l n a

21

// TO DO

22

//

23

//

24

// END TO DO

25

26

// protokół wstępny

27

kSter.set(thdNum, 1) ;

background image

Mechanizm wzajemnego wykluczania

29

Alg. Dekkera (poprawny) – przykład

2/2

29

while ( kSter.get (1 - thdNum) == 1) {

30

if ( nextThd != thdNum) {

31

kSter.set (thdNum, 0) ;

32

while (nextThd != thdNum) {

33

Thread.yield ( ) ;

34

}

35

kSter.set(thdNum, 1) ;

36

}

37

}

38

39

// s e k c j a k r y t y c z n a

41

// TO DO

42

//

43

//

44

// END TO DO

46

47

// protokół końcowy

48

nextThd = 1 - thdNum;

49

kSter.set (thdNum, 0) ;

50 }

51 }

52

53 public JDekker ( ) {

54 }

55

56 public static void main ( String [ ] args ) {

57

58

new Thread (new JDekker ( ) , "A" ).start ( ) ;

59

new Thread (new JDekker ( ) , "B" ).start ( ) ;

60 }

61 }

background image

Mechanizm wzajemnego wykluczania

30

Inne podejścia i algorytmy:

-scentralizowane

-rozproszone

-oparte na żetonie

background image

Mechanizm wzajemnego wykluczania

31

Algorytm centralnego koordynatora

Podejście scentralizowane:

Wymagany jest dodatkowy proces koordynujący dostęp do
sekcji krytycznej;

Własności algorytmu:

Jest sprawiedliwy w sensie FIFO (zgodnie z kolejnością
żądań);

Spełnia własności:

bezpieczeństwa (wyklucza możliwość zajęcia sekcji przez
więcej niż jeden proces);

oraz żywotności (każdy z procesów będzie mógł kiedyś
uruchomić swoją sekcję krytyczną) - nie powoduje zagłodzenia;

Jest prosty w implementacji – wejście/wyjście do/z sekcji
krytycznej wymaga wymiany trzech wiadomości;

Wada podejścia: awaria scentralizowanego koordynatora
uniemożliwia poprawne wykluczanie;

background image

Mechanizm wzajemnego wykluczania

32

Algorytm centralnego koordynatora

- ilustracja

background image

Mechanizm wzajemnego wykluczania

33

Algorytm rozproszony Lamporta

Wykorzystuje mechanizm synchronizacji zegarów Lamporta;

R

i

- zbiór żądań procesu P

i

(zbiór procesów, od których

wymagane są pozwolenia zajęcia sekcji krytycznej);

Każdy proces kolejkę żądań sekcji krytycznej uszeregowanych
według znaczników czasowych;

Każdy proces P

i

przechowuje kolejkę żądań, który zawiera żądania

wejścia do sekcji krytycznej uszeregowane według ich znaczników
czasowych;

Do zajęcia/zwolnienia sekcji potrzeba co najmniej 3 komunikaty (ich
liczba zależy od liczby procesów)

Założenie: komunikaty przesyłane pomiędzy każdą parą procesów
przechowywane są wg porządku FIFO (ang. First In, First Out);

Ulepszoną wersją algorytmu Lamporta jest algorytm Ricarta i Agrawali

odbywa się bez wiadomości ZWOLNIJ (sekcję krytyczną)
poprzez połączenie z wiadomościami typu ODPOWIEDŹ;

background image

Mechanizm wzajemnego wykluczania

34

Algorytm rozproszony Lamporta

Proces P

i

żąda dostępu do sekcji krytycznej

wysyła żądanie ze znacznikiem czasu (@t(i),i) do wszystkich
procesów ze zbioru R

i

;

dodaje żądanie lokalnie do kolejki żądań;

każdy inny proces P

j

odsyła odpowiedź ze znacznikiem czasu i

umieszcza P

i

w swojej kolejce żądań;

Proces P

i

wejdzie do sekcji krytycznej, jeśli:

odpowiedzi od wszystkich procesów P

j

mają znaczniki czasowe

(@t(j),i) większe od znacznika żądania:

żądanie jest na początku własnej kolejki procesu P

i

;

Zwolnienie sekcji krytycznej wymaga:

wysłania wiadomości ZWOLNIJ do innych procesów, które
skojarzone z tym żądanie usuwają ze swoich kolejek (inne
żądania w kolejkach przesuwają się o 1 miejsce do przodu);

usunięcia żądania z początku własnej kolejki;

background image

Mechanizm wzajemnego wykluczania

35

Algorytm Lamporta - ilustracja

żądanie dostępu do sekcji krytycznej
odpowiedź na żądanie dostępu do sekcji krytycznej
zwolnienie sekcji krytyczne

P

1

P

2

P

3

@1, 2

@1, 2

@1, 2

@1, 2

@1, 2

@2, 1

@2, 1

@2, 1

@2, 1

P

2

wchodzi

do sekcji
krytycznej

@2, 1

@2, 1

@2, 1

P

2

wychodzi
do sekcji
krytycznej

background image

Mechanizm wzajemnego wykluczania

36

Algorytm Suzuki-Kasami - oparty na

żetonie

W algorytmie Suzuki-Kasami wykorzystywany jest żeton:

o żeton ubiegają się procesy chcące wejść do sekcji krytycznej;

proces posiadający żeton może wchodzić do sekcji krytycznej:

ma wyłączność do czasu, gdy o żeton nie poprosi inny proces;

Żądania mają postać ŻĄDANIE(j, n): mówimy, że proces P

j

żąda n-

tego wykonania sekcji krytycznej;

RN

i

[1..N] jest tablicą utrzymywaną przez proces P

i

;

RN

i

[j] przechowuje największą liczbę porządkową otrzymaną

dotychczas w żądaniach od procesu P

j

;

Problemy w podejściu:

Czy są stare (przedawnione) żądania?

Który proces ma zaległe żądania?

ŻĄDANIE(j, n) otrzymane przez P

i

jest przedawnione jeżeli RN

i

[j]>n:

Po otrzymaniu przez Pi wiadomości ŻĄDANIE(j, n) następuje:

RNi[j] = max(RNi[j], n);

background image

Mechanizm wzajemnego wykluczania

37

Algorytm Suzuki-Kasami - oparty na

żetonie

Kroki algorytmu:

Żądanie sekcji krytycznej

wysłanie przez proces żądania o żeton,

jeżeli go nie ma odesłanie wolnego żetonu;

Wejście do sekcji po otrzymaniu żetonu;

Zwalnianie sekcji krytycznej:

aktualizacja tablicy oraz kolejki żetonu:

każdy żeton składa się z kolejki żetonu Q i tablicy
żetonu LN;

Q jest kolejką procesów żądających;

LN jest tablicą o rozmiarze N, gdzie LN[j] to liczba
porządkowa ostatnio wykonanego żądania przez proces
P

j

;

wysłanie żetonu do następnego procesu w kolejce;

background image

Mechanizm wzajemnego wykluczania

38

Algorytm Raymonda - oparty na

żetonie

Inne podejście zaproponował Raymond:

Używa struktury drzewiastej o węzłach zawierających procesy;

Korzeniem drzewa jest proces, który posiada żeton
pozwalający na wejście do sekcji krytycznej;

Każdy proces dysponuje zmienną wskazującą na kolejny proces
na ścieżce prowadzącej do korzenia drzewa;

Każdy proces przechowuje kolejkę żądań sąsiednich procesów,
które nie posiadały jeszcze żetonu;

Struktura zmienia się dynamicznie w zależności od posiadacza
żetonu;

background image

Mechanizm wzajemnego wykluczania

39

Podsumowanie

background image

Mechanizm wzajemnego wykluczania

40

Wnioski – zapowiedź następnych

spotkań

Oprócz Dekkera znane są następujące algorytmy:

Petersona

piekarniany

Hymana

Dijkstry

Lamporta;

W praktyce stosuje się wysokopoziomowe mechanizmy
synchronizacji:

semafory

regiony krytyczne

monitory

oraz mechanizmy synchronizacji i komunikacji

spotkania symetryczne i asymetryczne

przestrzenie krotek

potoki, komunikaty i kanały;


Document Outline


Wyszukiwarka

Podobne podstrony:
DP i DM
T3 KONSUMENCI I ICH ZACHOWANIE pokaz
t3 Mix PRODUKT
ryzyko zawodowe t3
Mazowieckie Studia Humanistyczne r1997 t3 n1 s290 292
T3
Instrukcja T3
2b t3
dp 589 wstrzas2012 (czyli 2014 03 11)
poprawa olek t3
PP T3 Przygotowanie żołnierza do prowadzenia rozpoznania w terenie, PP i K
MARKETING WYK T3
wid6 dod k pracy r viii t3 swiat wielkich roznic i
Mazowieckie Studia Humanistyczne r1997 t3 n2 s43 59
Mazowieckie Studia Humanistyczne r1997 t3 n1 s201 210
T3 Ekologia populacji?dania laboratoryjne
ZARZĄDZANIE ŚRODOWISKIEM WYK T3
dp
Wieczny òdpòczink dôjce jima Panie

więcej podobnych podstron