Klasyczne problemy synchronizacji

Podobne dokumenty
SOP2 - semafory. grudzień

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

synchronizacji procesów

synchronizacji 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

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

Programowanie Równoległe i Rozproszone

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

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

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

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

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

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

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

Problemy współbieżności

Synchronizacja procesów

Synchronizacja procesów i wątków

Programowanie wspóªbie»ne

Systemy operacyjne III

Wprowadzenie do programowania współbieżnego

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

3URJUDPRZDQLHZVSyáELH*QHZVWS

Systemowe mechanizmy synchronizacji procesów

Kolejki FIFO (łącza nazwane)

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

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

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

Procesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

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

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

Dynamiczne struktury danych

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.

IPC: Kolejki komunikatów

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

Temat zajęć: Mechanizmy IPC: semafory

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

Klient-Serwer Komunikacja przy pomocy gniazd

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

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

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

Projekt systemy operacyjne 2 - Systemowe mechanizmy synchr

Warstwy oprogramowania wejścia/wyjścia

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

Systemy Operacyjne synchronizacja i komunikacja procesów

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

Komunikacja asynchroniczna w modelu rozproszonym

Inicjacja tablicy jednowymiarowej

Nazwa Wydziału Nazwa jednostki prowadzącej moduł Nazwa modułu kształcenia Kod modułu Język kształcenia Efekty kształcenia dla modułu kształcenia

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

Odwrotna Notacja Polska

Monitory. Jarosław Kuchta

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

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

2 Implementacja w systemie Linux 2.4

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

Synchronizacja procesów

Laboratorium z systemów operacyjnych. System plików - funkcje systemowe. Anna Wojak

Plan prezentacji: 1. Czym jest proces? 2. Czym jest wątek? 3. Funkcje do zarządzania wątkami w Win32API. 4. Mechanizmy synchronizacji wątków

Biblioteka standardowa - operacje wejścia/wyjścia

Synchronizacja procesów

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Systemy operacyjne. Zajęcia 11. Monitory

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

Podstawy programowania skrót z wykładów:

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

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

Zmienne i struktury dynamiczne

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

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Wskaźniki w C. Anna Gogolińska

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

Listy, kolejki, stosy

Multiprocessor Shared-Memory Information Exchange. Damian Klata, Adam Bułak

Obsługa plików Procesy

Podstawy programowania w języku C++

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

I.Wojnicki, Tech.Inter.

Strategia "dziel i zwyciężaj"

System plików warstwa logiczna

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

PROCESORY SYGNAŁOWE - LABORATORIUM. Ćwiczenie nr 03

Instrukcja poruszania się po katalogu on-line

Temat zajęć: Tworzenie i obsługa wątków.

Programowanie wspóªbie»ne

Pomoc dla użytkowników systemu asix 6 i 7. Drajwer Bufor. Dok. Nr PLP6021 Wersja:

Technika mikroprocesorowa. Systemy operacyjne czasu rzeczywistego

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 i rozproszone w języku Java

MULTI INTEGRATOR Instrukcja instalacji, konfiguracji.

STL Standardt Template Library (wprowadzenie)

System plików warstwa fizyczna

System plików warstwa fizyczna

System plików warstwa fizyczna

Programowanie w językach wysokiego poziomu

I.Wojnicki, PHP. PHP PHP Hypertext Preprocessor. Igor Wojnicki. Ktedra Informatyki Stosowanej Akademia Górniczo-Hutnicza w Krakowie.

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Transkrypt:

Klasyczne problemy synchronizacji Systemy Operacyjne 2 laboratorium Mateusz Hołenko 19 grudnia 2011

Plan zajęć 1 Synchronizacja 2 Problem producenta / konsumenta 3 Problem pięciu filozofów 4 Problem czytelników i pisarzy Mateusz Hołenko Klasyczne problemy synchronizacji [1/23]

Synchronizacja

Co to jest synchronizacja? synchronos stgr. równoczesny koordynacja zdarzeń w czasie synchronizacja zegarków aby wskazywały ten sam czas synchronizacja dostępu do danych aby niezależne procesy nie operowały jednocześnie na tym samych danych Mateusz Hołenko Klasyczne problemy synchronizacji [3/23]

Co to jest synchronizacja? synchronos stgr. równoczesny koordynacja zdarzeń w czasie synchronizacja zegarków aby wskazywały ten sam czas synchronizacja dostępu do danych aby niezależne procesy nie operowały jednocześnie na tym samych danych Mateusz Hołenko Klasyczne problemy synchronizacji [3/23]

