Semafory. // G - globalna dla wszystkich. // Wada - aktywne oczekiwanie Test_and_Set(Li); exit when Li = 0; end loop sekcja_krytyczna(i); G := 0;

Podobne dokumenty
Semafory. - aktywne oczekiwanie =GRGDWNRZ\PZVSDUFLHPVSU]WRZ\P 6SHFMDOQDLQVWUXNFMDPDV]\QRZDUHDOL]XMFDDWRPRZ\]DSLVL odczyt, np.

Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg.

Wprowadzenie do programowania współbieżnego

SOP2 - semafory. grudzień

synchronizacji procesów

synchronizacji procesów

Mechanizmy komunikacji. spotkania symetryczne (język CSP) spotkania asymetryczne (Ada) przestrzenie krotek (Linda) potoki, komunikaty i kanały (Unix)

Klasyczne problemy współbieżności. Problem producenta i konsumenta Problem czytelników i pisarzy Problem pięciu filozofów

Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska

Monitory. Jarosław Kuchta

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1

WYKŁAD 4 SEMAPHORES (CIĄG DALSZY) Przykład 6 Problem czytelników i pisarzy. Wykład 4 strona 1/24

Synchronizacja procesów

Systemy operacyjne. Zajęcia 11. Monitory

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Monitory. Wady semafora

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Systemowe mechanizmy synchronizacji procesów

Synchronizacja procesów i wątków

Programowanie współbieżne Wykład 4. Rafał Skinderowicz

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Zagadnienia zaawansowane. Lech Kruś,

Modelowanie procesów współbieżnych

Mechanizmy pracy równoległej. Jarosław Kuchta

Przeplot. Synchronizacja procesów. Cel i metody synchronizacji procesów. Wątki współbieżne

Klasyczne problemy synchronizacji

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Synchronizacja procesów

Programowanie wspóªbie»ne

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

Problemy współbieżności

Wykład 5. Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Systemy operacyjne Wzajemne wykluczanie i synchronizacja

Systemy operacyjne III

Porządek dostępu do zasobu: procesory obszary pamięci cykle procesora pliki urządzenia we/wy

Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Programowanie wspóªbie»ne

Programowanie Równoległe i Rozproszone

Synchronizacja procesów

Programowanie współbieżne Zadanie nr 4 Spotkania

Systemy Operacyjne synchronizacja i komunikacja procesów

Programowanie Współbieżne. Monitory

Przykład wystąpienia wyścigu. Systemy operacyjne / Wzajemne wykluczanie i synchronizacja str.4/33. Wyścigi w systemie operacyjnym.

Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

Komunikacja asynchroniczna w modelu rozproszonym

dr inż. Grażyna KRUPIŃSKA D-10 pokój 227 WYKŁAD 12 WSTĘP DO INFORMATYKI

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

J. Ułasiewicz Programowanie aplikacji współbieżnych 1

Gdy kilka procesów czyta a przynajmniej jeden dokonuje zapisu wynik odczytu zależeć może od sposobu realizacji przeplotu.

Detekcja zakleszczenia (1)

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Programowanie systemów czasu rzeczywistego laboratorium. Ćwiczenie 2. Temat zajęć: pakiety, zadania, synchronizacja czasowa, mechanizm spotkań

Wzajemne wykluczanie i zakleszczenie

Wykład 2. Poprawność algorytmów

J. Ułasiewicz Programowanie aplikacji współbieżnych 1

3URJUDPRZDQLHZVSyáELH*QHZVWS

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Instrukcje cykliczne (pętle) WHILE...END WHILE

Programowanie współbieżne Zadanie numer 3 Monitory

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1

Wstęp do programowania

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

4. Procesy pojęcia podstawowe

Informatyka 1. Procedury i funkcje, struktura programu w Pascalu

Synchronizacja procesów

OPERACJE NA PLIKACH. Podstawowe pojęcia:

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

w odróżnieniu od procesów współdzielą przestrzeń adresową mogą komunikować się za pomocą zmiennych globalnych

Semafor ustaw_semafor(key_t nazwa, int start); Semafor usun_semafor(semafor sem); void signal(semafor sem); void wait(semafor sem);

Wielozadaniowość w systemie Microsoft Windows

Znajdowanie największego i najmniejszego elementu w zbiorze n liczb całkowitych

Programowanie równoległe i rozproszone. W1. Wielowątkowość. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Modelowanie złożonych układów cyfrowych (1)

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

