Monitory. Jarosław Kuchta

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ę.

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 równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

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

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

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

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

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

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

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. Zajęcia 11. Monitory

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

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

Monitory. Wady semafora

Programowanie Równoległe i Rozproszone

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

synchronizacji procesów

synchronizacji procesów

Programowanie wspóªbie»ne

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

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

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

Programowanie wielowątkowe. Tomasz Borzyszkowski

Synchronizacja procesów i wątków

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

Język Java wątki (streszczenie)

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

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

Podstawy współbieżności

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

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

Język Java wątki (streszczenie)

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

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

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

Wątki w Javie. Piotr Tokarski

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

Programowanie Współbieżne. Monitory

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

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

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

Synchronizacja procesów

Współbieżność w Javie

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Problemy współbieżności

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

Platformy Programistyczne Podstawy języka Java

Programowanie obiektowe

Systemy Operacyjne synchronizacja i komunikacja procesów

Programowanie wspóªbie»ne

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

Programowanie obiektowe

Współbieżność w Javie

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

Synchronizacja procesów

Systemowe mechanizmy synchronizacji procesów

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

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

Systemy Rozproszone - Ćwiczenie 4

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

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

Model pamięci. Rafał Skinderowicz

Programowanie obiektowe

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

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

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

Algorytmy i Struktury Danych. Anna Paszyńska

Synchronizacja procesów

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

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

Java: interfejsy i klasy wewnętrzne

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Rozwi zania klasycznych problemów w Rendezvous

Kurs programowania. Wykład 8. Wojciech Macyna

3URJUDPRZDQLHZVSyáELH*QHZVWS

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Wielozadaniowość w systemie Microsoft Windows

Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Java. Programowanie Obiektowe Mateusz Cicheński

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wykład 4: Klasy i Metody

Programowanie współbieżne i równoległe. Część 2

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

Wprowadzenie do programowania współbieżnego

SOP2 - semafory. grudzień

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

Diagramy stanów tworzenie modeli analizy i projektowania Na podstawie UML 2.0 Tutorial

Wprowadzenie do języka Java

Programowanie w Ruby

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Kurs programowania. Wykład 9. Wojciech Macyna

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Metody Metody, parametry, zwracanie wartości

Programowanie obiektowe

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

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Transkrypt:

Monitory Jarosław Kuchta

Co to jest monitor Monitor to zebrane w jednej konstrukcji programowej zmienne i operacje na tych zmiennych. Część tych operacji jest udostępnianych na zewnątrz monitora. Tylko udostępnione operacje umożliwiają działanie na zmiennych. Wykonanie operacji monitora jest sekcją krytyczną wykonującego ją procesu. Wewnątrz monitorowanej operacji istnieje możliwość wstrzymywania i wznawiania procesów.

Szczegóły zmienna c typu condition umożliwia wstrzymywanie / wznawianie procesów posiada własną kolejkę procesów operacje: wait(c) powoduje wstrzymanie procesu wykonującego tę operację; proces jest wstawiany na koniec kolejki właściwej dla zmiennej c; monitor jest zwalniany signal(c) powoduje wznowienie wstrzymanego procesu; wznawiany jest pierwszy proces z kolejki właściwej dla zmiennej c; proces ten czeka, aż proces wywołujący tę operację zwolni monitor empty(c) funkcja sprawdzająca, czy kolejka właściwa dla zmiennej c nie jest pusta

Przechodzenie procesów przez monitor P M.P(1.0) kolejka wejściowa kolejka procesów wstrzymanych po signal void P(float x) wait (C); signal (C); Monitor M kolejka procesów oczekujących na C

Przykłady Wzajemne wykluczanie Producenci i konsumenci Czytelnicy i pisarze Pięciu filozofów

Wzajemne wykluczanie static class Wykluczanie: Monitor public static void Dostęp() Enter (this); // Działanie na zasobach Exit (this); class ProcesGłówny void Działaj() // własne sprawy Wykluczanie.Dostęp(); // własne sprawy

Producenci i konsumenci Monitor Bufor; Object Producenci = new Object(); Object Konsumenci = new Object(); const int N=10;y void Produkuj (Dane element) if (n == N) Bufor.Wait (Producenci); n = n + 1; bufor[ i] = element; i = (i+1) % N; Bufor.Signal (Konsumenci); Dane[] bufor = new Dane[N]; int n=0; int i = 0; int j = 0; void Konsumuj (out Dane element) if (n == 0) Bufor.Wait (Konsumenci); n = n 1; element = bufor [j]; j = (j+1) % N; Bufor.Signal (Producenci);

