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

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

Monitory. Jarosław Kuchta

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

Systemy operacyjne. Zajęcia 11. Monitory

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

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

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

Język Java wątki (streszczenie)

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

Monitory. Wady semafora

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

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

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

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

Język Java wątki (streszczenie)

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003

Współbieżność w środowisku Java

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

Programowanie Równoległe i Rozproszone

Programowanie wielowątkowe. Tomasz Borzyszkowski

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

Wątki w Javie. Piotr Tokarski

Podstawy współbieżności

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

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

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

synchronizacji procesów

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

synchronizacji procesów

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

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

Programowanie współbieżne Zadanie numer 3 Monitory

Synchronizacja procesów i wątków

Programowanie Współbieżne. Monitory

Kurs programowania. Wykład 8. Wojciech Macyna

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

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017

Model pamięci. Rafał Skinderowicz

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

Wielowątkowość mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

Programowanie współbieżne Laboratorium nr 12

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

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

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Współbieżność w Javie

SOP2 - semafory. grudzień

Programowanie wspóªbie»ne

Synchronizacja procesów

Programowanie współbieżne Zadanie nr 4 Spotkania

Wstęp do programowania 2

Wprowadzenie do programowania współbieżnego

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

Współbieżność w Javie

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

Synchronizacja procesów

Model pamięci. Rafał Skinderowicz

4. Procesy pojęcia podstawowe

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

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

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

5. Model komunikujących się procesów, komunikaty

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

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

Generatory. Michał R. Przybyłek

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

Systemy operacyjne Wzajemne wykluczanie i synchronizacja

Systemy Operacyjne synchronizacja i komunikacja procesów

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

Systemowe mechanizmy synchronizacji procesów

Programowanie komputerów

Systemy Rozproszone - Ćwiczenie 4

Problemy współbieżności

3URJUDPRZDQLHZVSyáELH*QHZVWS

Systemy operacyjne. Studia podyplomowe Wydział Informatyki PB

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

Programowanie obiektowe

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Systemy operacyjne III

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

4. Procesy pojęcia podstawowe

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

KOLEJKA (QUEUE) (lista fifo first in, first out)

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

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

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

Programowanie wspóªbie»ne

Składowane procedury i funkcje

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

9. Problem wzajemnego wykluczania i sekcji krytycznej

Programowanie obiektowe

Zaawansowany kurs języka Python

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

Klasy abstrakcyjne i interfejsy

10. Synchronizacja użycia zasobów, Semafory

Program współbieżny jest zbiorem sekwencyjnych PROGRAMOWANIE C++

Współczesne aplikacje sterowania i akwizycji danych są zbiorem komunikujących się wątków lub procesów współbieżnych.

Transkrypt:

J. Ułasiewicz Programowanie aplikacji współbieżnych 1 11 11.1 abstrakcyjne Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację. Monitor (Brinch Hansen, Hoare) jest strukturalnym narzędziem synchronizacji. zaimplementowane w językach: Java, Modula-3, Concurrent Pascal, Concurrent Euclid. Definicja monitora 1. Zmienne i działające na nich procedury zebrane są w jednym module. Dostęp do zmiennych monitora możliwy jest tylko za pomocą procedur monitora. 2. W danej chwili tylko jeden proces wykonywać może procedury monitora. Gdy inny proces wywoła procedurę monitora będzie on zablokowany do chwili opuszczenia monitora przez pierwszy proces. 3. Istnieje możliwość wstrzymania i wznowienia procedur monitora za pomocą zmiennych warunkowych (ang. conditional variables). Na zmiennych warunkowych można wykonywać operacje Wait i Signal. Wait(c) - Wstrzymanie procesu bieżącego wykonującego procedurę monitora i wstawienie go na koniec kolejki związanej ze zmienną warunkową c. Jeżeli jakieś procesy czekają na wejście do monitora to jeden z nich będzie wpuszczony. Signal(c) Odblokowanie jednego z procesów czekających na zmiennej warunkowej c. Gdy brak czekających procesów operacja nie daje efektów. Operacja Signal jest bezpamięciowa (nie posiada licznika).

