SOP2 - semafory. grudzień

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

Programowanie Równoległe i Rozproszone

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

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

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

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

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

Klasyczne problemy synchronizacji

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

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

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

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

Wprowadzenie do programowania współbieżnego

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

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

Programowanie wspóªbie»ne

Synchronizacja procesów

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

Programowanie Równoległe i Rozproszone

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 i wątków

Problemy współbieżności

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

synchronizacji procesów

synchronizacji procesów

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

Równoległość i współbieżność

Równoległość i współbieżność

Komunikacja asynchroniczna w modelu rozproszonym

Systemy Operacyjne synchronizacja i komunikacja procesów

Synchronizacja procesów

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

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

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

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

Synchronizacja procesów

Monitory. Jarosław Kuchta

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

Programowanie współbieżne Zadanie 5 - Podstawowe problemy programowania współbieżnego

Systemy operacyjne. Zajęcia 11. Monitory

Wydział Fizyki i Informatyki Stosowanej, Uniwersytetu Łódzkiego Łódź. Java podstawy języka, wykład 4 1

Zagadnienia zaawansowane. Lech Kruś,

Monitory. Wady semafora

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

Systemowe mechanizmy synchronizacji procesów

Synchronizacja procesów

Systemy operacyjne Wzajemne wykluczanie i synchronizacja

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

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

Sortowanie topologiczne skierowanych grafów acyklicznych

Programowanie Współbieżne. Monitory

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

3URJUDPRZDQLHZVSyáELH*QHZVWS

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

Programowanie wielowątkowe. Tomasz Borzyszkowski

Systemy operacyjne III

Temat zajęć: Mechanizmy IPC: semafory

Przegląd zagadnień programowania wspólbieżnego

Programowanie współbieżne i rozproszone w języku Java

Pascal - wprowadzenie

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

1. Działania na procesach

Wprowadzenie do programowania współbieżnego i rozproszonego

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

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Modelowanie procesów współbieżnych

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

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

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Zasady Programowania Strukturalnego

Stany procesu. nowy aktywny oczekujący gotowy zakończony. zakończ. nowy. przerwanie gotowy aktywny. we/wy czek. we/wy czekający

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

Lock Manager Deadlock Źródła Jak starczy czasu. Dreadlocks. Konrad Błachnio MIMUW 19 maja 2010

Informatyka 1. Przetwarzanie tekstów

Wstęp do programowania

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

Luty 2001 Algorytmy (7) 2000/2001

Algorytmy i struktury danych

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku.

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

1 Wprowadzenie do algorytmiki

Programowanie wspóªbie»ne

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

Sortowanie. Kolejki priorytetowe i algorytm Heapsort Dynamiczny problem sortowania:

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Algorytmy i struktury danych

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

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

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

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

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Wzajemne wykluczanie i zakleszczenie

Detekcja zakleszczenia (1)

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

2 Implementacja w systemie Linux 2.4

Problem detekcji zakończenia

Transkrypt:

SOP2 - semafory grudzień 2010 1

Plan prezentacji Problem producent-konsument Problem czytelników i pisarzy Problem jedzących filozofów grudzień 2010 2

Producent-konsument var bufor: array [0..n-1] of produkt; pierwszy: 0..n-1; licznik: 0..n; grudzień 2010 3

Producent-konsument PRODUCENT: repeat wyprodukuj jednostkę produktu; P(puste); P(S); bufor [(pierwszy+licznik) mod n] := wyprodukowana jednostka; licznik := licznik + 1; V(S); V(pełne) until false grudzień 2010 4

Producent-konsument KONSUMENT: repeat P(pełne); P(S); pobrana jednostka := bufor [pierwszy]; pierwszy := (pierwszy + 1) mod n; licznik := licznik - 1; V(S); V(puste); skonsumuj pobraną jednostkę until false grudzień 2010 5

Problem czytelników i pisarzy [1] Opis problemu wersja podstawowa: Jest n czytelników, m pisarzy i jedna wspólna strona. Każdy czytelnik czyta informacje ze strony, każdy pisarz może pisać na stronie; Wielu czytelników może naraz czytać dane ze strony; Pisarz zajmuje stronę na wyłączność (żaden inny proces pisarz czy czytelnik nie może używać w tym czasie strony); Nie ma ograniczeń czasowych na czytanie i pisanie, ale operacje te są skończone; grudzień 2010 6

