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

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

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

SOP2 - semafory. grudzień

Wprowadzenie do programowania współbieżnego

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

3URJUDPRZDQLHZVSyáELH*QHZVWS

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

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

Modelowanie procesów współbieżnych

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

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

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

Synchronizacja procesów

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

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

Synchronizacja procesów

Monitory. Jarosław Kuchta

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

Synchronizacja procesów i wątków

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

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

Komunikacja asynchroniczna w modelu rozproszonym

Systemy operacyjne. Zajęcia 11. Monitory

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

Klasyczne problemy synchronizacji

Systemy operacyjne III

synchronizacji procesów

synchronizacji procesów

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

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

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

Systemy Operacyjne synchronizacja i komunikacja procesów

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

Przegląd zagadnień programowania wspólbieżnego

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

Wprowadzenie do programowania współbieżnego i rozproszonego

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

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

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

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

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

4. Procesy pojęcia podstawowe

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

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

Monitory. Wady semafora

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

ξ II.UWr Wprowadzenie do STM

Pliki. Operacje na plikach w Pascalu

Wstęp do programowania 2

4. Procesy pojęcia podstawowe

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

3.2.4 Pięciu filozofów Zadania Implementacja semafora ogólnego za pomocą binarnego Implementacja semafora dwustronnie

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

Język programowania PASCAL

1 Wprowadzenie do algorytmiki

Programowanie Współbieżne. Wstęp

Programowanie w Turbo Pascal

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

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

Mikroprocesor Operacje wejścia / wyjścia

Podstawy programowania komputerów

dr inż. Jarosław Forenc

Programowanie współbieżne Wykład 7. Iwona Kochaoska

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Prezentacja systemu RTLinux

ECDL Podstawy programowania Sylabus - wersja 1.0

Systemowe mechanizmy synchronizacji procesów

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

Instrukcje iteracyjne (pętle)

Wstęp do programowania

Uniwersytet w Białymstoku Wydział Ekonomiczno-Informatyczny w Wilnie SYLLABUS na rok akademicki 2010/2011

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};

WHILE (wyrażenie) instrukcja;

1. Liczby i w zapisie zmiennoprzecinkowym przedstawia się następująco

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

Obsługa klawiszy specjalnych

Zagadnienia zaawansowane. Lech Kruś,

Pascal - wprowadzenie

Programowanie wielowątkowe. Tomasz Borzyszkowski

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

Problemy współbieżności

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

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

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

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.

Programowanie współbieżne Zadanie nr 4 Spotkania

Programowanie współbieżne Wykład 2. Iwona Kochańska

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

Algorytmy i struktury danych

Klient-Serwer Komunikacja przy pomocy gniazd

Podstawy Programowania C++

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

Synchronizacja procesów

Sortowanie topologiczne skierowanych grafów acyklicznych

Algorytmy dla maszyny PRAM

WHILE (wyrażenie) instrukcja;

Transkrypt:

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

Wzajemne wykluczanie Zsynchronizować N procesów, z których każdy w nieskończonej pętli na przemian wykonuje sekcję lokalną i sekcję krytyczną (tzn. kod programu zawierający wykorzystanie zasobu dzielonego), w taki sposób, aby wykonywanie sekcji krytycznych dwóch lub więcej procesów nie pokrywało się w czasie. Przykłady zagadnień rzeczywistych: dostęp do telefonu, łazienki wózek/koszyk w sklepie samoobsługowym miejsce parkingowe winda (jednoosobowa)

Założenia do problemu wzajemnego wykluczania Skończony czas przebywania każdego z procesów w sekcji krytycznej (także wykonywania protokołów początkowego i końcowego), Brak ograniczeń zachowania procesów poza sekcją krytyczną, Różne prędkości wykonywania procesów

Problem producenta i konsumenta Synchronizacja procesów: Producent cyklicznie produkuje porcje danych i przekazuje do konsumpcji Konsument cyklicznie pobiera i konsumuje dane Porcje powinny być konsumowane w kolejności ich wyprodukowania. Możliwość oczekiwania producenta Możliwość oczekiwania konsumenta

Warianty problemu Dane przekazywane bezpośrednio do konsumpcji (wariant najprostszy) Bufor N-elementowy (wariant najpopularniejszy) Bufor nieskończony Operacje wstawiania i pobierania tego samego elementu bufora muszą się wzajemnie wykluczać. Abstrakcja rzeczywistych problemów z różnych dziedzin (handel, transport itp.)

Problem czytelników i pisarzy Konkurencja o dostęp do wspólnej czytelni Dwie grupy cyklicznych procesów, Czytelnik odczytuje informacje zgromadzone w czytelni; może to robić wspólnie z innymi czytelnikami Pisarz zapisuje informacje w czytelni; musi pracować sam (w pustej czytelni) Skończony czas trwania operacji czytania i pisania Abstrakcja problemu synchronizacji dostępu do wspólnej bazy danych

