Download as pdf or txt
Download as pdf or txt
You are on page 1of 56

Wykład 4

Koordynowanie procesów

1
 Aby procesy mogły być wykonywane w
sposób uporządkowany, w systemie muszą
znajdować się mechanizmy do
synchronizowania i komunikowania się
procesów.

 Zatem koordynacja procesów polega na


(S)synchronizacji + (K)komunikacji
2
3
 Prawidłowość przebiegu procesów wymaga
odpowiedniej formy synchronizacji.
 Załóżmy, że każdy z grupy synchronizowanych
procesów ma segment kodu, zwany sekcją
krytyczną (zmiana wspólnych zmiennych, itp.).
Gdy jeden z procesów wykonuje swoją sekcję
krytyczną, wówczas żaden inny proces nie może
wykonywać swojej sekcji krytycznej. Wykonanie
sekcji krytycznych podlega zatem wzajemnemu
wyłączaniu w czasie.
4
 Każdy proces musi prosić o pozwolenie
wejścia do swojej sekcji krytycznej.
 Ten fragment kodu nazywa się sekcją
wejściową. Po sekcji krytycznej może
występować sekcja wyjściowa. Pozostały
kod - reszta.

5
6
repeat
sekcja wejściowa;
sekcja krytyczna;
sekcja wyjściowa;
reszta
until false;

7
 Aby prawidłowo skoordynować procesy (czyli rozwiązać problem
sekcji krytycznej) muszą być spełnione 3 warunki:
1. wzajemne wyłączanie (W danym momencie tylko jeden proces może
działać w sekcji krytycznej.)
2. postęp (Jeśli żaden proces nie działa w sekcji krytycznej oraz istnieją
procesy, które chcą wejść do sekcji krytycznych, to tylko procesy nie
wykonujące swoich reszt mogą kandydować do wejścia jako następne do
sekcji krytycznych; wybór nie może być odwlekany w nieskończoność.)
3. ograniczone czekanie (Istnieje graniczna wartość liczby wejść innych
procesów do ich sekcji krytycznych po tym, gdy dany proces zgłosił chęć
wejścia do sekcji krytycznej i zanim uzyskał na to pozwolenie.)

 Zakłada się, że każdy proces jest wykonywany z prędkością niezerową.


Natomiast nie czyni się żadnych założeń o względnej prędkości każdego
z procesów.

8
 sprzętowe środki synchronizacji, np. rozkazy
sprzętowe wykonywane jako niepodzielne
jednostki pozwalające sprawdzać i zmieniać
zawartość słowa,
 semafory,
 regiony krytyczne,
 monitory.

9
 Semafor jest zmienną całkowitą, dostępną tylko za
pomocą dwu standardowych, niepodzielnych operacji:
 czekaj,
 sygnalizuj
 Gdy jeden proces modyfikuje wartość semafora, wówczas
żaden inny proces nie może jednocześnie tej wartości
zmieniać. Dla czekaj(S) nie może wystąpić przerwanie
podczas sprawdzania wartości zmiennej całkowitej S
(S<=O) i ewentualnego dokonywania jej zmiany.
 Operacje na semaforze:
Czekaj (S) : while S<=0 do nic;
S:=S-1;
Sygnalizuj(S): S:=S+1;

10
Semafory znajdują zastosowanie w rozwiązywaniu
problemu sekcji krytycznej z udziałem n procesów.
 Semafor S ma początkowo wartość 1.
 Każdy proces jest zorganizowany następująco:
repeat
czekaj(S);
sekcja krytyczna;
sygnalizuj(S);
reszta
until false;
 Taka organizacja procesu jest implementacją wzajemnego
wyłączania za pomocą semaforów.
11
 Wadą przedstawionych rozwiązań jest
konieczność aktywnego czekania przez
procesy. Podczas, gdy jeden proces jest w sekcji
krytycznej, pozostałe procesy usiłujące wejść do
sekcji krytycznych muszą nieustannie
wykonywać instrukcje sekcji wejściowych.
 Aktywne czekanie marnuje cykle procesora,
które mogłyby być produktywnie zużytkowane
przez inne procesy. Semafor tego rodzaju bywa
też nazywany wirującą blokadą (oczekujący
proces wiruje w miejscu).

12
Aby ominąć konieczność aktywnego czekania można
zmodyfikować operacje czekaj i sygnalizuj.
Proces, który wykonuje operację czekaj i zastaje
niedodatnią wartość semafora, musi czekać. Zamiast
czekać aktywnie proces może się zablokować.
Operacja blokowania umieszcza proces w kolejce
związanej z danym semaforem i powoduje przełączenie
stanu procesu na czekanie.
Następnie sterowanie zostaje przekazane do programu
planującego przydział procesora, który wybiera do
wykonania inny proces.

