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

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

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

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

Systemy operacyjne. Studia podyplomowe Wydział Informatyki PB

Programowanie Równoległe i Rozproszone

synchronizacji procesów

Monitory. Jarosław Kuchta

Synchronizacja procesów i wątków

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

synchronizacji procesów

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

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

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

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

Systemy operacyjne. Studia podyplomowe Wydział Informatyki PB

Klasyczne problemy synchronizacji

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

SOP2 - semafory. grudzień

Synchronizacja procesów

Wprowadzenie do programowania współbieżnego

Systemy operacyjne. Zajęcia 11. Monitory

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

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

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

Systemy operacyjne III

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

Systemy Operacyjne synchronizacja i komunikacja procesów

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

SYSTEMY CZASU RZECZYWISTEGO - VxWorks

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

Systemowe mechanizmy synchronizacji procesów

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

Synchronizacja procesów

Problemy współbieżności

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

Podstawy współbieżności

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

Wykład 3. Procesy i wątki. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

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 7. Iwona Kochaoska

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

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

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

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

4. Procesy pojęcia podstawowe

Wykład 13. Systemy wieloprocesorowe. Wojciech Kwedlo Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

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

Synchronizacja procesów

2 Implementacja w systemie Linux 2.4

1. Działania na procesach

9. Problem wzajemnego wykluczania i sekcji krytycznej

Programowanie wspóªbie»ne

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

Systemy operacyjne Wzajemne wykluczanie i synchronizacja

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

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

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

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

Prezentacja systemu RTLinux

4. Procesy pojęcia podstawowe

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

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

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

Wykład 2 Proces, stany procesu i przejścia pomiędzy nimi. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB

Programowanie wielowątkowe. Tomasz Borzyszkowski

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

Program jest więc strukturą statyczną zapisaną na jakimś nośniku. Natomiast proces jest wykonującym się programem.

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)

Programowanie wspóªbie»ne

Zaawansowane programowanie w C++ (PCP)

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

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

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

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

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

Procesy i wątki. Blok kontrolny procesu. Proces. Proces - elementy. Stan procesu

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

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

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Linux.

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

Proces y i y w i ąt ą ki

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

4. Procesy pojęcia podstawowe

Programowanie komputerów

3URJUDPRZDQLHZVSyáELH*QHZVWS

I.Wojnicki, Tech.Inter.

Kurs programowania. Wykład 8. Wojciech Macyna

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

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

Podstawy Informatyki Systemy operacyjne

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

Wykład 8. Pamięć wirtualna. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB

Wykład 13. Linux 2.0.x na maszynach SMP. Wojciech Kwedlo, Systemy Operacyjne II -1- Wydział Informatyki PB

Wielozadaniowość w systemie Microsoft Windows

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

Futex (Fast Userspace Mutex) Łukasz Białek

Transkrypt:

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

Potrzeba synchronizacji Procesy wykonują się współbieżnie. Jeżeli w 100% są izolowane od siebie, nie ma problemu. Problem, jeżeli procesy komunikują się lub korzystają ze wspólnych zasobów. Potrzeba utrzymywania wspólnych zasobów w spójnym stanie. Dotyczy także wątków Wojciech Kwedlo, Wykład z Systemów Operacyjnych -2- Wydział Informatyki PB

Zmienne wspólne Przykład Producent konsument z buforem cyklicznym const int n; // rozmiar bufora typedef Item; Item buffer[n]; // bufor int out=0; // indeks konsumenta int in = 0; // indeks producenta counter = 0; // liczba elementów w buforze Producent umieszcza element w buforze na pozycji in Czeka, jeżeli counter==n, tzn. bufor pełny Konsument pobiera element z bufora z pozycji out Czeka, jeżeli counter==0 tzn. bufor pusty. Zmienne in oraz out zmieniane są zgodnie z regułą i=(i+1)%n Wartości kolejnych indeksów do tablicy buffer Jeżeli i==n-1 to nowei=0 Wojciech Kwedlo, Wykład z Systemów Operacyjnych -3- Wydział Informatyki PB

Rozwiązanie z wykorzystaniem aktywnego czekania Counter += 1; Counter -= 1; Producent Item pitm; while (1) { produce an item into pitm while (counter == n) ; buffer[in] = pitm; in = (in+1) % n; counter += 1; } Konsument Item citm; while (1) { while (counter == 0) ; citm = buffer[out]; out = (out+1) % n; counter -= 1; consume the item in citm } Counter jest zmienną współdzieloną przez obydwa procesy. Co się może stać gdy jednocześnie obydwa procesy spróbują się do niej odwołać? Wojciech Kwedlo, Wykład z Systemów Operacyjnych -4- Wydział Informatyki PB