Możliwe rozwiązania 1. Czytelnik może wejść do czytelni, gdy jest pusta lub są inni czytelnicy; jest wstrzymany, gdy w czytelni jest pisarz. Pisarz może wejść do czytelni, gdy jest pusta. Możliwość zagłodzenia pisarzy 2. Jeżeli pisarz czeka na wejście do czytelni, to nie może wejść tam żaden czytelnik Możliwość zagłodzenia czytelników 3. Do czytelni wchodzą naprzemiennie pisarze i czytelnicy. Z danym czytelnikiem mogą wejść wszyscy oczekujący w danej chwili czytelnicy

Problem 5 filozofów Wzorcowy przykład obrazujący zagłodzenie i blokady

Problem 5 filozofów - rozwiązania 1. Głodny filozof czeka, aż będzie wolny lewy widelec, podnosi go, czeka na wolny prawy, podnosi go i zaczyna jeść. Po jedzeniu odkłada oba równocześnie. Możliwość blokady 2. Głodny filozof czeka, aż oba widelce będą wolne i podnosi je równocześnie. Możliwość zagłodzenia 3. Zatrudniamy lokaja, który dyskretnie nadzoruje filozofów, aby w danym czasie nie więcej niż 4 chciało jeść (= konkurowało o widelce). Jeśli 5 filozofów chciałoby jeść naraz, lokaj powstrzymuje jednego. Podnoszenie widelców jak w rozwiązaniu 1. Wyklucza blokadę i zagłodzenie

Mechanizmy umożliwiające wzajemne wykluczanie Mechanizmy niskopoziomowe przerwania arbiter pamięci instrukcje specjalne Mechanizmy wysokopoziomowe synchronizacji synchronizacji i komunikacji

Mechanizm przerwań zgłoszenie przerwania powrót do programu Zwykły proces Procedura obsługi przerwania

Mechanizm przerwań (2) System jednoprocesorowy: procesor wykonuje wszystkie procesy oraz system operacyjny, maskowanie blokowanie przerwań przychodzących zgłoszenie przerwania procesor w trybie obsługi systemu operacyjnego, so wykonuje sekcję krytyczną programowanie związane z ingerencją w obszar systemu operacyjnego w systemach wieloprocesorowych nie gwarantuje wzajemnego wykluczania

Arbiter pamięci Zapewnia wzajemne wykluczanie przy dostępie do pojedynczego słowa pamięci Szeregowanie żądań (kolejność nieznana dla programisty) -systemy wieloprocesorowe -systemy jednoprocesorowe wyposażone w DMA

Rozwiązanie problemu wzajemnego wykluczania Każdy z procesów P1 i P2 wykonuje w nieskończonej pętli program składający się ze strefy krytycznej (kryt1 i kryt2) oraz strefy lokalnej (lok1, lok2) Wykonywanie kryt1 i kryt2 nie może odbywać się równocześnie W systemie istnieje arbiter wspólnej pamięci

Próba pierwsza Arbiter zawiera zmienną cyfrę wskazującą proces, dla którego udostępniana jest wspólna pamięć. Proces wychodzący zapisuje w zmiennej numer drugiego procesu Aktywne czekanie

Próba pierwsza - kod Program pierwszaproba; var czyjakolej: integer procedure p1; begin repeat while czyjakolej=2 do (* nic *); kryt1; czyjakolej:=2; lok1; forever (równoważne repeat... until false) end;... p2 analogicznie begin (program główny) czyjakolej:=1; cobegin p1;p2; coend end. Modelowanie procesów współbieżnych 16

Próba pierwsza - cechy + Spełniony warunek wzajemnego wykluczania, + Niemożliwość wystąpienia blokady, + Niemożność wystąpienia zagłodzenia, Zbyt ścisłe powiązanie między procesami (prawo wejścia do strefy krytycznej przekazywane wprost) Niewygodne przy dużej różnicy częstotliwości działania w strefie krytycznej. Awaria jednego z procesów (również w strefie lokalnej) automatycznie blokuje drugi.

Próba druga Dwa oddzielne klucze do strefy krytycznej (dwie zmienne przypisane procesom) Proces sprawdza zmienną drugiego jeśli 1, to zmienia swoją na 0 i wchodzi do strefy krytycznej Wychodzący proces zmienia wartość swojej zmiennej na 1

Próba druga - kod Program drugaproba; var c1,c2: integer procedure p1; begin repeat while c2=0 do (* nic *); c1:=0; kryt1; c1:=1; lok1; forever end;... p2 analogicznie begin (program główny) c1:=1; c2:=1; cobegin p1;p2; coend end.