13
Działanie procesu zablokowanego pod
semaforem S powinno zostać wznowione
wskutek wykonywania operacji sygnalizuj
przez jakiś inny proces.
Wznowienie oznacza przejście ze stanu
oczekiwania na gotowość za pomocą operacji
budzenia.

14
Aby zaimplementować semafor odpowiadający tym
założeniom można określić go jako rekord
type semafor = record
wartosc : integer;
L: list of proces;
end;
Każdy semafor ma wartość całkowitą i listę procesów.
Kiedy proces musi czekać pod semaforem, wtedy
dołącza się go do listy procesów. Operacja sygnalizuj
usuwa jeden proces z listy oczekujących procesów i
budzi go.
15
Czekaj(S): S.wartosc := S.wartosc – 1;
if S.wartosc < 0
then begin
dołącz dany proces do S.L;
blokuj;
end;
Sygnalizuj(S): S.wartosc := S.wartosc + 1;
if S.wartosc <= 0
then begin
usuń jakiś proces P z S.L;
budzenie(P);
end;

16
Operacja blokuj wstrzymuje wykonywanie procesu, który ją
wywołuje. Operacja budzenie (P) wznawia działanie zablokowanego
procesu P. Obie operacje są wykonywane za pośrednictwem funkcji
podstawowych S.O.
W powyższej implementacji semafory mogą przyjmować wartości
ujemne (sprzecznie z klasyczną definicją). Jeśli wartość semafora jest
ujemna, to jej moduł określa liczbę procesów czekających na ten
semafor. Wynika to ze zmiany porządku instrukcji zmniejszania i
sprawdzania wartości zmiennej w implementacji operacji czekaj.
Listę procesów można zaimplementować dodając pole dowiązań
bloku kontrolnego każdego procesu. Każdy semafor zawiera wartość
całkowitą i wskaźnik do listy bloku kontrolnego procesu.

17
Decydującym aspektem poprawnego działania
semaforów jest niepodzielne wykonywanie
związanych z nimi operacji. Należy
zagwarantować, że żadne dwa procesy nie
wykonują operacji czekaj ani sygnalizuj na tym
samym semaforze w tym samym czasie.
Ten wymóg łatwo spełnić w środowisku
jednoprocesorowym. Wtedy należy zabronić
wykonywania przerwań podczas operacji czekaj i
sygnalizuj.
18
 ograniczonego buforowania,
 czytelników i pisarzy,
 posilających się filozofów.

19
 Założenia: n buforów o pojemności 1
jednostki.
 Semafor wzajwy umożliwia wzajemne
wyłączanie dostępu do puli buforów i ma
początkową wartość 1. Semafory pusty i
pełny zawierają odpowiednio liczbę pustych i
pełnych buforów.
 Semafor pusty ma wartość początkową n,
semafor pełny ma wartość początkową 0.
20
repeat
produkowanie jednostki;
czekaj(pusty);
czekaj(wzajwy);
dodanie jednostki do bufora;
sygnalizuj(wzajwy);
sygnalizuj(pełny);
until false;
21
repeat
czekaj(pełny);
czekaj(wzajwy);
wyjmowanie jednostki z bufora;
sygnalizuj(wzajwy);
sygnalizuj(pusty);
konsumowanie jednostki z
bufora;
until false;
22
Kod jest symetryczny. Można go interpretować
jako produkowanie przez producenta pełnych
buforów dla konsumenta lub jako
„wytwarzanie” przez konsumenta pustych
buforów dla producenta.

23
24
Założenia
 Obiekt danych (plik lub rekord) ma podlegać
dzieleniu między kilka procesów
współbieżnych. Niektóre tylko czytają, inne
czytają i uaktualniają (piszą). Są to czytelnicy
i pisarze.
 Zasady dostępu – kilku czytelników może
jednocześnie czytać. Pisarz nie może dzielić
dostępu z innym pisarzem lub czytelnikiem.
25
 Zadanie
Zagwarantować wyłączność dostępu pisarzy do
obiektu dzielonego.
 Odmiana problemu
Pierwszy problem czytelników i pisarzy.
Żaden czytelnik nie powinien czekać, chyba że właśnie
pisarz otrzymał pozwolenie na używanie obiektu
dzielonego.

26
 Rozwiązanie
Zmienne dzielone
var wzajwy, pisanie: semafor; {w.pocz 1i1}
liczp: integer; {w.pocz 0}
Semafor pisanie jest wspólny dla czytelników i pisarzy. Semafor
wzajwy służy do zagwarantowania wzajemnej wyłączności przy
aktualizacji zmiennej liczp. Zmienna liczp przechowuje liczbę
procesów czytających obiekt.
Semafor pisanie organizuje wzajemną wyłączność pracy pisarzy.
Jeśli na pisarza przebywającego w sekcji krytycznej oczekuje n
czytelników, to jeden czytelnik stoi w kolejce do semafora wzajwy.