Problem czytelników i pisarzy [2] Rozwiązanie: Pisarz: Robi coś; Chce pisać; Pisze; Informuje, że skończył pisać; Czytelnik: Robi coś; Chce czytać; Czyta; Informuje, że skończył czytać; grudzień 2010 7

Problem czytelników i pisarzy [3] - założenia int no_of_r = 0; /* liczba procesów - czytelników aktualnie czytających*/ Boolean semaphore sp, w = 1, 1 ; /* w służy do synchronizacji dostępu do no_of_r, sp służy do synchronizacji dostępu do strony */ grudzień 2010 8

Problem czytelników i pisarzy [3] - czytelnik process :: reader; void main() while(1) P(w); no_of_r ++; if (no_of_ r == 1) P(sp); /* pierwszy czytający proces opuszcza sp */ V(w); /* czyta ze strony*/ P(w); no_of_r --; if (no_of_r == 0) V(sp); /* ostatni czytający proces podnosi semafor sp */ V(w); grudzień 2010 9

Problem czytelników i pisarzy [3] - pisarz process :: writer; void main() while(1) P(sp); /* każdy piszący proces musi opuścić semafor sp*/ /* pisze na stronie */ V(sp); grudzień 2010 10

Problem czytelników i pisarzy [4] priorytet pisarzy Problem czytelników i pisarzy z priorytetem dla pisarzy. Dodajemy dwa dodatkowe warunki do zadania: Pisarze mają priorytet, czyli, jeśli jakikolwiek pisarz chce pisać, żaden czytelnik nie może zacząć czytać. Nie ma priorytetu pomiędzy czytelnikami. grudzień 2010 11

Problem czytelników i pisarzy [5] założenia int no_of_r,no_of_w = 0,0; /* no_of_r - liczba aktualnie czytających procesów no_of_w liczba procesów, które chcą pisać */ Boolean semaphore sp,sr = 1, 1; Boolean semaphore w1, w2, w3= 1, 1, 1; /* w1 do dostępu do no_of_r w2 do dostępu do no_of_w w3 dodatkowe drzwi dla czytelników sp dostęp do czytanej strony sr dla priorytetu pisarzy */ grudzień 2010 12

Problem czytelników i pisarzy [6] czytelnik process:: reader; void main() while(1) P(w3); P(sr); P(w1); no_of_r++; if (no_of_r == 1) P(sp); V(w1); V(sr); V(w3); /* czyta */ P(w1); no_of_r--; if ( no_of_r == 0) V(sp); V(w1); process :: writer; void main(); while(1) P(w2); no_of_w++; if (no_of_w == 1 ) P(sr); V(w2); P(sp); /* pisze */ V(sp); P(w2); no_of_w--; if (no_of_w==0) V(sr); V(w2); grudzień 2010 13

Semafory [2] Uogólnione operacje na semaforach Wartość semafora jest zmieniana o wartość całkowitą n. P(s,n); Waiting until s >= n; s=s-n; V(s,n); s = s+n; grudzień 2010 14

Czytelnicy i pisarze [7] Problem czytelników i pisarzy na semaforach uogólnionych semaphore w = M; process :: reader while(1) P(w,1); /*M może zwiększyć w o 1 */ /* teraz czyta */ V(w,1); process :: writer while(1) P(w,M); /* tylko jeden proces może zmniejszyć w o M*/ /* teraz pisze*/ V(w,M); grudzień 2010 15

Czytelnicy i pisarze [8] Problem czytelników i pisarzy na semaforach uogólnionych z priorytetem pisarzy semaphore sp, r = M,M ; /* M>= liczby możliwych czytelników sp podobnie jak we wcześniejszym przykładzie r dla realizowania priorytetu pisarzy */ grudzień 2010 16

Czytelnicy i pisarze [9] process :: reader; void main() while(1) P(r,M); P(sp,1); V(r,M-1); /*pisarze mogą zwiększyć semafor r o 1*/ V(r,1); /*czytelnik czeka jeśli jakiś pisarz czeka*/ /* teraz czyta */ V(sp,1); process :: writer void main() while(1) P(r,1); P(sp,M); /* pisze */ V(sp,M); V(r,1); grudzień 2010 17