Co to jest synchronizacja? synchronos stgr. równoczesny koordynacja zdarzeń w czasie synchronizacja zegarków aby wskazywały ten sam czas synchronizacja dostępu do danych aby niezależne procesy nie operowały jednocześnie na tym samych danych Mateusz Hołenko Klasyczne problemy synchronizacji [3/23]

Co to jest synchronizacja? synchronos stgr. równoczesny koordynacja zdarzeń w czasie synchronizacja zegarków aby wskazywały ten sam czas synchronizacja dostępu do danych aby niezależne procesy nie operowały jednocześnie na tym samych danych Mateusz Hołenko Klasyczne problemy synchronizacji [3/23]

Cele synchronizacji zapobieganie anomaliom jednoczesnego dostępu utracony zapis odczyt danych pośrednich wyścig w dostępie do zasobów zapewnienie poprawnego przeplotu operacji różnych procesów jednoczesne uruchamianie wielu procesów (np. testy wydajnościowe oprogramowania) Mateusz Hołenko Klasyczne problemy synchronizacji [4/23]

Cele synchronizacji zapobieganie anomaliom jednoczesnego dostępu utracony zapis odczyt danych pośrednich wyścig w dostępie do zasobów zapewnienie poprawnego przeplotu operacji różnych procesów jednoczesne uruchamianie wielu procesów (np. testy wydajnościowe oprogramowania) Mateusz Hołenko Klasyczne problemy synchronizacji [4/23]

Cele synchronizacji zapobieganie anomaliom jednoczesnego dostępu utracony zapis odczyt danych pośrednich wyścig w dostępie do zasobów zapewnienie poprawnego przeplotu operacji różnych procesów jednoczesne uruchamianie wielu procesów (np. testy wydajnościowe oprogramowania) Mateusz Hołenko Klasyczne problemy synchronizacji [4/23]

Problem producenta / konsumenta

Opis problemu magazyn o ograniczonym rozmiarze N bufor cykliczny proces producenta wytwarzającego produkty (P ) wytworzone produkty umieszczane są w magazynie nie można umieszczać w pełnym magazynie proces konsumenta wykorzystującego produkty (C) produkty pobierane są z magazynu nie można pobierać z pustego magazynu Mateusz Hołenko Klasyczne problemy synchronizacji [6/23]

Opis problemu magazyn o ograniczonym rozmiarze N bufor cykliczny proces producenta wytwarzającego produkty (P ) wytworzone produkty umieszczane są w magazynie nie można umieszczać w pełnym magazynie proces konsumenta wykorzystującego produkty (C) produkty pobierane są z magazynu nie można pobierać z pustego magazynu Mateusz Hołenko Klasyczne problemy synchronizacji [6/23]

Opis problemu magazyn o ograniczonym rozmiarze N bufor cykliczny proces producenta wytwarzającego produkty (P ) wytworzone produkty umieszczane są w magazynie nie można umieszczać w pełnym magazynie proces konsumenta wykorzystującego produkty (C) produkty pobierane są z magazynu nie można pobierać z pustego magazynu Mateusz Hołenko Klasyczne problemy synchronizacji [6/23]

Model const int N; Product buffer[n]; Semaphore empty = 0; Semaphore full = N; int next2read = 0; int next2write = 0; N rozmiar bufora (magazynu) buffer bufor cykliczny empty semafor full semafor next2read następna komórka bufora do odczytu next2write następna komórka bufora do zapisu Mateusz Hołenko Klasyczne problemy synchronizacji [7/23]

Model const int N; Product buffer[n]; Semaphore empty = 0; Semaphore full = N; int next2read = 0; int next2write = 0; N rozmiar bufora (magazynu) buffer bufor cykliczny empty semafor full semafor next2read następna komórka bufora do odczytu next2write następna komórka bufora do zapisu Mateusz Hołenko Klasyczne problemy synchronizacji [7/23]

Producent while(true) { Product elem = CreateProduct(); P(empty); buffer[next2write] = elem; next2write = (next2write + 1) % N; V(full); } Producent tworzy produkt (potencjalnie długotrwała operacja, więc nie powinna być wykonywana w sekcji krytycznej), następnie opuszcza semafor empty. Sygnalizuje on tym samym zmniejszenie ilości dostępnych wolnych miejsc w magazynie o 1. Następnie umieszcza nowoutworzony produkt w magazynie i przesuwa wskaźnik wolnego miejsca na kolejne pole. W końcu podnosi semafor full dając znak konsumentowi, że w magazynie dostępny jest nowy produkt do pobrania. Mateusz Hołenko Klasyczne problemy synchronizacji [8/23]