27
Podsumowanie:
Dwie grupy procesów starają się o dostęp do
sekcji krytycznej. Specyfika tej sekcji
krytycznej polega na tym, że może w niej
przebywać równocześnie wielu czytelników
(jedna grupa procesów), ale gdy jest proces
z grupy pisarzy, to żaden inny proces nie
może wykonywać swojej sekcji krytycznej.
Jak zorganizować dostęp, aby nie doprowadzić
do zagłodzenia?
Rozwiązanie – wpuszczać na zmianę: grupa
czytelników, pisarz, grupa czytelników,
pisarz, itd. 28
29
Problem:
 zsynchronizować poczynania
filozofów, aby wykluczyć możliwość
blokady i zagłodzenia.
 Jeżeli wszyscy filozofowie biorą po
jednej pałeczce, dochodzi do
blokady; jeżeli niektórzy wezmą 2
pałeczki – dojdzie do zagłodzenia
innych.

30
 Pięciu filozofów spędza życie na myśleniu i
jedzeniu. Filozofowie dzielą wspólny okrągły
stół, wokół którego ustawiono 5 krzeseł. Na
środku stołu stoi misa ryżu, a naokoło leży 5
pałeczek.
 Kiedy filozof myśli, nie kontaktuje się z
kolegami.
 Gdy zaczyna odczuwać głód, próbuje ująć w ręce
dwie pałeczki leżące najbliżej jego miejsca przy
stole.
31
32
 Kiedy głodny filozof zdobędzie obie pałeczki,
wtedy je, nie oddając pałeczek.
 Po zakończeniu jedzenia filozof odkłada obie
pałeczki na stół i ponownie zatapia się w
myślach.

33
 W jednym z rozwiązań przyjmuje się, że
każda pałeczka jest semaforem. Filozof
próbuje wziąć pałeczkę wykonując operację
czekaj odnoszącą się do danego semafora.
Odkłada pałeczki za pomocą operacji
sygnalizuj kierowanych do odpowiednich
semaforów.

34
Co będzie, jeśli każdy z filozofów w tym
samym czasie poczuje głód i podniesie lewą
pałeczkę?

35
Zapobieganie:
 zostawić jedno miejsce wolne przy stole,
 pozwolić filozofowi na podniesienie pałeczek
gdy obydwie są dostępne (sprawdzanie i
podnoszenie pałeczek w sekcji krytycznej),
 rozwiązanie asymetryczne – „nieparzysty”
filozof podnosi najpierw lewą pałeczkę, a
„parzysty” – prawą.
36
37
38
39
40
 Gdy fryzjer będzie wyrabiał się z pracą to
klienci często będą do niego zaglądać.

41
44
Region krytyczny jest konstrukcją w języku wysokiego poziomu. Konstrukcja ta
strzeże przed popełnianiem przez programistę pewnych prostych błędów (jednak nie
wszystkich) związanych z rozwiązywaniem problemu sekcji krytycznej za pomocą
semaforów.
Niech v – zmienna typu T określa zmienną dzieloną przez wiele procesów:
var v: shared T;
Zmienna będzie dostępna tylko w obrębie instrukcji region:
region v do S;
Konstrukcja ta oznacza, że dopóki trwa wykonanie instrukcji S, dopóty żaden inny
proces nie ma dostępu do zmiennej v.
Zatem jeśli dwie instrukcje:
region v do S1;
region v do S2;
są wykonywane współbieżnie w różnych procesach sekwencyjnych, to wynik będzie
równoważny sekwencyjnemu wykonaniu „S1 przed S2” lub „S2 przed S1”.

45
 Monitor to inny przykład konstrukcji w
języku wysokiego poziomu służącej do
synchronizacji, zobowiązującej programistów
do jawnego deklarowania danych i zasobów
dzielonych oraz wymuszającej wzajemne
wyłączanie dostępu do obiektów dzielonych.

46
Monitor składa się ze zbioru operacji
zdefiniowanych przez programistę i zawiera:
 zbiór deklaracji zmiennych globalnych,
 zbiór procedur, które można wywoływać w celu
uzyskania dostępu z zewnątrz do monitora,
 fragment programu inicjującego wykonywany
tylko raz przy nadawaniu wartości początkowych
zmiennym monitora.

47
 Kompilator języka zawierającego monitory musi
