Sr-7-wyk-2.0-Slajd22

Z Studia Informatyczne
Wersja z dnia 08:51, 9 wrz 2006 autorstwa Bgrabiec (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacjiPrzejdź do wyszukiwania

Algorytm Suzuki-Kasami

Algorytm Suzuki-Kasami


Algorytm składa się z następujących kroków. Jeżeli proces który żąda wejścia do sekcji krytycznej, nie posiada żetonu, zwiększa swoja liczbę porządkową, RNi[i ], i wysyła ŻĄDANIE(i , sn ) do wszystkich innych procesów (sn jest zaktualizowaną wartością RNi[i ]).

Gdy proces Pj odbierze tę wiadomość, zmienia RNj[i ] na max(RNj[i ], sn ). W wypadku kiedy Pj ma bezczynny żeton, wysyła go do procesu Pi pod warunkiem, że RNj[i ]= LN[i ]+ 1 .

Kiedy proces Pi otrzymuje żeton, uruchamia sekcję krytyczną.

Po ukończeniu sekcji krytycznej, proces Pi wykonuje niniejsze czynności. Zmienia wartość elementu tablicy żetonu LN[i ] na RNi[i ]. Dla każdego procesu Pj , którego identyfikatora nie ma w kolejce żetonu, dodaje jego identyfikator do tej kolejki, jeśli spełniony jest warunek RNi[j ]= LN[j ]+ 1 . Jeżeli kolejka żetonu nie jest pusta po powyższych aktualizacjach, to proces Pi usuwa identyfikator z początku kolejki i wysyła żeton do procesu oznaczonego tym identyfikatorem.

W ten sposób, po wykonaniu sekcji krytycznej, proces nadaje priorytet innym procesom z zaległymi żądaniami sekcji krytycznej (priorytet, który przewyższa jego bieżące żądania w toku).

Algorytm ten nie jest symetryczny, ponieważ proces zachowuje żeton nawet, jeśli sam nie żąda wejścia do sekcji krytycznej. Jest to przeciwieństwem koncepcji algorytmu symetrycznego autorstwa Ricarta i Agrawali, gdzie „żaden proces nie posiada prawa dostępu do swojej sekcji krytycznej, jeżeli nie było takiego żądania”.


<< Poprzedni slajd | Spis treści | Następny slajd >>