Producent while(true) { Product elem = CreateProduct(); P(empty); buffer[next2write] = elem; next2write = (next2write + 1) % N; V(full); } Producent tworzy produkt (potencjalnie długotrwała operacja, więc nie powinna być wykonywana w sekcji krytycznej), następnie opuszcza semafor empty. Sygnalizuje on tym samym zmniejszenie ilości dostępnych wolnych miejsc w magazynie o 1. Następnie umieszcza nowoutworzony produkt w magazynie i przesuwa wskaźnik wolnego miejsca na kolejne pole. W końcu podnosi semafor full dając znak konsumentowi, że w magazynie dostępny jest nowy produkt do pobrania. Mateusz Hołenko Klasyczne problemy synchronizacji [8/23]

Konsument while(true) { P(full); Product elem = buffer[next2read]; next2read = (next2read + 1) % N; V(empty); Consume(elem); } Konsument opuszcza semafor full, sygnalizując producentowi zmniejszenie ilości produktów w magazynie o 1. Następnie pobiera produkt oraz przesuwa wskaźnik na kolejne pole. Podnosi semafor empty dając znak konsumentowi, że w magazynie dostępny jest nowe puste miejsce na produkt. W końcu wykorzystuje produkt (poza sekcją krytyczną). Mateusz Hołenko Klasyczne problemy synchronizacji [9/23]

Konsument while(true) { P(full); Product elem = buffer[next2read]; next2read = (next2read + 1) % N; V(empty); Consume(elem); } Konsument opuszcza semafor full, sygnalizując producentowi zmniejszenie ilości produktów w magazynie o 1. Następnie pobiera produkt oraz przesuwa wskaźnik na kolejne pole. Podnosi semafor empty dając znak konsumentowi, że w magazynie dostępny jest nowe puste miejsce na produkt. W końcu wykorzystuje produkt (poza sekcją krytyczną). Mateusz Hołenko Klasyczne problemy synchronizacji [9/23]

Problem wielu producentów / konsumentów Jak sądzisz? Czy zaproponowane rozwiązanie skaluje się dla wielu producentów / konsumentów? Mateusz Hołenko Klasyczne problemy synchronizacji [10/23]

Problem wielu producentów / konsumentów Zaproponowane wcześniej rozwiązanie synchronizuje dostęp dwóch klas procesów: produkującego, konsumującego. Brak jednak synchronizacji między procesami należącymi do tej samej klasy! Jak sądzisz? Co należy zrobić aby rozwiązać problem wielu producentów / konsumentów? Mateusz Hołenko Klasyczne problemy synchronizacji [11/23]

Problem wielu producentów / konsumentów Należy wprowadzić dodatkową synchronizację! Mutex s = 1; while(true) { Product elem = CreateProduct(); P(empty); P(s); buffer[next2write] = elem; next2write = (next2write + 1) % N; V(s); V(full); } while(true) { P(full); P(s); Product elem = buffer[next2read]; next2read = (next2read + 1) % N; V(s); V(empty); Consume(elem); } Mateusz Hołenko Klasyczne problemy synchronizacji [12/23]

Problem pięciu filozofów

Opis problemu filozofowie mają proste życie myślą i jedzą żywią się makaronem z miski jedzą za pomocą dwóch widelców filozofowie ze sobą nie rozmawiają Mateusz Hołenko Klasyczne problemy synchronizacji [14/23]

Opis problemu filozofowie mają proste życie myślą i jedzą żywią się makaronem z miski jedzą za pomocą dwóch widelców filozofowie ze sobą nie rozmawiają Mateusz Hołenko Klasyczne problemy synchronizacji [14/23]

Opis problemu filozofowie mają proste życie myślą i jedzą żywią się makaronem z miski jedzą za pomocą dwóch widelców filozofowie ze sobą nie rozmawiają Mateusz Hołenko Klasyczne problemy synchronizacji [14/23]

Opis problemu filozofowie mają proste życie myślą i jedzą żywią się makaronem z miski jedzą za pomocą dwóch widelców filozofowie ze sobą nie rozmawiają Mateusz Hołenko Klasyczne problemy synchronizacji [14/23]

Ilustracja problemu Mateusz Hołenko Klasyczne problemy synchronizacji [15/23]

Rozwiązanie I const int N; Mutex fork[n] = {1}; while(true) { think(); P(fork[i]); P(fork[(i + 1) % N]); eat(); V(fork[i]); V(fork[(i + 1) % N]); } N liczba filozofów fork tablica widelców (semaforów) Mateusz Hołenko Klasyczne problemy synchronizacji [16/23]

