Programowanie współbieżne i rozproszone/PWR Ćwiczenia 1: Różnice pomiędzy wersjami
Nie podano opisu zmian |
Nie podano opisu zmian |
||
Linia 28: | Linia 28: | ||
Chcemy zapewnić, że w tym samym czasie co najwyżej jeden z nich | Chcemy zapewnić, że w tym samym czasie co najwyżej jeden z nich | ||
wykonuje fragment programu oznaczony jako | wykonuje fragment programu oznaczony jako <tt>sekcja_krytyczna</tt>. Jakie | ||
instrukcje należy umieścić w protokołach, aby zrealizować ten | instrukcje należy umieścić w protokołach, aby zrealizować ten | ||
cel? Nie dysponujemy żadnymi mechanizmami synchronizacyjnymi, więc protokoły | cel? Nie dysponujemy żadnymi mechanizmami synchronizacyjnymi, więc protokoły | ||
powinny umiejętnie wykorzystać zmienne globalne oraz instrukcje | powinny umiejętnie wykorzystać zmienne globalne oraz instrukcje | ||
języka programowania. | języka programowania. | ||
; Ćwiczenie (ukrywajka) | |||
: Odpowiedz na poniższe pytania przed przystąpieniem do dalszej części ćwiczenia. | |||
Jeśli masz kłopoty ze znalezieniem odpowiedzi przeczytaj jeszcze raz [[fragment wykładu]]. | |||
# Czy protokoły wstępne i końcowe można pozostawić puste? | |||
# Co oznacza bezpieczeństwo w przypadku tak sformułowanego zadania? | |||
# A żywotność? | |||
# Jaką nazwę nosi ten problem? | |||
Postawiony powyżej problem to '''Problem wzajemnego wykluczania'''. | |||
Protokoły wstępne i końcowe nie mogą pozostać puste --- wtedy nic nie powstrzymywałoby procesu | |||
przed rozpoczęciem wykonania <tt>sekcji_krytycznej</tt> nawet wówczas, gdy drugi proces jest | |||
w trakcie jej wykonywania. Mielibyśmy jednak wtedy dwa procesy w sekcji krytycznej, co przeczy | |||
specyfikacji zadania. Ta specyfikacja określa właśnie '''własność bezpieczeństwa'': '''Nigdy nie | |||
dojdzie do niepożądanej sytuacji'''. Ta '''niepożądana sytuacja''' to w tym przypadku jednoczesny | |||
pobyt obu procesów w <tt>sekcji krytycznej<tt>. '''łłasność żywotności''' w kontekście postawionego | |||
problemu oznacza, że każdy proces, który będzie chciał wejść do sekcji krytycznej, w końcu | |||
(po skończonym czasie) do niej wejdzie. |
Wersja z 09:06, 9 cze 2006
Zadanie
Treść
Uruchamiamy współbieżnie dwa następujące procesy:
process P1; begin while true do begin własne_sprawy; protokół_wstępny; sekcja_krytyczna; protokół_końcowy; end end; |
process P2; begin while true do begin własne_sprawy; protokół_wstępny; sekcja_krytyczna; protokół_końcowy; end end; |
Chcemy zapewnić, że w tym samym czasie co najwyżej jeden z nich wykonuje fragment programu oznaczony jako sekcja_krytyczna. Jakie instrukcje należy umieścić w protokołach, aby zrealizować ten cel? Nie dysponujemy żadnymi mechanizmami synchronizacyjnymi, więc protokoły powinny umiejętnie wykorzystać zmienne globalne oraz instrukcje języka programowania.
- Ćwiczenie (ukrywajka)
- Odpowiedz na poniższe pytania przed przystąpieniem do dalszej części ćwiczenia.
Jeśli masz kłopoty ze znalezieniem odpowiedzi przeczytaj jeszcze raz fragment wykładu.
- Czy protokoły wstępne i końcowe można pozostawić puste?
- Co oznacza bezpieczeństwo w przypadku tak sformułowanego zadania?
- A żywotność?
- Jaką nazwę nosi ten problem?
Postawiony powyżej problem to Problem wzajemnego wykluczania. Protokoły wstępne i końcowe nie mogą pozostać puste --- wtedy nic nie powstrzymywałoby procesu przed rozpoczęciem wykonania sekcji_krytycznej nawet wówczas, gdy drugi proces jest w trakcie jej wykonywania. Mielibyśmy jednak wtedy dwa procesy w sekcji krytycznej, co przeczy specyfikacji zadania. Ta specyfikacja określa właśnie własność bezpieczeństwa: Nigdy nie dojdzie do niepożądanej sytuacji. Ta niepożądana sytuacja to w tym przypadku jednoczesny pobyt obu procesów w sekcji krytycznej. łłasność żywotności w kontekście postawionego problemu oznacza, że każdy proces, który będzie chciał wejść do sekcji krytycznej, w końcu (po skończonym czasie) do niej wejdzie.