Wstęp do programowania. Różne różności

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

Informatyka 1. Wyrażenia i instrukcje cd., ręczna symulacja, operacje wejścia/wyjścia

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

1. Działania na procesach

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Problemy czytelników i pisarzy oraz 5 ucztujących filozofów

DECLARE VARIABLE zmienna1 typ danych; BEGIN

41. System operacyjny. Postrzeganie systemu operacyjnego przez warstwę oprogramowania użytkowego

Problem detekcji zakończenia

4. Procesy pojęcia podstawowe

Informatyka 1. Przetwarzanie tekstów

Zasady Programowania Strukturalnego

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

ezykach wysokiego poziomu (Dijkstra, 1965). semaphore semaphore S; Operacje na semaforze:

Programowanie współbieżne i równoległe. dr inż. Marcin Wilczewski 2013

Proces y i y w i ąt ą ki

Visual Basic for Application (VBA)

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Transkrypt:

Semafory Rozwiązanie problemu wzajemnego wykluczania Bez dodatkowego wsparcia sprzętowego i programowego Zakładamy jedynie, że zapis do i odczyt z pamięci wspólnej są operacjami atomowymi (czyli istnieje arbiter wspólnej pamięci). W razie jednoczesnego zapisu i odczytu rezultatem będzie przeplecenie tych dwóch instrukcji w dowolnej kolejności Algorytm Dekkera ćwiczenia! Wada: - złożoność - aktywne oczekiwanie Z dodatkowym wsparciem sprzętowym Specjalna instrukcja maszynowa realizująca atomowy zapis i odczyt, np. Test_and_Set (Li) Li := G; G := 1; end var G: integer := 0; procesów // G - globalna dla wszystkich process P (i:integer); var Li: integer; // Li - lokalna dla procesu i sekcja_lokalna(i); // Wada - aktywne oczekiwanie Test_and_Set(Li); exit when Li = 0; end sekcja_krytyczna(i); G := 0; Semafory str. 1

end Wsparcie programowe: semafory, monitory itp. Definicja (klasyczna) semafora Semafor jest zmienną całkowitoliczbową przyjmującą wartości nieujemne, dla której są określone tylko następujące operacje: inicjacja, wait (lub P), signal (lub V) Inicjacja, czyli nadanie wartości początkowej, jest wykonywane tylko raz dla danego semafora i poza procesami Operacje P i V są niepodzielne i wzajemnie wykluczające się (dla danego semafora) P(S): gdy S > 0, to S := S -1, wpp proces jest zawieszany w oczekiwaniu na ten warunek V(S): S := S + 1 Oczekiwanie jest sprawiedliwe Definicja (praktyczna) semafora P(S): jeśli S > 0, to S := S - 1, wpp wstrzymaj działanie procesu wykonującego tę operację V(S): jeśli są procesy wstrzymane w wyniku P(S), to wznów jeden z nich, wpp S := S + 1 Semafor binarny Jest szczególnym przypadkiem semafora ogólnego - przyjmuje jedynie wartości 1 i 0 (lub true i false) PB i VB są również niepodzielne i wzajemnie wykluczające się W definicji semafora ogólnego S := S + 1 przechodzi na S := 1; S := S - 1 przechodzi na S := 0 (Uwaga: w niektórych implementacjach wykonanie VB(S) dla S = 1 kończy się błędem) Semafory str. 2

Rozwiązanie problemu sekcji krytycznej (inicjalnie S = 1): PB(S); sekcja_krytyczna(i); VB(S) Różne uwagi P - Passeren, Proberen; V - Vrijmaken, Verhohen (Dijkstra jest Holendrem) Nie wolno testować wartości semafora (P, V i inicjacja to JEDYNE dopuszczalne operacje!) Operacje semaforowe wykluczają się wzajemnie, tak jak zapis i odczyt z tej samej komórki pamięci. Jednoczesne żądania wykonania operacji na tym samym semaforze będą wykonane sekwencyjnie, w nieznanej kolejności. W definicji semafora nie mówi się, który z zawieszonych procesów zostanie wznowiony; implementacja może (ale nie musi) wznawiać procesy zgodnie z zasadą kolejki prostej (żywotność sprawiedliwość) Implementacja semafora: zwykle na poziomie jądra systemu operacyjnego, bez aktywnego oczekiwania Symulacja semaforów ogólnych binarnymi (wg książki Shawa, WNT 1980, str. 90) Każdy semafor ogólny S może być zastąpiony przez zmienną całkowitą N s i dwa semafory binarne mutex s i delay s. Dla każdej operacji P(S) stosuje się wówczas: P(mutex s ); N s := N s - 1; if N s -1 then V(mutex s ); P(delay s ) end else V(mutex s ) Każda zaś operacja V(S) jest zastępowana przez: P(mutex s ); N s := N s + 1; if N s 0 then V(delay s ); V(mutex s ) Semafory str. 3