Rozwiązanie I const int N; Mutex fork[n] = {1}; while(true) { think(); P(fork[i]); P(fork[(i + 1) % N]); eat(); V(fork[i]); V(fork[(i + 1) % N]); } N liczba filozofów fork tablica widelców (semaforów) Mateusz Hołenko Klasyczne problemy synchronizacji [16/23]

Rozwiązanie II const int N; Mutex fork[n] = {1}; Semaphore waiter = N - 1; while(true) { think(); P(waiter); P(fork[i]); P(fork[(i + 1) % N]); eat(); V(fork[i]); V(fork[(i + 1) % N]); V(waiter); } N liczba filozofów fork tablica widelców (semaforów) waiter kelner podający widelce (semafor) Mateusz Hołenko Klasyczne problemy synchronizacji [17/23]

Rozwiązanie II const int N; Mutex fork[n] = {1}; Semaphore waiter = N - 1; while(true) { think(); P(waiter); P(fork[i]); P(fork[(i + 1) % N]); eat(); V(fork[i]); V(fork[(i + 1) % N]); V(waiter); } N liczba filozofów fork tablica widelców (semaforów) waiter kelner podający widelce (semafor) Mateusz Hołenko Klasyczne problemy synchronizacji [17/23]

Rozwiązanie III Rozwiązanie zaproponowane przez Dijkstrę: widelce identyfikowane są za pomocą numerów od 1 do N każdy filozof podnosi wpierw widelec o niższym identyfikatorze, dopiero potem o wyższym sztućce odkładane są w odwrotnej kolejności filozofowie od 1 do 4 biorą najpierw lewy widelec, potem prawy filozof 5 najpierw bierze prawy widelec, potem lewy Mateusz Hołenko Klasyczne problemy synchronizacji [18/23]

Problem czytelników i pisarzy

Opis problemu biblioteka jako miejsce pracy twórczej pisarzy oraz spotkań czytelników pisarzy jest wielu, jednak...... każdy z nich tworzy książki tylko w pustej bibliotece czytelnikom nie przeszkadza jednak obecność innych czytelników Mateusz Hołenko Klasyczne problemy synchronizacji [20/23]

Opis problemu biblioteka jako miejsce pracy twórczej pisarzy oraz spotkań czytelników pisarzy jest wielu, jednak...... każdy z nich tworzy książki tylko w pustej bibliotece czytelnikom nie przeszkadza jednak obecność innych czytelników Mateusz Hołenko Klasyczne problemy synchronizacji [20/23]

Opis problemu biblioteka jako miejsce pracy twórczej pisarzy oraz spotkań czytelników pisarzy jest wielu, jednak...... każdy z nich tworzy książki tylko w pustej bibliotece czytelnikom nie przeszkadza jednak obecność innych czytelników Mateusz Hołenko Klasyczne problemy synchronizacji [20/23]

Opis problemu biblioteka jako miejsce pracy twórczej pisarzy oraz spotkań czytelników pisarzy jest wielu, jednak...... każdy z nich tworzy książki tylko w pustej bibliotece czytelnikom nie przeszkadza jednak obecność innych czytelników Mateusz Hołenko Klasyczne problemy synchronizacji [20/23]

Model const int N; const int M; Mutex library = 1; Mutex aux = 1; int readers = 0; N liczba czytelników M liczba pisarzy library semafor biblioteki aux semafor aktualnej liczby czytelników readers aktualna liczba czytelników w bibliotece Mateusz Hołenko Klasyczne problemy synchronizacji [21/23]

Model const int N; const int M; Mutex library = 1; Mutex aux = 1; int readers = 0; N liczba czytelników M liczba pisarzy library semafor biblioteki aux semafor aktualnej liczby czytelników readers aktualna liczba czytelników w bibliotece Mateusz Hołenko Klasyczne problemy synchronizacji [21/23]

Proces pisarza while(true) { P(library); write(); V(library); } Przed przystąpieniem do tworzenia pisarz musi upewnić się, że jest sam w bibliotece. W tym celu opuszcza semafor binarny library. Mateusz Hołenko Klasyczne problemy synchronizacji [22/23]

Proces pisarza while(true) { P(library); write(); V(library); } Przed przystąpieniem do tworzenia pisarz musi upewnić się, że jest sam w bibliotece. W tym celu opuszcza semafor binarny library. Mateusz Hołenko Klasyczne problemy synchronizacji [22/23]

Proces czytelnika while(true) { P(aux); readers++; if (readers == 1) P(library); V(aux) read(); P(aux); readers--; if (readers == 0) V(library); V(aux); } Mateusz Hołenko Klasyczne problemy synchronizacji [23/23]