J. Ułasiewicz Programowanie aplikacji współbieżnych 2 Notempty(c) Funkcja zwraca true gdy kolejka c jest niepusta, false gdy pusta. Jeśli nie jest to ostatnia instrukcja procedury monitora to proces wykonujący tę operację jest wstrzymany do chwili gdy wznowiony przezeń proces zwolni monitor. Wstrzymany tak proces może przebywać w: wejściowej kolejce procesów oczekujących na wejście do monitora kolejce uprzywilejowanej Które rozwiązanie zastosowano zależne jest od implementacji. P1 wejście do monitora wait(c) P1 wyjście z monitora P1 P2 P2 wejście do monitora signal(c) P2 wyjście z monitora oczekujące na wejście do monitora MONITOR Zmienne warunkowe C1 C2 CN Kolejka 1 Kolejka 2 Kolejka N Kolejka uprzywilejowana Zmienne Procedury P1 P2 Pk wstrzymane na zmiennych warunkowych Kolejki monitora

J. Ułasiewicz Programowanie aplikacji współbieżnych 3 oczekujące na wejście do monitora FIFO wstrzymane na Signal(c) LIFO Przykład monitora MONITOR MON; VAR c: CONDITION PROCEDURE PR1() BEGIN Wait(c); END PR1; PROCEDURE PR1() BEGIN. Signal(c); END PR2; END MON; wstrzymane na Wait(c) FIFO 11.1.1 Rozwiązanie problemu wzajemnego wykluczania za pomocą monitorów monitor WzajemneWykluczanie int z1,z2; Pisz(int x1, int x2){ z1 = x1; z2 = x2; Czytaj(int *x1, int *x2){ *x1 := z1; *x2 := z2; Procedury Czytaj lub pisz wykonane będą w sposób wyłączny co wynika z definicji monitora.

J. Ułasiewicz Programowanie aplikacji współbieżnych 4 11.1.2 Rozwiązanie problemu producenta i konsumenta za pomocą monitorów P1 Producent Buf x x x x K1 Konsumenci Out Inp monitor ProducentKonsument #define N 8 Record Buf[N]; // Bufor na rekordy int Ile; // Ile rekordów w buforze int Inp,Out; // Indeks wejściowy i wyjściowy CONDITION Prod; // Czekający producenci CONDITION Cons; // Czekający konsumenci Wstaw(Record x ) { if(ile == N) { Wait(Prod); Inp := (Inp+1) % N; Buf(Inp) = x; Ile ++; Signal(Cons); Pobierz(Record *x ) { if(ile == 0) { Wait(Cons); Out := (Out+1) % N; *x = Buf(Inp)x; Ile --; Signal(Prod); Rozwiązanie problemu producenta / konsumenta za pomocą monitora Hoare a (monitor ze wznawianiem).

J. Ułasiewicz Programowanie aplikacji współbieżnych 5 11.1.3 Rozwiązanie problemu czytelników i pisarzy za pomocą monitorów monitor CzytelnicyPisarze condition Pisanie, Czytanie;// Kolejka pisarzy i czytelników int ReaderCount = 0; // Liczba czytelników w czytelni Boolean zajety = false; // true gdy w czytelni jest pisarz procedure StartRead() { if (zajety) // Gdy czytelnia zajęta - blokada Wait(Czytanie); ReaderCount++; Signal(Czytanie); // Wpuść następnego czytelnika EndRead() { ReaderCount-- ; if(readercount == 0) // Ostatni Czyt. wpuszcza pisarzy Signal(Pisanie); StartWrite() { // Czekaj gdy w czytelni jest pisarz lub czytelnicy if(zajety ReaderCount!= 0) Wait(Pisanie); zajety = true; EndWrite() { zajety = false; // Gdy czekają czytelnicy to ich wpuść // Gdy czytelnicy nie czekają wpuść pisarzy if (Notempty(Czytanie)) Signal(Czytanie); else Signal(Pisanie); Reader() { while (true) { StartRead(); Czytaj(); // Wykonaj procedurę czytania EndRead(); Writer() { while (true) { StartWrite(); Pisz(); // Wykonaj procedurę pisania EndWrite();

J. Ułasiewicz Programowanie aplikacji współbieżnych 6 11.2 z powiadamianiem i rozgłaszaniem W omawianych poprzednio monitorach Hoara a wystąpienie operacji Signal(c) musi spowodować natychmiastowe wznowienie procesu oczekującego na zmiennej warunkowej c. z powiadamianiem Inne rozwiązanie stosowane jest w monitorach z powiadamianiem (wprowadzone -Lampson, Redell w języku Mesa). Zdefiniowana tam operacja Notify(c) powoduje odblokowanie jednego z procesów związanej ze zmienną warunkową c ale proces ten nie musi być natychmiast zaszeregowany. monitor ProducentKonsument #define N 8 Record Buf[N]; // Bufor na rekordy int Ile; // Ile rekordów w buforze int Inp,Out; // Indeks wejściowy i wyjściowy CONDITION Prod; // Czekający producenci CONDITION Cons; // Czekający konsumenci Wstaw(Record x ) { while(ile == N) Wait(Prod); Inp := (Inp+1) % N; Buf(Inp) = x; Ile ++; Notify(Cons); Pobierz(Record *x ) { while(ile == 0) Wait(Cons); Out := (Out+1) % N; *x = Buf(Inp)x; Ile --; Notify (Prod); Rozwiązanie problemu producenta / konsumenta za pomocą monitora z powiadamianiem z rozgłaszaniem NotifyAll(c) powoduje odblokowanie wszystkich z procesów związanej ze zmienną warunkową c. Proces te będą konkurowały o dostęp do monitora. Będą zaszeregowane gdy będzie to możliwe.

J. Ułasiewicz Programowanie aplikacji współbieżnych 7 11.3 w Javie W javie obiekt może posiadać dokładnie jeden monitor z nim stowarzyszony. Jednakowoż może być wiele punktów wejścia do monitora. - Każde wejście do monitora oznaczone jest słowem kluczowym synchronized. - Monitor związany jest z obiektem a nie klasą. Gdy wątek przechodzi instrukcje oznaczone jako synchronized to tak jakby zamykał drzwi do monitora. Synchronizacja w Javie może być wykonana na poziomie: 1. Metod słowo kluczowe synchronized występuje przy definiowaniu metody - np. public synchronized int get() { 2. Obiektów i bloków - słowo kluczowe synchronized występuje przy definiowaniu bloku instrukcji np. synchronized(p) { safex = p.x; safey = p.y; synchronized(this) {

J. Ułasiewicz Programowanie aplikacji współbieżnych 8 W1 W2 synchronized wątek W1 w monitorze wyjście odblokowanie synchronized wyjście blokada wątek W2 czeka wątek W2 w monitorze Rys. 1 Dostęp do obiektu synchronizowany przez monitor Zapewnienie wzajemnego wykluczania metod synchronizowanych nie wystarczy do rozwiązania wielu zagadnień synchronizacji. Co zrobić gdy wewnątrz synchronizowanej metody nastąpi konieczność oczekiwania na pewien zasób?. Jakby zastosować aktywne czekanie to inne wątki miały by zablokowany dostęp do monitora. Konieczna jest implementacja metody wstrzymywania i wznawiania wątku wewnątrz monitora. Metoda wait() public final void wait(); public final void wait(long timeout); public final void wait(long timeout,int nanos) throws InterruptedException Wykonanie metody powoduje zawieszenie bieżącego wątku do czasu gdy inny watek nie wykona metody notify() lub notifyall() odnoszącej się do wątku w który wykonał wait(). Uwaga! Wątek wykonujący wait() musi być w posiadaniu monitora dotyczącego synchronizowanego obiektu. Wykonanie wait() powoduje zwolnienie monitora.

J. Ułasiewicz Programowanie aplikacji współbieżnych 9 Metoda notify() public final void notify() Metoda powoduje odblokowanie jednego z wątków zablokowanych na monitorze pewnego obiektu poprzez wait(). Który z czekających wątków będzie odblokowany nie jest w definicji metody określone. Uwaga! Odblokowany wątek nie będzie natychmiast wykonywany musi on jeszcze zaczekać aż zwolniona będzie przez bieżący wątek blokada monitora. Odblokowany wątek będzie konkurował z innymi o nabycie blokady monitora. Uwaga! Metoda notify() i notifyall może być wykonana tylko przez wątek który jest właścicielem monitora obiektu. Wątek staje się właścicielem monitora obiektu gdy: Wykona synchronizowaną metodę instancji tego obiektu. Wykona synchronizowane wyrażenia tego obiektu. Gdy wątek nie jest w posiadaniu monitora obiektu generowany jest wyjątek. IllegalMonitorStateException. Metoda notifyall() public final void notifyall() Metoda powoduje odblokowanie wszystkich wątków zablokowanych na monitorze pewnego obiektu poprzez uprzednie wykonanie wait(). Uwaga! Wątki będą jednak czekały aż do chwili gdy wątek bieżący zwolni blokady monitora. Odblokowane wątki będą konkurowały o nabycie blokady monitora.