Początkowo mutex s = 1, delay s = 0, a zmienna N s przyjmuje początkową wartość zmiennej semaforowej S.... Czy ta symulacja jest zawsze poprawna? Zakładamy klasyczną definicję semafora Poprawka Shawa P1 P2 P3 P4 P(m s ); 1 5 9 13 P(m s ); N s := N s - 1; 2 6 10 14 N s := N s - 1; if N s -1 then 3 7 11 15 if N s -1 then V(m s ); 12 16 V(m s ); P(d s ) P(d s ) end end; else V(m s ); 4 8 V(m s ); Sekcja krytyczna; P(m s ); 17 21 P(m s ); N s := N s + 1; 18 22 N s := N s + 1; if N s 0 then V(d s ); 19 23 if N s 0 then V(d s ) V(m s ) 20 else V(m s ) N s = 2 2:1 6:0 10:-1 14:-2 18:-1 22: 0 (operacja:wartość) m s = 1 1:0 4:1 5:0 8:1 9:0 12:1 13:0 16:1 17:0 20:1 21:0 d s = 0 19:1 23:1!!! Przykład: Producent i konsument z ograniczonym buforem S: semaphore := 1; pełne, puste: semaphore := (0, N); {liczniki miejsc w buforze} process producent; produkuj; P(puste); {sprawdź, czy bufor ma miejsca} Semafory str. 4

P(S); wstaw; V(S); V(pełne); {zwiększenie licznika pełnych miejsc} end process konsument; P(pełne); {sprawdź, czy bufor nie jest pusty} P(S); pobierz; V(S); V(puste); {zwiększenie licznika pustych miejsc} konsumuj; end Inne rodzaje semaforów Semafor dwustronnie ograniczony (Lipton 74) P k (S): if S > 0 then S := S - 1 else czekaj V k (S): if S < k then S := S + 1 else czekaj Semafor OR (Lipton 74) P OR (S 1,..., S n ): if S 1 > 0... S n > 0 then S k :=S k - 1 else czekaj gdzie k = min{i: S i > 0} V OR (S k ): S k := S k + 1 Semafor AND (Patril 71) P AND (S 1,..., S n ): if S 1 > 0... S n > 0 then k S k := S k - 1 else czekaj V AND (S k ): S k := S k + 1 Semafor uogólniony (Lipton 74) P(S 1, t 1,..., S n, t n ): if S 1 t 1... S n t n then k S k := S k - t k else czekaj V (S 1, t 1,..., S n, t n ): k S k := S k + t k Semafor sparametryzowany (Presser 75) P(S 1, t 1, d 1,..., S n, t n, d n ): if S 1 t 1... S n t n then k S k := S k - d k else czekaj Semafory str. 5

V (S 1, d 1,..., S n, d n ): k S k := S k + d k Formalizm Habermanna Możliwość kontynuacji pracy przez dowolny proces przy wykonaniu operacji P zależy od liczby wykonanych w przeszłości (na tym semaforze) operacji P i V oraz od wartości początkowej semafora Oznaczenia: C(S) - wartość początkowa semafora S, C(S) 0 nv(s) - liczba wykonań operacji V na S np (S) - liczba wywołań operacji P na S (czyli ile razy procesy rozpoczęły operację P) np(s) - liczba przejść przez operację P na S (czyli ile razy procesy mogły kontynuować pracę po wykonaniu operacji P) Wówczas P(S): np (S) := np (S) + 1 if np (S) C(S) + nv(s) then np(s) := np(s) + 1 V(S): if np (S) > C(S) + nv(s) then np(s) := np(s) + 1 nv(s) := nv(s) + 1 Twierdzenie np(s) = min (np (S), C(S) + nv(s)) jest niezmiennikiem wykonań operacji P i V (dowód indukcyjny) Semafory Agerwali (T. Agerwala, Some extended semaphore primitives, Acta Informatica, 1977, 8, 3) Idea: wprowadzenie jednoczesnych operacji semaforowych, w których wykonanie operacji typu P jest uzależnione od stanu podniesienia lub opuszczenia wskazanych semaforów Semafory str. 6