void Początek_Czytania() if (ile_pisze > 0) Wait (Czytelnicy); ile_czyta++; Czytelnicy i pisarze (z możliwością zagłodzenia pisarza) class Czytelnia: Monitor Object Czytelnicy = new Object(); Object Pisarze = new Object(); int ile_czyta = 0; int ile_pisze = 0; void Koniec_Czytania() ile_czyta--; if (ile_czyta == 0) Signal (Pisarze); void Początek_Pisania() if (ile_czyta + ile_pisze > 0) Wait (Pisarze); ile_pisze = 1; void Koniec_Pisania() ile_pisze = 0; if (!Empty(Pisarze) Signal (Pisarze) else do Signal (Czytelnicy) while (!Empty(Czytelnicy))

class Czytelnia: Monitor Object Czytelnicy = new Object(); Object Pisarze = new Object(); int ile_czyta = 0; int ile_pisze = 0; void Początek_Czytania() if (!Empty(Czytelnicy) ile_pisze > 0) Wait (Czytelnicy); ile_czyta++; void Koniec_Czytania() ile_czyta--; if (ile_czyta == 0) Signal (Pisarze); Czytelnicy i pisarze (rozwiązanie poprawne) void Początek_Pisania() if (ile_czyta + ile_pisze > 0) Wait (Pisarze); ile_pisze = 1; void Koniec_Pisania() ile_pisze = 0; if (!Empty(Pisarze) Signal (Pisarze) else do Signal (Czytelnicy) while (!Empty(Czytelnicy))

class Pałeczki: Monitor int [] wolne = new int[] 2, 2, 2, 2, 2; object [] Filozof = new object[5]; Pięciu filozofów (przymiarka pierwsza) void Biorę(int i) while (wolne [i] < 2) Wait (Filozof [i]); wolne [(i 1 ) % 5] = wolne [(i 1) % 5] - 1; wolne [(i+1) % 5] = wolne [(i+1) % 5] - 1; void Odkładam(int i) wolne [(i 1) % 5] = wolne [(i 1) % 5] + 1; wolne [(i+1) % 5] = wolne [(i+1) % 5] + 1; Signal (Filozof[(i 1) % 5]); Signal (Filozof[(i+1) % 5]);

class Pałeczki: Monitor int [] wolne = new int[] 2, 2, 2, 2, 2; object [] Filozof = new object[5]; Pięciu filozofów (przymiarka druga) void Biorę(int i) while (wolne [i] < 2) Wait (Filozof [i]); wolne [(i 1 ) % 5] = wolne [(i 1) % 5] - 1; wolne [(i+1) % 5] = wolne [(i+1) % 5] - 1; void Odkładam(int i) wolne [(i 1) % 5] = wolne [(i 1) % 5] - 1; wolne [(i+1) % 5] = wolne [(i+1) % 5] - 1; if (wolne[(i-1) % 5] == 2) Signal (Filozof[(i 1) % 5]); if (wolne[(i+1) % 5] == 2) Signal (Filozof[(i+1) % 5]);

Pięciu filozofów (rozwiązanie poprawne) class Pałeczki: Monitor bool [] zajęta = new bool[5]; object [] Pałeczka = new object[5]; object Lokaj = new object(); void Biorę(int i) if (ile_je == 4) Wait (Lokaj); ile_je ++; if (zajęta [i]) Wait (Pałeczka [i]); zajęta[ i] = true; if (zajęta[(i+1) % 5]) Wait (Pałeczka [(i+1) % 5]); zajęta[(i+1) % 5] = true; int ile_je = 0; void Odkładam(int i) zajęta [i] = false; Signal (Pałeczka[i]); zajęta [(i+1) % 5] = false; Signal (Pałeczka[(i+1) % 5]); ile_je --; Signal (Lokaj);

Implementacje Monitora Zmienne warunkowe z blokowaniem Zmienne warunkowe bez blokowania Monitory z niejawnym warunkiem

Zmienne warunkowe z blokowaniem (monitor Hoara) wątek powiadamiający jest blokowany do czasu, aż powiadomiony wątek oczekujący nie opuści monitora lub nie zatrzyma się w ponownym oczekiwaniu na warunek. dwie główne kolejki wątków: e - kolejka wejściowa s - kolejka wątków powiadamiających każda zmienna warunkowa c posiada własną kolejkę c.q wątków oczekujących na spełnienie warunku. a.q b.q enter e s wait(a) signal wait(b) exit

Zmienne warunkowe bez blokowania (monitor Massy) operacja signal nie powoduje opuszczenia monitora wątek oczekujący jest przenoszony do kolejki e, aby zaczekać, aż wątek powiadamiający zakończy swoje zadanie kolejka s jest niepotrzebna operacja signal nazywa się teraz notify a.q b.q enter notified e notified wait(b) wait(a) exit

Monitory z niejawnym warunkiem W języku Java każdy obiekt może stać się monitorem metody wykluczane są oznaczone słowem kluczowym synchronized. monitor ma kolejkę wejściową i pojedynczą kolejkę wszystkie operacje dotyczą tej jednej kolejki (najwyżej jeden warunek) q enter e notified wait exit

Klasa Monitor w C# (1) public static class Monitor public static void Enter (Object obj) wejście do monitora public static bool TryEnter (Object obj) public static bool TryEnter (Object obj, int millisecondstimeout) public static bool TryEnter (Object obj, TimeSpan timeout) public static void Exit (Object obj) wyjście z monitora

Klasa Monitor w C# (2) public static bool Wait (Object obj) oczekiwanie public static bool Wait (Object obj, int millisecondstimeout) public static bool Wait(Object obj, TimeSpan timeout) public static bool Wait (Object obj, int millisecondstimeout, bool exitcontext) public static bool Wait( Object obj, TimeSpan timeout, bool exitcontext ) public static void Pulse (Object obj) sygnalizacja public static void PulseAll (Object obj) sygnalizacja do wszystkich