Problem jedzących filozofów [1] Problem jedzących filozofów czasami nazywany problemem pięciu filozofów Grupa filozofów siedzi przy okrągłym stole Każdy rozmyśla, aż zgłodnieje Kiedy filozof jest głodny je Bierze po jednym widelcu z każdej z jego stron Jak skończy jeść kontynuuje rozmyślania Na stole jest tylko 5 widelców, sytuację tą przedstawia rysunek (nast. Slajd) Jak zsynchronizować działania filozofów by uniknąć zakleszczenie oraz zagłodzenia? grudzień 2010 18

Problem jedzących filozofów [2] grudzień 2010 19

Problem jedzących filozofów [3] Problem jedzących filozofów czasami nazywany problemem pięciu filozofów N filozofów siedzi dokoła okrągłego stołu, każdy na swoim miejscu. Jest n talerzy i n widelców na stole. Talerze znajdują się na wprost filozofów, widelce leżą pomiędzy talerzami. Czynności filozofa: Pętla: Myśli Chce podnieść swoje widelce Je posługując się widelcami Odkłada widelce grudzień 2010 20

Rozwiązanie 1. Problem jedzących filozofów [4] var widelec:array[0..4] of semaphore; i:integer; begin for i:=0 to 4 do widelec[i]:=1; parallel_begin filozof(0); filozof(1); filozof(2); filozof(3); filozof(4); parallel_end end grudzień 2010 21

Problem jedzących filozofów [5] Rozwiązanie 1. procedure filozof(i:integer); begin repeat myśl; P(widelec[i]); P(widelec[(i+1)mod 5]); jedz; V(widelec[i]); V(widelec[(i+1)mod 5]); forever end; grudzień 2010 22

Rozwiązanie 1. Problem jedzących filozofów [6] Semafory zapewniają wzajemne wykluczanie przy dostępie do widelców Zapewnione bezpieczeństwo (jedzenie po zakończeniu oczekiwania na 2 widelce-semafory) Możliwość blokady jeśli filozofowie się zsynchronizują i równocześnie biorą lewe widelce grudzień 2010 23

Problem jedzących filozofów [7] Rozwiązanie 2. Ograniczenie liczby talerzy Ograniczenie talerzy do 4 Każdy widelec to semafor, początkowo równy 1 Wzięcie widelca = P Odłożenie widelca = V Talerze to semafor o początkowej wartości 4 Widelce ponumerowane od 0..4 grudzień 2010 24

Problem jedzących filozofów [8] var paleczki: array [0..4] of semaphore; talerze: semaphore = 4; procedure filozof(i: 0..4); begin repeat myśl; P(talerz); P(paleczki[i]); P(paleczki[(i + 1) mod 5]); jedz; V(paleczki[i]); V(paleczki[(i + 1) mod 5]); V(talerz); until false end; grudzień 2010 25

Problem jedzących filozofów [7] Rozwiązanie 3. Hierarchia zasobów Częściowe uporządkowanie i hierarchia zasobów Zasób = widelec Widelce pobierane są w ustalonej kolejności np. rosnącej Widelce odkładane są w odwrotnej kolejności malejącej Brak zakleszczeń Nie jest szczególnie wydajne grudzień 2010 26

Problem jedzących filozofów [7] Rozwiązanie 4. Ze stanami filozofów state[i] = 0 i-ty filozof myśli state[i] = 1 i-ty filozof chce jeść state[i] = 2 i-ty filozof je resource fork [N]; Boolean semaphore filsem [N] = (N) 0; /*każdy filozof ma swój własny semafor do czekania*/ int state [N] = (N) 0 ; Boolean semaphore w = 1; /* w do dostępu do tablicy stanów */ void test (int k); if ((state [(k-1)% N] <> 2 ) and ( state[k]== 1) and ( state[(k+1)%n] <> 2 )) state [k] = 2; V(filsem[k]); grudzień 2010 27

Problem jedzących filozofów [7] process Philosopher (int name); while(1) /* myśli */ /* chce jeść */ P(w); state[name] = 1; test (name); V(w); P ( filsem[name] ); /* filsem[name] moŝe zostać opuszczony, jeśli został podniesiony w procedurze test(name) */ request (fork[name], fork [(name+1) % N] ) ; /* je */ release (fork[name], fork [(name+1) % N]) ; P(w); state[name] = 0; test ((name-1) % N); test ((name+1) % N); /* sprawdzamy obydwu sąsiadów czy czekają */ /* odpowiednie semafory są podnoszone */ V(w); grudzień 2010 28