Gdzie tkwi problem? Architektura RISC: ładuj do rejestru, zwiększ wartość,zapisz wynik. Niech x oznacza jest modyfikowaną zmienną counter. Przyjmijmy, że x=5 Rozważmy dwie możliwe kolejności wykonywania instrukcji poszczególnych procesów. a) Poprawna wartość 5. b) Niepoprawna wartość 4. Wybór jednej z tych wielkości niedeterministyczny. Sytuacja wyścigu (ang. race) a) Producent Konsument R1 <= x R1 = R1+1 R1 => x R3 <= x R3 = R3-1 R3 => x b) Producent Konsument R1 <= x R3 <= x R3 = R3-1 R1 = R1+1 R1 => x R3 => x x=5 x=5 x=5 x=4! Wojciech Kwedlo, Wykład z Systemów Operacyjnych -5- Wydział Informatyki PB

Problem sekcji krytycznej Założenia Proces na przemian przebywa w sekcji krytycznej albo wykonuje inne czynności Proces przebywa w sekcji krytycznej przez skończony czas. Rozwiązanie Czynności wykonywane przy wejściu do sekcji (protokół wejścia) Czynności wykonywane przy wyjściu z sekcji (protokół wyjścia) A wchodzi do sekcji krytycznej A opuszcza sekcj? krytyczn? Proces A Proces B B próbuje wej?? do sekcji krytycznej B zablokowany B wchodzi do sekcji krytycznej B opuszcza sekcj? krytyczn? Czas Wojciech Kwedlo, Wykład z Systemów Operacyjnych -6- Wydział Informatyki PB

Warunki dla rozwiązania sekcji krytycznej Wzajemne wykluczanie. W danej chwili tylko jeden proces może być w sekcji krytycznej. Postęp Proces który nie wykonuje sekcji krytycznej nie może blokować procesów chcących wejść do sekcji. Ograniczone czekanie Proces nie może czekać na wejście do sekcji krytycznej w nieskończoność Wojciech Kwedlo, Wykład z Systemów Operacyjnych -7- Wydział Informatyki PB

Rozwiązania problemu sekcji krytycznej Wyłącz przerwania Nie działa w systemach wieloprocesorowych Problematyczne w systemach z ochroną Wykorzystywane do synchronizacji w obrębie jądra (zakładając jeden procesor) Rozwiązania z czekaniem aktywnym Algorytm Petersona dla dwóch procesów Algorytm piekarni dla wielu procesów. Rozwiązania wykorzystujące specjalne instrukcje maszynowe np. rozkaz zamiany: XCHG rejestr, pamięć Architektura systemu musi zapewniać atomowe wykonanie instrukcji. W systemach wieloprocesorowych nie jest to trywialne Wojciech Kwedlo, Wykład z Systemów Operacyjnych -8- Wydział Informatyki PB

Czekanie aktywne Marnowany jest czas procesora Zmarnowany czas można by przeznaczyć na wykonanie innego procesu. Uzasadnione gdy: Czas oczekiwania stosunkowo krótki (najlepiej krótszy od czasu przełączenia kontekstu) Liczba procesów @ Liczba procesorów Przykład zastosowania jądro Linux-a w wersji SMP Funkcje typu spin_lock Alternatywą do czekania aktywnego jest przejście procesu w stan zablokowany Semafory Monitory Wojciech Kwedlo, Wykład z Systemów Operacyjnych -9- Wydział Informatyki PB

Semafor (zliczający) Zmienna całkowita S na której, oprócz nadania wartości początkowej, mogą być wykonane dwie operacje Definicje na podstawie [BenAri89] Operacja P (czekaj, wait) Jeżeli S>0 to S:=S-1, w przeciwnym razie wstrzymaj działanie procesu wykonującego tę operacje. Operacja V(sygnalizuj,signal). Jeżeli są procesy wstrzymane w wyniku operacji P, to wznów jeden z nich, w przeciwnym wypadku S:=S+1. Operacje P i V są operacjami atomowymi. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -10- Wydział Informatyki PB

Implementacja semafora Semafor to Bieżąca wartość Lista procesów oczekujących class Semaphore { int value; ProcessList pl; public: Semaphore(int a) {value=a;} void down (); void up (); }; Lista najlepiej typu FIFO LIFO, kolejki priorytetowe mogą prowadzić do zagłodzenia Sleep: realizuje przejście procesu Aktywny=>Zablokowany Wakeup: ]Zablokowany=>Gotowy Semaphore::P() () { value -= 1; if (value < 0) { Add(this_process,pl) Sleep (this_process); } } Semaphore::V () { value += 1; if (value <= 0) { Process P=Remove(P) Wakeup (P); } } Wojciech Kwedlo, Wykład z Systemów Operacyjnych -11- Wydział Informatyki PB