Próba druga - cechy Program nie jest poprawny nie spełnia wymogów bezpieczeństwa wzajemnego wykluczania Przeplot Wartość c1 Wartość c2 Początkowo 1 1 P1 sprawdza c2 1 1 P2 sprawdza c1 1 1 P1 zeruje c1:=0 0 1 P2 zeruje c2:=0 0 0 P1 wchodzi do kryt1 0 0 P2 wchodzi do kryt2 0 0

Próba trzecia Proces sprawdzający zmienną drugiego jest gotowy do wejścia do strefy krytycznej swoją zmienną zeruje przed testowaniem drugiej. Rozszerzenie pojęcia przebywania w strefie krytycznej.

Próba trzecia - kod Program trzeciaproba; var c1,c2: integer procedure p1; begin repeat c1:=0; while c2=0 do (* nic *); kryt1; c1:=1; lok1; forever end;... p2 analogicznie begin (program główny) c1:=1; c2:=1; cobegin p1;p2; coend end.

Próba trzecia - cechy + Spełniony warunek wzajemnego wykluczania, (P1 wewnątrz kryt1) (P2 poza kryt2) i odwrotnie Niebezpieczeństwo blokady. Przeplot Wartość c1 Wartość c2 Początkowo 1 1 P1 zeruje c1 0 1 P2 zeruje c2 0 0 P1 sprawdza c2 0 0 P2 sprawdza c1... 0 0

Próba czwarta Wprowadzenie pewności, że jeżeli P1 nie może wejść do strefy krytycznej, to może to zrobić P2. Jeżeli zmienna drugiego procesu jest równa zero, to proces oczekujący zmienia wartość swojej zmiennej na 1 i czeka.

Próba czwarta - kod Program czwartaproba; var c1,c2: integer procedure p1; begin repeat c1:=0; while c2=0 do begin c1:=1; (* przez chwilę nic nie rób *) c1:=0; end; kryt1; c1:=1; lok1; forever end;... p2 analogicznie begin (program główny) c1:=1; c2:=1; cobegin p1;p2; coend end.

Próba czwarta - cechy + Spełniony warunek wzajemnego wykluczania, Problem zbytniej rycerskości może prowadzić do zagłodzenia (mało prawdopodobne, omijane przez odstąpienie od zasady) Przeplot Wartość c1 Wartość c2 Początkowo 1 1 P1 zeruje c1 0 1 P2 zeruje c2 0 0 P1 sprawdza c2 0 0 P2 sprawdza c1 0 0 P1 nadaje wartość c1:=1 1 0 P2 nadaje wartość c2:=1 1 1 P1 zeruje c1 0 1 P2 zeruje c2 0 0

Algorytm Dekkera Kombinacja pierwszej i czwartej próby: każdy z procesów ma swoją zmienną-klucz istnieje zmienna arbitrażowa wskazująca na prawo domagania się wstępu do strefy krytycznej

Algorytm Dekkera - kod Program Dekker; var c1,c2, czyjakolej: integer procedure p1; begin repeat c1:=0; while c2=0 do if czyjakolej=2 then begin c1:=1; while czyjakolej=2 do; c1:=0;end; kryt1; czyjakolej=2; c1:=1; lok1; forever end;... p2 analogicznie begin (program główny) c1:=1; c2:=1; czyjakolej:=1; cobegin p1;p2; coend end.

Algorytm Dekkera - cechy + Spełniony warunek wzajemnego wykluczania, + Algorytm jest żywotny (złożony dowód logiczny) Niezbyt praktyczne narzędzie - Do synchronizacji N procesów potrzeba 2N-1 zmiennych (N musi być znane, zmiana pociąga za sobą zmianę programu) - Wykorzystanie zmiennych wspólnych - Aktywne czekanie

Instrukcje specjalne Przykład typowy: Test&Set(X, R) przepisuje zawartość wspólnej komórki pamięci X do lokalnego rejestru R i wyzerowanie jej (podczas jednego dostępu); początkowo ustawia się X=1 (oznacza zezwolenie na wejście do strefy krytycznej); wchodząc do strefy krytycznej proces wykonuje kod: R:=0; while R=0 do Test&Set(X,R); wychodząc, proces ponownie ustawia X:=1

Instrukcje specjalne (2) Tylko jeden proces znajdzie w R wartość 1 tylko on wejdzie do strefy krytycznej Instrukcja stosowana do wykluczania operacji semaforowych w systemach wieloprocesorowych ze wspólną pamięcią Rozwiązanie nie jest żywotne żaden proces nie ma gwarancji, że kiedyś wejdzie do strefy krytycznej. Wymaga aktywnego czekania (należy go uniknąć). Inne przykłady: - SWAP(X,R) zamienia X z R - TSB(X,L) równoważna if X then goto L else X:=true