PE(S 1,..., S n ; S n+1,..., S n+m ) powoduje zawieszenie procesu do chwili, gdy dla wszystkich S k (k =1,...,n) będzie spełnione S k > 0 oraz dla wszystkich S i (i = n+1,...,n+m) będzie spełnione S i = 0; for i := 1 to n do S i := S i - 1 VE(S 1,..., S r ): for i := 1 to r do S i := S i + 1 S k (k = 1,...,n); S i (i=n+1,...,n+m); S t (t = 1,...,r) są semaforami Semafory Agerwali pozwalają na indywidualne traktowanie współpracujących ze sobą procesów, a więc na związanie z nimi priorytetów, podział na rozłączne klasy ze względu na prior. itp. Priorytetowy dostęp do zasobów: należy zsynchronizować dostęp N procesów do zasobu R. Dostęp ma być realizowany według priorytetów procesów (niższa wartość - wyższy priorytet) var S: array[1..n] of semaphore := (0,...,0); T: semaphore := 1; R: resource; process P (prio: 1..N) var k: 0..N; k := prio - 1; praca bez zasobu; VE(S[prio]); if k = 0 then PE(T) else PE(T; S[1],..., S[k]); PE(S[prio]); sekcja krytyczna z użyciem R; VE(T) end end; co P(1);... ; P(N) coend. Semafory str. 7

Problem pięciu filozofów - rozwiązanie z semaforami Rozwiązanie 1 w: array[0..4] of semaphore := (1,1,1,1,1) {widelce} process F (i:0..4) myśli; P(w[i]); P(w[(i+1) mod 5]); je; V(w[i]); V(w[(i+1) mod 5]); end end; - Możliwość zastoju! Rozwiązanie 2 w: array[0..4] of semaphore := (1,1,1,1,1) {widelce} j: semaphore := 4; {jadalnia} process F (i:0..4) myśli; P(j); P(w[i]); P(w[(i+1) mod 5]); je; V(w[i]); V(w[(i+1) mod 5]); V(j) end end; - Czy kolejność operacji P jest dowolna? - Czy kolejność operacji V jest dowolna? - Super rejon krytyczny Semafory str. 8

Rozwiązanie 3 0 i-ty filozof myśli s[i]= 1 i-ty filozof jest głodny 2 i-ty filozof je s: array[0..4] of 0..2 := (0,0,0,0,0) {stan} m: semaphore := 1; {mutex} ps: array[0..4] of semaphore := (0,0,0,0,0) {prywatny sem} procedure test (k: 0..4); if s[k] = 1 and s[(k-1) mod 5] 2 and s[(k+1) mod 5] 2 then s[k] := 2; V(ps[k]) end end; {test} process F (i:0..4) myśli; P(m); s[i] := 1; test(i); V(m); P(ps[i]); je; P(m); s[i] := 0; test((i-1) mod 5]); test((i+1) mod 5]); V(m) end end; - Możliwość zagłodzenia Semafory w systemie Unix Semafory str. 9

Operacje na pojedynczym semaforze P(S,n) - opuszczenie S o wartość n V(S,n) - podniesienie S o wartość n Z(S) - czekaj, aż S = 0 np(s,n) - nieblokujące opuszczenie S o wartość n nv(s,n) - nieblokujące podniesienie S o wartość n Operacje jednoczesne [V(S1,1), P(S2,3), Z(S3)] - czekaj, aż S2 3 oraz S3 = 0 i wtedy S1 zwiększ o 1, a S2 zmniejsz o 3 [np(s1,1), Z(S2), V(S3,2)] - jeśli S1 1 i S2 = 0, to zmniejsz S1 o 1 i zwiększ S3 o 2, wpp nic nie rób (nieblokująca) Operacje nieblokujące dają w wyniku wartość logiczną true, gdy operacja się powiodła i false wpp Funkcje na semaforach wart(s) - wartość semafora S czekp(s) - liczba procesów czekających na P(S) czekz(s) - liczba procesów czekających na Z(S) Uwaga: w języku C zapisuje się to inaczej Semafory str. 10