Semaphore Sem(1); Rozwiązanie sekcji problemu sekcji krytycznej przy pomocy semaforów void Process() { while (1) { Sem.P(); // Proces wykonuje swoją sekcję krytyczną Sem.V() // Proces wykonuje pozostałe czynności } } Protokół wejścia i wyjścia są trywialne, ponieważ semafory zaprojektowano jako narzędzie do rozwiązania problemu sekcji krytycznej Zmodyfikujmy warunki zadania, tak że w sekcji krytycznej może przebywać jednocześnie co najwyżej K procesów. Pytanie. Co należy zmienić w programie? Wojciech Kwedlo, Wykład z Systemów Operacyjnych -12- Wydział Informatyki PB

Problem producent-konsument z wykorzystaniem semaforów const int n; Semaphore empty(n),full(0),mutex(1); Item buffer[n]; Producent int in = 0; Item pitem; while (1) { // produce an item into pitem empty.p(); mutex.p(); buffer[in] = pitem; in = (in+1) % n; mutex.v(); full.v(); } Konsument int out = 0; Item citem; while (1) { full.p(); mutex.p(); citem = buffer[out]; out = (out+1) % n; mutex.v(); empty.v(); // consume item from citem } Semafor mutex zapewnia wzajemne wykluczanie przy dostępie do zmiennych współdzielonych Semafor full gwarantuje oczekiwanie konsumenta, gdy bufor jest pusty. Semafor empty gwarantuje oczekiwanie producenta, gdy bufor jest pełny. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -13- Wydział Informatyki PB

Semafory binarne Zmienna może przyjmować tylko wartość zero lub jeden Operacje mają symbole PB, VB Wartość jeden oznacza, że można wejść do semafora (wykonać PB) Wartość zero oznacza że operacja V wstrzyma proces. Mogą być prostsze w implementacji od semaforów zliczających. Implementacje Mutexy w POSIX threads. W win32 mutexy noszą nazwę sekcji krytycznych W Javie mutex jest związany z każdym obiektem Słowo kluczowe synchronized. Więcej o Javie przy omawianiu monitorów Wojciech Kwedlo, Wykład z Systemów Operacyjnych -14- Wydział Informatyki PB

Blokada (Zakleszczenie, ang. deadlock) Zbiór procesów jest w stanie blokady, kiedy każdy z nich czeka na zdarzenie, które może zostać spowodowane wyłącznie przez jakiś inny proces z tego zbioru. Samochody nie mają wstecznego biegu = Brak wywłaszczeń zasobów Wojciech Kwedlo, Wykład z Systemów Operacyjnych -15- Wydział Informatyki PB

Przykład blokady Sekwencja instrukcji prowadząca do blokady. P 0 wykonał operacje A.P() Semaphore A(1),B(1); P 1 wykonał operacje B.P() P 0 usiłuje wykonać B.P() P 1 usiłuje wykonać A.P() P 0 czeka na zwolnienie B przez P 1 P 1 czeka na zwolnienie B przez P 0 Będą czekały w nieskończoność!!! Do blokady może (ale nie musi) dojść. Pytanie: Jak w tej sytuacji zagwarantować brak blokady? Proces P 0 A.P(); B.P();... B.V(); A.V(); Proces P 1 B.P(); A.P();... A.V(); B.V(); Wojciech Kwedlo, Wykład z Systemów Operacyjnych -16- Wydział Informatyki PB

Zagłodzenie (ang. starvation) Proces czeka w nieskończoność, pomimo że zdarzenie na które czeka występuje. (Na zdarzenie reagują inne procesy) Przykład: Jednokierunkowe przejście dla pieszych, przez które w danej chwili może przechodzić co najwyżej jedna osoba. Osoby czekające na przejściu tworzą kolejkę. Z kolejki wybierana jest zawsze najstarsza osoba Bardzo młoda osoba może czekać w nieskończoność. Zamiast kolejki priorytetowej należy użyć kolejki FIFO (wybieramy tę osobę, która zgłosiła się najwcześniej) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -17- Wydział Informatyki PB

Problem pięciu filozofów Każdy filozof siedzi przed jednym talerzem Każdy filozof na przemian myśli i je Do jedzenia potrzebuje dwóch widelców Widelec po lewej stronie talerza. Widelec po prawej stronie talerza. W danej chwili widelec może być posiadany tylko przez jednego filozofa. Zadanie: Podaj kod dla procesu i-tego filozofa koordynujący korzystanie z widelców. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -18- Wydział Informatyki PB

Problem czytelników i pisarzy Modyfikacja problemu sekcji krytycznej. Wprowadzamy dwie klasy procesów: czytelników i pisarzy. Współdzielony obiekt nazywany jest czytelnią. W danej chwili w czytelni może przebywać Jeden proces pisarza i żaden czytelnik. Dowolna liczba czytelników i żaden pisarz. Rozwiązanie prymitywne: Potraktować czytelnię jak obiekt wymagający wzajemnego wykluczania wszystkich typów procesów. Prymitywne, ponieważ ma bardzo słabą wydajność. Jeżeli na wejście do czytelni czeka wielu czytelników i żaden pisarz to możemy wpuścić od razu wszystkich czytelników W literaturze opisano rozwiązania: Z możliwością zagłodzenia pisarzy Z możliwością zagłodzenia czytelników Poprawne Wojciech Kwedlo, Wykład z Systemów Operacyjnych -19- Wydział Informatyki PB

Problem śpiącego fryzjera c Jeden proces fryzjera i wiele procesów klientów. Współdzielone zasoby: n krzeseł w poczekalni i jedno krzesło fryzjera Napisz program koordynujący pracę fryzjera i klientów Wojciech Kwedlo, Wykład z Systemów Operacyjnych -20- Wydział Informatyki PB