zapewniać spełnienie warunku, że dostęp do obiektu
dzielonego jest możliwy jedynie poprzez wywołanie
procedury odpowiedniego monitora. Twórcy
kompilatora muszą również zadbać o to, by procedury
każdego monitora były realizowane jako wzajemnie
wyłączające się sekcje krytyczne. Odpowiedzialność
za wzajemne wyłączanie spada z programisty na
kompilator.
 Mechanizm monitora zrealizowano w językach:
Concurrent Pascal, Pascal Plus, Mesa.

48
49
Komunikacja międzyprocesowa stanowi
mechanizm umożliwiający procesom
wzajemne informowanie się i
synchronizowanie działań. Komunikację
międzyprocesową realizuje się za pomocą
systemu komunikatów lub pamięci dzielonej.
Oba te schematy mogą być używane
jednocześnie w obrębie jednego S.O.

50
 W systemach z pamięcią dzieloną procesy
współużytkują pewne zmienne, za pomocą
których odbywa się wymiana informacji.
 Odpowiedzialność za organizowanie
komunikacji spoczywa na programistach
zastosowań. S.O. dostarcza tylko środków do
dzielenia pamięci.

51
 Metoda systemu komunikatów pozwala procesom na
wymianę komunikatów. Odpowiedzialność za
organizowanie komunikacji spada na sam system
operacyjny. Jeśli procesy P i Q chcą się komunikować ze
sobą, to muszą nadawać i odbierać komunikaty – musi
istnieć między nimi łącze komunikacyjne.
 W przypadku procesów o rozłącznych przestrzeniach
adresów logicznych, w skład narzędzi komunikacji
międzyprocesowej wchodzą dwie podstawowe operacje:
 nadaj
 odbierz

52
 Komunikacja może być bezpośrednia lub pośrednia.
 W komunikacji bezpośredniej każdy proces, który
chce nadać lub odebrać komunikat musi jawnie
nazwać odbiorcę lub nadawcę uczestniczącego w tej
wymianie informacji. W tym przypadku operacje
nadaj i odbierz są zdefiniowane następująco:
 nadaj(P,komunikat) czyli nadaj komunikat do procesu P.
 odbierz(Q,komunikat) czyli odbierz komunikat od
procesu Q.

53
 W komunikacji pośredniej komunikaty są
nadawane i odbierane poprzez skrzynki
pocztowe. Skrzynka pocztowa jest obiektem,
w którym procesy mogą umieszczać
komunikaty i z którego komunikaty mogą być
pobierane.
 Proces może komunikować się z innymi
procesami za pomocą różnych skrzynek
pocztowych.

54
 Skrzynka pocztowa może być własnością
procesu albo systemu.
 Jeśli skrzynka należy do procesu (tzn. jest
przypisana lub zdefiniowana jako część
procesu), to rozróżnia się jej właściciela (który
może tylko odbierać komunikaty) i użytkownika
(który może tyko nadawać komunikaty).
 Kiedy proces będący właścicielem skrzynki
pocztowej, kończy działanie, wtedy skrzynka
znika.
55
S.O. dostarcza mechanizmów pozwalających na:
 tworzenie nowej skrzynki,
 nadawanie i odbieranie komunikatów,
 likwidowanie skrzynki.

System komunikatów jest szczególnie użyteczny


w środowisku rozproszonym, w którym procesy
mogą rezydować na różnych maszynach.

56
S.O. powinien poradzić sobie z następującymi
sytuacjami:
 zakończenie procesu (gdy zakończy się proces przed
zakończeniem przetwarzania komunikatu). Proces
może oczekiwać na komunikat od procesu, który już
zakończył działanie lub może wysłać komunikat do
procesu, który zakończył działanie,
 utrata komunikatów (np. awaria sprzętu) S.O. musi to
wykryć i ponownie nadać komunikat lub powiadomić
o tym proces nadawczy że zaistniał błąd - by
powtórnie przesłał komunikat,
 zniekształcenia komunikatów.

57
Dodatkowe informacje na temat semaforów proszę uzupełnić z podręcznika:
A. Silberschatz, P. B. Galvin, Podstawy Systemów Operacyjnych, WNT, 2006
lub następne wydania.
Wykorzystano rysunki ze stron:
http://aragorn.pb.bialystok.pl/~wkwedlo/OS4.pdf
http://www.google.pl/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CD0QFjAC&url=htt
p%3A%2F%2Fachilles.tu.kielce.pl%2FMembers%2Fppaduch%2Fwyk142ady%2Fsystemy-
rozproszone-4-rok-zaoczne%2F3-4-
wstep%2Fwyk2b_semafory_i_bufory.pdf%2Fdownload&ei=nSs7UbGPNeuS7Ab72YGgBw&usg=
AFQjCNGzBXR5germpmC1bd22yCaid_TqXg&bvm=bv.43287494,d.ZGU

58

You might also like