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

Wielkość: px
Rozpocząć pokaz od strony:

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

Transkrypt

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

2 Semafory Algorytmy synchronizacyjne omawiane poprzednio opierały się na atomowych instrukcjach odczytu i zapisu do pamięci, ewentualnie dodatkowych rozkazach typu Read-Modify-Write Algorytmy te stosowały aktywne oczekiwanie (ang. spin-locks) w większości przypadków nieefektywne Semafory (ang. semaphores) konstrukcje programistyczne wyższego poziomu, ułatwiające synchronizację w programach współbieżnych 2

3 Stany procesu powtórka Zazwyczaj jest więcej procesów (lub wątków) niż fizycznych procesorów (rdzeni) Procesy muszą współdzielić procesor Proces, który chce się wykonywać jest procesem gotowym Proces, który otrzymał czas procesora jest procesem aktywnym W każdym momencie tylko jeden proces jest w stanie aktywnym Gdy żaden proces nie jest gotowy do wykonania, to wykonywany jest proces jałowy (bezczynności, ang. idle) Przydziałem czasu procesora poszczególnym procesom zajmuje się planista (ang. scheduler) 3

4 Procesy wstrzymane Konstrukcja semafora zakłada istnienie dodatkowego stanu procesu wstrzymanego Proces wstrzymany nie jest gotowy do wykonania Proces wstrzymany może jedynie być obudzony lub wznowiony na skutek zdarzenia zewnętrznego zmieniającego jego stan ze wstrzymanego na gotowy Proces wstrzymany nie zużywa czasu procesora czekanie nieaktywne Procesy zablokowane są zapamiętywane w dodatkowej strukturze danych (zbiór, lista, kolejka) 4

5 Stany procesu diagram nieaktywny gotowy aktywny (wykonywany) zakończony wstrzymany Początkowo proces jest nieaktywny W pewnym momencie staje się gotowy (zostaje aktywowany) Po przydziale czasu procesora przez planistę staje się aktywny, po wyczerpaniu przydziału wraca do stanu gotowości Na skutek wykonania niektórych operacji wątek może stać się wstrzymany Kiedy proces wykona ostatnią instrukcję staje się zakończony 5

6 Semafory Semafory zostały zaproponowane przez holenderskiego naukowca E. Dijkstrę w 1968 r. Na poziomie konceptualnym semafor, pełni po prostu rolę licznika dostępnych w danym momencie zasobów Mogą zostać zaimplementowane bez konieczności aktywnego oczekiwania (ang. busy-waiting) Rysunek 1: Edsger W. Dijkstra (autor: Hamilton Richards) 6

7 Semafory Nazwa semafor została użyta przez analogię do idei semaforów kolejowych: Zasobami współdzielonymi przez pociągi są tory 7

8 Semafory Nazwa semafor została użyta przez analogię do idei semaforów kolejowych: Zasobami współdzielonymi przez pociągi są tory Jeżeli dany tor jest w danym momencie niedostępny, to semafor jest opuszczony (zamknięty) 7

9 Semafory Nazwa semafor została użyta przez analogię do idei semaforów kolejowych: Zasobami współdzielonymi przez pociągi są tory Jeżeli dany tor jest w danym momencie niedostępny, to semafor jest opuszczony (zamknięty) Jeżeli dany tor jest wolny, to semafor jest podniesiony (otwarty) 7

10 Semafory Nazwa semafor została użyta przez analogię do idei semaforów kolejowych: Zasobami współdzielonymi przez pociągi są tory Jeżeli dany tor jest w danym momencie niedostępny, to semafor jest opuszczony (zamknięty) Jeżeli dany tor jest wolny, to semafor jest podniesiony (otwarty) Na każdym torze w każdej chwili może znajdować się maksymalnie jeden pociąg 7

11 Semafory analogia nr 2 Załóżmy, że mamy napisać program symulujący korzystanie z parkingu podziemnego parking mieści 20 samochodów wjazd na parking zamykany jest szlabanem szlaban otwiera się po naciśnięciu przycisku, jeżeli na parkingu są jeszcze wolne miejsca jeżeli wszystkie stanowiska są zajęte szlaban wjazdowy pozostaje opuszczony 8

12 Semafory analogia nr 2 Załóżmy, że mamy napisać program symulujący korzystanie z parkingu podziemnego parking mieści 20 samochodów wjazd na parking zamykany jest szlabanem szlaban otwiera się po naciśnięciu przycisku, jeżeli na parkingu są jeszcze wolne miejsca jeżeli wszystkie stanowiska są zajęte szlaban wjazdowy pozostaje opuszczony Zauważmy, że system sterujący nie musi zapisywać, który samochów zajmuje które stanowisko wystarczy aktualna liczba samochodów na parkingu 8

13 Semafory analogia nr 2 W podanym przykładzie: współdzielonymi zasobami są miejsca parkingowe system sterujący szlabanem pełni rolę semafora: początkowo wartość semafora to 20 kiedy samochód wjeżdża na parking, semafor zmniejszany jest o 1 kiedy samochód wyjeżdża z parkingu semafor zwiększany jest o 1 jeżeli semafor ma wartość 0, to znaczy, że wszystkie miejsca są zajęte i kolejni kierowcy muszą poczekać na zwolnienie miejsca 9

14 Semafory definicja Semafor S to abstrakcyjny typ danych z dwoma polami: S.V liczba całkowita nieujemna S.L zbiór wstrzymanych procesów 10

15 Semafory definicja Semafor S to abstrakcyjny typ danych z dwoma polami: S.V liczba całkowita nieujemna S.L zbiór wstrzymanych procesów Na semaforze można wykonywać tylko dwie operacje atomowe: operację wait(s) (w lit. czasem P (S)) oczekiwanie na podniesienie semafora operację signal(s) (w lit. czasem V (S)) podnosi semafor 10

16 Semafory definicja Semafor S to abstrakcyjny typ danych z dwoma polami: S.V liczba całkowita nieujemna S.L zbiór wstrzymanych procesów Na semaforze można wykonywać tylko dwie operacje atomowe: operację wait(s) (w lit. czasem P (S)) oczekiwanie na podniesienie semafora operację signal(s) (w lit. czasem V (S)) podnosi semafor Semafor musi zostać zainicjowany wartością początkową Zbiór S.L początkowo jest pusty Programista nie musi mieć bezpośredniego dostępu do wartości pól S.V oraz S.L 10

17 Semafor operacja wait wait(s): if S.V > 0 S.V S.V 1 else S.L S.L {A} A.stan wstrzymany Jeżeli wartość semafora (składowa V ) jest niezerowa, to następuje jej zmniejszenie o 1 i proces A wykonuje się dalej 11

18 Semafor operacja wait wait(s): if S.V > 0 S.V S.V 1 else S.L S.L {A} A.stan wstrzymany Jeżeli wartość semafora (składowa V ) jest niezerowa, to następuje jej zmniejszenie o 1 i proces A wykonuje się dalej Jeżeli wartość ta jest równa zero, to proces A zostaje wstrzymany proces A jest wstrzymany na semaforze S 11

19 Semafor operacja signal signal(s): if S.L = S.V S.V + 1 else niech A będzie dowolnym elementem zbioru S.L S.L S.L {A} A.stan gotowy Jeżeli zbiór procesów wstrzymanych na semaforze S jest pusty, to wartość (składowej S.L) semafora zwiększa się o 1 12

20 Semafor operacja signal signal(s): if S.L = S.V S.V + 1 else niech A będzie dowolnym elementem zbioru S.L S.L S.L {A} A.stan gotowy Jeżeli zbiór procesów wstrzymanych na semaforze S jest pusty, to wartość (składowej S.L) semafora zwiększa się o 1 W przeciwnym razie ze zbioru procesów wstrzymanych budzony (usuwany) jest dowolny ze wstrzymanych wcześniej procesów 12

21 Rodzaje semaforów Semafor, którego składowa S.L przyjmuje jedynie wartości 0 lub 1 nazywany jest semaforem binarnym Semafor, którego składowa S.L może przyjmować dowolne wartości nieujemne, to semafor ogólny Semafor może być zamknięty przez jeden proces, a podniesiony przez inny 13

22 Rodzaje semaforów Semafor, którego składowa S.L przyjmuje jedynie wartości 0 lub 1 nazywany jest semaforem binarnym Semafor, którego składowa S.L może przyjmować dowolne wartości nieujemne, to semafor ogólny Semafor może być zamknięty przez jeden proces, a podniesiony przez inny Blokady są zakładane i zwalniane przez ten sam proces Próba zwolnienia blokady założonej przez inny proces skutkuje błędem 13

23 Semafor binarny działanie Operacja wait(s) jak dla semafora ogólnego Operacja signal(s): if S.V = 1 // nieokreślone! else if S.L = S.V 1 else niech A będzie dowolnym elementem zbioru S.L S.L S.L {A} A.stan gotowy 14

24 Semafory budzenie procesów Definicja operacji signal(s) nie podaje, który z procesów wstrzymanych na semaforze stanie się gotowy Decyzja zależy od implementacji semafora, a ściślej kolejności w której procesy są wzbudzane Nie ma to wpływu na własności bezpieczeństwa semaforów, jednak może mieć wpływ na własność żywotności możliwe zagłodzenie 15

25 Zastosowania semaforów Semafory umożliwiają łatwe rozwiązanie problemów: synchronizacji dostępu do zasobów: niekoniecznie wyłączny dostęp również ograniczony dostęp do krytycznych zasobów, tzn. dla więcej, niż jednego procesu jednocześnie synchronizacji kolejności wykonywania proces musi oczekiwać na zakończenie operacji wykonywanych przez inne procesy, by kontynuować działanie 16

26 Semafory binarne a blokady Obie konstrukcje mają dwa stany: otwarty, zamknięty Różnią się jednak celem: blokady stosowane są do ochrony zasobów przed jednoczesną modyfikacją semafory stosowane są do synchronizacji między wątkami semafor może być początkowo zamknięty 17

27 Semafory binarne a blokady Obie konstrukcje mają dwa stany: otwarty, zamknięty Różnią się jednak celem: blokady stosowane są do ochrony zasobów przed jednoczesną modyfikacją semafory stosowane są do synchronizacji między wątkami semafor może być początkowo zamknięty 1 binary semaphore data_ready = 0 // współdzielony semafor 2 T data = null 1 // Proces 1: 2 3 data = gather_sensor_data() 4 signal(data_ready) 1 // Proces 2: 2 3 wait(data_ready) 4 process(data) 17

28 Semafory a blokady Semafory i blokady często stosowane są razem 1 semaphore data_ready = 0 // semafor ogólny 2 Queue queue // współdzielona kolejka 3 lock queue_lock // blokada do WW dla kolejki 1 // Proces 1: 2 3 while (true) { 4 data = gather_sensor_data() 5 queue_lock.lock() 6 queue.push(data) 7 queue_lock.unlock() 8 signal(data_ready) 9 } 1 // Proces 2: 2 3 while (true) { 4 wait(data_ready) 5 queue_lock.lock() 6 data = queue.pop() 7 queue_lock.unlock() 8 process(data) 9 } 18

29 Wzajemne wykluczanie semafory Za pomocą semafora binarnego można również rozwiązać problem wzajemnego wykluczania binarny semafor S 1 // współdzielony semafor // Proces P i while (true) { sekcja lokalna P i wait(s) sekcja krytyczna P i signal(s) } Działanie analogiczne do blokad (ang. lock) 19

30 Wzajemne wykluczanie przykład // Proces P while (true) { sekcja lokalna wait(s) sekcja krytyczna signal(s) } // Proces Q while (true) { sekcja lokalna wait(s) sekcja krytyczna signal(s) } 20

31 Wzajemne wykluczanie przykład // Proces P while (true) { sekcja lokalna wait(s) sekcja krytyczna signal(s) } // Proces Q while (true) { sekcja lokalna wait(s) sekcja krytyczna signal(s) } 21

32 Wzajemne wykluczanie przykład // Proces P while (true) { sekcja lokalna wait(s) sekcja krytyczna signal(s) } // Proces Q while (true) { sekcja lokalna wait(s) sekcja krytyczna signal(s) } 22

33 Wzajemne wykluczanie przykład // Proces P while (true) { sekcja lokalna wait(s) sekcja krytyczna signal(s) } // Proces Q while (true) { sekcja lokalna wait(s) sekcja krytyczna signal(s) } Proces Q został wstrzymany, ponieważ wartość semafora została wcześniej zmieniona na 0 przez proces P 23

34 Wzajemne wykluczanie przykład // Proces P while (true) { sekcja lokalna wait(s) sekcja krytyczna signal(s) } // Proces Q while (true) { sekcja lokalna wait(s) sekcja krytyczna signal(s) } Wykonanie signal(s) przez proces P powoduje wzbudzenie procesu Q wstrzymanego wcześniej na semaforze Q 24

35 Własności semaforowego rozwiązania problemu WW Wzajemne wykluczanie: tak Brak zakleszczenia: tak Brak zagłodzenia: tak, ale tylko dla 2 procesów w przypadku większej liczby procesów (> 2) brak zagłodzenia jest gwarantowany jedynie w przypadku silnych semaforów Dodatkowo: prostota, np. w porównaniu do alg. Petersona, czy piekarnianego brak aktywnego oczekiwania 25

36 Semafory a uczciwość Semafor silny (uczciwy) to taki który gwarantuje, że jeżeli proces został wstrzymany na semaforze, to zostanie w końcu wzbudzony (stanie się gotowy) niezależnie od tego jak wiele procesów wstrzymano na semaforze Wystarczy, by wstrzymane na semaforze procesy (zbiór S.L) były przechowywane w kolejce (FIFO) Przy N procesach, w kolejce S.L może znajdować się N 1 procesów, więc wystarczy N 1 operacji signal(s), tak by wszystkie z nich zostały wzbudzone Semafor słaby to semafor, który nie gwarantuje, że proces zostanie wzbudzony możliwe zagłodzenie Przykładowo, wzbudzany jest losowo wybrany proces 26

37 Przykład sortowanie przez scalanie Założenia: dana jest tablica A liczb całkowitych o rozmiarze N (N 2) elementów należy posortować jej elementy dzieląc pracę między 3 współbieżne procesy oznaczone A, B i C Procesy 1. i 2. mają za zadanie posortować połówki tablicy, odpowiednio A[1,..., m] oraz A[m + 1,..., N], gdzie m = N/2 Proces 3. scala posortowane połówki tablicy w posortowaną całość (można to zrobić w czasie O(N)) 27

38 Rozwiązanie // zmienne globalne A array[n] binarny semafor S1 0 binarny semafor S2 0 // Proces A: sortuj(a[1,..., m]) signal(s1) // Proces B: sortuj(a[m + 1,..., N]) signal(s2) // Proces C: wait(s1) wait(s2) scal(a[1,..., m], A[m + 1,..., N]) 28

39 Rozwiązanie // zmienne globalne A array[n] binarny semafor S1 0 binarny semafor S2 0 // Proces A: sortuj(a[1,..., m]) signal(s1) // Proces B: sortuj(a[m + 1,..., N]) signal(s2) // Proces C: wait(s1) wait(s2) scal(a[1,..., m], A[m + 1,..., N]) Problem ten można również rozwiązać za pomocą jednego semafora ogólnego - jak? 28

40 Problem producenta konsumenta Dane są dwa rodzaje procesów: Producenci producent wykonuje instrukcję produkuj tworząc dane, które przesyłane są konsumentom Konsumenci po odbiorze danych od producenta konsument wykonuje operację konsumuj przetwarzającą odebrane dane 29

41 Problem producenta konsumenta Dane są dwa rodzaje procesów: Producenci producent wykonuje instrukcję produkuj tworząc dane, które przesyłane są konsumentom Konsumenci po odbiorze danych od producenta konsument wykonuje operację konsumuj przetwarzającą odebrane dane Komunikacja między producentami a konsumentami może być zrealizowana na dwa sposoby: 29

42 Problem producenta konsumenta Dane są dwa rodzaje procesów: Producenci producent wykonuje instrukcję produkuj tworząc dane, które przesyłane są konsumentom Konsumenci po odbiorze danych od producenta konsument wykonuje operację konsumuj przetwarzającą odebrane dane Komunikacja między producentami a konsumentami może być zrealizowana na dwa sposoby: synchroniczny po wykonaniu operacji produkuj producent oczekuje na odebranie danych przez konsumentów 29

43 Problem producenta konsumenta Dane są dwa rodzaje procesów: Producenci producent wykonuje instrukcję produkuj tworząc dane, które przesyłane są konsumentom Konsumenci po odbiorze danych od producenta konsument wykonuje operację konsumuj przetwarzającą odebrane dane Komunikacja między producentami a konsumentami może być zrealizowana na dwa sposoby: synchroniczny po wykonaniu operacji produkuj producent oczekuje na odebranie danych przez konsumentów asynchroniczny dane wyprodukowane przez producenta gromadzone są w buforze, z którego pobierane są przez konsumentów 29

44 Producent-konsument przykłady Producent Klawiatura Edytor tekstu Joystick Gra komputerowa Łącza komunikacyjne Przeglądarka internetowa Aplikacja kliencka Konsument System operacyjny Drukarka Gra komputerowa Ekran Przeglądarka internetowa Łącza komunikacyjne Baza danych 30

45 Producent-konsument synchronizacja Konsument nie może pobierać danych z pustego bufora Producent nie może wstawiać danych do pełnego bufora bufor o nieskończonej pojemności nie istnieje próba wstawienia do pełnego bufora skutkowałaby utratą danych wstawianych, bądź zastępowanych 31

46 Producent-konsument nieskończony bufor Jak wspomniano, bufor o nieskończonej pojemności nie istnieje, ale jeżeli: jego rozmiar jest bardzo duży, tempo odbierania danych przez konsumenta jest porównywalne z tempem produkcji to można uniknąć narzutu wynikającego z konieczności synchronizacji próby wstawienia do pełnego bufora konieczne jest jedynie synchronizowanie prób odbierania danych przez konsumenta 32

47 Producent-konsument nieskończony bufor // zmienne globalne Typ bufor = array[ ] // bufor o nieograniczonej pojemności semafor ogólny niepusty = 0 // Producent Typ el int in = 0 while (true) { el = produkuj() bufor [ in ] = el in = in + 1 signal( niepusty ) } // konsument Typ el int out = 0 while (true) { wait( niepusty ) el = bufor [ out ] out = out + 1 konsumuj( l ) } 33

48 Producent-konsument nieskończony bufor Każde wstawienie elementu przez producenta powoduje zwiększenie wartości semafora niepusty o 1 Każde wyjęcie elementu przez konsumenta powoduje zmniejszenie wartości semafora niepusty o 1 liczba operacji wyjęcia elementów z bufora nigdy nie będzie wyższa, niż liczba wstawionych elementów W algorytmie nie dochodzi do zakleszczenia dopóki producent wykonuje signal( niepusty ), to proces konsumenta jest budzony W algorytmie nie dochodzi do zagłodzenia co najwyżej jeden proces może być wstrzymany (konsument) 34

49 Producent-konsument bufor jednoelementowy Załóżmy, że bufor może przechowywać tylko 1 element Warunki synchronizacji: producent musi czekać na opróżnienie bufora konsument może wyjąć element tylko z niepustego bufora Potrzebne są dwa semafory binarne: niepełny producent czeka na tym semaforze, aż konsument opróżni bufor niepusty konsument czeka na tym semaforze, aż producent wstawi element 35

50 Producent-konsument bufor jednoelementowy // zmienne globalne Typ bufor = array[1] semafor binarny niepusty = 0 semafor binarny niepełny = 1 // producent Typ el while (true) { el = produkuj() wait( niepełny ) bufor[ 0 ] = el signal( niepusty ) } // konsument Typ el while (true) { wait( niepusty ) el = bufor[ 0 ] signal( niepełny ) konsumuj( el ) } 36

51 Producent-konsument bufor ograniczony Rozmiar bufora wynosi N, N 1 Potrzebne są dwa semafory ogólne: niepełny zlicza liczbę wolnych miejsc w buforze początkowo N niepusty zlicza liczbę elementów znajdujących się w buforze początkowo 0 W każdym momencie, gdy żaden z procesów nie modyfikuje bufora zachodzi warunek: niepełny.v + niepusty.v = N 37

52 Producent-konsument bufor ograniczony // zmienne globalne Typ bufor = array[n] // bufor o ograniczonej pojemności semafor ogólny niepusty = 0 semafor ogólny niepełny = N // producent Typ el int in = 0 while (true) { el = produkuj() wait( niepełny ) bufor[ in ] = el in = ( in + 1 ) mod N signal( niepusty ) } // konsument Typ el int out = 0 while (true) { wait( niepusty ) el = bufor[ out ] out = ( out + 1 ) mod N signal( niepełny ) konsumuj( el ) } 38

53 Producent-konsument bufor ograniczony Własności przytoczonego rozwiązania: dane nie są nadpisywane zanim nie zostaną odczytane (odebrane) dane są odczytywane tylko raz dane nie są pobierane z pustego bufora dane są odczytywane w kolejności, w której zostały wyprodukowane wszystkie dane są w końcu odczytane 39

54 Producent-konsument warianty problemu Wielu producentów jeden konsument producenci współdzielą bufor konieczna synchronizacja dostępu dla producentów 40

55 Producent-konsument warianty problemu Wielu producentów jeden konsument producenci współdzielą bufor konieczna synchronizacja dostępu dla producentów Jeden producent wielu konsumentów konsumenci współdzielą bufor konieczna synchronizacja dostępu dla konsumentów 40

56 Producent-konsument warianty problemu Wielu producentów jeden konsument producenci współdzielą bufor konieczna synchronizacja dostępu dla producentów Jeden producent wielu konsumentów konsumenci współdzielą bufor konieczna synchronizacja dostępu dla konsumentów Wielu producentów wielu konsumentów rywalizacja między konsumentami rywalizacja między producentami 40

57 Problem ucztujących filozofów Pięciu filozofów siedzi przy stole i wykonuje naprzemiennie dwie czynności: myślenie i jedzenie. Na stole znajduje się misa ze spaghetti, po które sięgają filozofowie Do zjedzenia swojej porcji każdy filozof potrzebuje dwóch widelców Każdy filozof może podnieść widelec z jego lewej i prawej strony while True: myśli protokół wstępny je protokół końcowy 41

58 Problem ucztujących filozofów w4 f4 w3 f5 f3 w2 w0 f1 f2 w1 42

59 Problem ucztujących filozofów Zadanie polega na opracowaniu protokołów wstępnego i końcowego, dla których spełnione będą warunki: Filozof może jeść, gdy ma dwa widelce Dwóch filozofów nie może trzymać w tym samym czasie tego samego widelca (wzajemne wykluczanie) Brak zakleszczenia Brak zagłodzenia Niewielki narzut obliczeniowy w przypadku braku rywalizacji 43

60 Rozwiązanie 1 semafor binarny [] widelce = [1, 1, 1, 1, 1] // tablica semaforów // Filozof i, i {1, 2, 3, 4, 5} while True: myśli wait(widelce[i-1]) wait(widelce[i mod 5]) je signal(widelce[i-1]) signal(widelce[i mod 5]) 44

61 Problem ucztujących filozofów rozwiązanie 1 Rozwiązanie 1. ma własność wzajemnego wykluczania dwóch filozofów nie może podnieść jednocześnie tego samego widelca Jednak rozwązanie to może prowadzić do zakleszczenia 45

62 Problem ucztujących filozofów rozwiązanie 1 w4 f4 w3 f5 f3 w0 w2 f1 f2 w1 Do zakleszczenia dochodzi, gdy każdy filozof podniesie widelec po lewej stronie, ale nie zdąży podnieść prawego, bo zostanie wyprzedzony przez sąsiada 46

63 Rozwiązanie 2 semafor binarny [] widelce = [1, 1, 1, 1, 1] semafor ogólny jadalnia = 4 // Filozof i, i {1, 2, 3, 4, 5} while True: myśli wait(jadalnia) wait(widelce[i-1]) wait(widelce[i mod 5]) je signal(widelce[i-1]) signal(widelce[i mod 5]) signal(jadalnia) 47

64 Rozwiązanie 2 własności Dwóch filozofów nie może trzymać w tym samym czasie tego samego widelca (wzajemne wykluczanie): tak Brak zakleszczenia: tak Brak zagłodzenia: tak Niewielki narzut obliczeniowy w przypadku braku rywalizacji: tak 48

65 Rozwiązanie 3 semafor binarny [] widelce = [1, 1, 1, 1, 1] semafor ogólny jadalnia = 4 // Filozof 5 while True: myśli wait(widelce[0]) wait(widelce[4]) je signal(widelce[0]) signal(widelce[4]) 49

66 Rozwiązanie 3 w4 f4 w3 f5 f3 w2 w0 f1 f2 w1 Asymetria protokołów wstępnych jako przeciwdziałanie zakleszczeniu. 50

67 Semafory w Javie Klasa Semaphore z pakietu java.util.concurrent Pierwszy konstruktor Semaphore(int permits) parametr permits określa wartość semafora, może być ujemna Metoda acquire to odpowiednik metody wait Może rzucić wyjątek InterruptedException Metoda release to odpowiednik metody signal Drugi konstruktor przyjmuje dodatkowy parametr boolean fair Gdy fair = true, to semafor jest semaforem silnym (uczciwym), tj. obsługuje wstrzymane wątki w kolejności FIFO Gdy fair = false, to semafor jest semaforem słabym nie ma gwarancji kolejności wybudzania wstrzymanych na semaforze wątków 51

68 Przykład 1 import java.util.concurrent.semaphore; 2 class Zliczanie implements Runnable { 3 static volatile int licznik = 0; 4 static Semaphore sem = new Semaphore(1); // semafor binarny 5 6 public void run() { 7 for (int i = 0; i < 10; ++i) { 8 try { 9 sem.acquire(); 10 } catch(interruptedexception e) {} 11 n = n + 1; 12 s.release(); 13 } 14 } 15 public static void main(string [] args) { 16 // utworzenie i uruchomienie wątków } 19 } 52

69 Symulacja semaforów ogólnych Problem czy możemy zaimplementować semafor ogólny mając do dyspozycji jedynie semafory binarne? 53

70 Próba 1 // zmienne globalne int licznik = K // wart. semafora (gdy licznik < 0 to brak zasobów) semafor binarny straznik = 1 semafor binarny wolne = 0 // symulowane wait wait () { wait( straznik ) licznik = licznik - 1 if (licznik < 0) { signal( straznik ) wait( wolne ) } else { signal( straznik ) } } // symulowane signal signal () { wait( straznik ) licznik = licznik + 1 if ( licznik 0 ) { // ktoś czeka sygnalizuj signal( wolne ) } signal( straznik ) } Semafor binarny straznik używany jest do zapewnienia WW dla sekcji krytycznej modyfikującej i odczytującej licznik 54

71 Próba 1 c.d. Załóżmy, że wykonują się współbieżnie 4 procesy (p1, p2, p3, p4) oraz zmienna licznik = 2 // Procesy p1, p2 pójdą tą ścieżką wait () { wait( straznik ) licznik = licznik - 1 if (licznik < 0) { signal( straznik ) wait( wolne ) } else { signal( straznik ) } } // Procesy p3 i p4 zostaną wstrzymane wait () { wait( straznik ) licznik = licznik - 1 if (licznik < 0) { signal( straznik ) wait( wolne ) } else { signal( straznik ) } } // zmienne globalne licznik = -2 // wart. semafora straznik = 1 wolne = 0 55

72 Próba 1 wait() { wait( straznik ) licznik = licznik - 1 if (licznik < 0) { signal( straznik ) wait( wolne ) //p3 i p4 //czekają } else signal( straznik ) } signal() { wait( straznik ) licznik = licznik + 1 if ( licznik 0 ) { signal( wolne ) } signal( straznik ) } Początkowo: licznik = -2 straznik = 1 wolne = 0 p1 i p2 wykonują signal() licznik = 0 straznik = 1 wolne = 1 p3 staje się aktywny i przechodzi przez wait( wolne) licznik = 0 straznik = 1 wolne = 0 p4 jest nadal wstrzymany, mimo że nie powinien być 56

73 Próba 2 poprawna // poprzednia wersja wait () { wait( straznik ) licznik = licznik - 1 if (licznik < 0) { signal( straznik ) wait( wolne ) } else { signal( straznik ) } } // poprawiona wersja wait () { wait( straznik ) licznik = licznik - 1 if (licznik < 0) { signal( straznik ) wait( wolne ) } signal( straznik ) } 57

74 Próba 2 poprawna // poprzednia wersja signal () { wait( straznik ) licznik = licznik + 1 if ( licznik 0 ) { signal( wolne ) } signal( straznik ) } // poprawiona wersja signal () { wait( straznik ) licznik = licznik + 1 if ( licznik 0 ) { signal( wolne ) } else { signal( straznik ) } } Zmiana zapobiega możliwości wielokrotnego podniesienia semafora wolne, jeżeli nie został on wcześniej opuszczony. W Próbie 1., jeżeli p1 wykona signal(wolne), ale nie signal(straznik), to p2 nie może wykonać signal(wolne) zanim p3 nie wykona sekcji krytycznej 58

75 Dziedziczenie sekcji krytycznej Opisana technika nazywana jest dziedziczeniem sekcji krytycznej Proces budzony dziedziczy dostęp do sekcji krytycznej (opuszczony semafor) Po obudzeniu proces musi zwolnić (podnieść) semafor 59

76 Dziedziczenie sekcji krytycznej c.d. Schemat alg. z dziedziczeniem sekcji krytycznej Zawieszanie procesu: wait( straznik )... if( warunek ) { licznik = licznik + 1 signal( straznik ) wait( wolne ) // po obudzeniu sem. straznik będzie opuszczony } signal( straznik ) Budzenie procesu: wait( straznik ) if ( licznik > 0 ) { signal( wolne ) // wybudź jeden z wstrzymanych procesów } else { signal( straznik ) } 60

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

Przetwarzanie wielowątkowe przetwarzanie współbieżne. Krzysztof Banaś Obliczenia równoległe 1 Przetwarzanie wielowątkowe przetwarzanie współbieżne Krzysztof Banaś Obliczenia równoległe 1 Problemy współbieżności wyścig (race condition) synchronizacja realizowana sprzętowo (np. komputery macierzowe)

Bardziej szczegółowo

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

Przeplot. Synchronizacja procesów. Cel i metody synchronizacji procesów. Wątki współbieżne Synchronizacja procesów Przeplot Przeplot wątków współbieżnych Cel i metody synchronizacji procesów Problem sekcji krytycznej Semafory Blokady 3.1 3.3 Wątki współbieżne Cel i metody synchronizacji procesów

Bardziej szczegółowo

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

Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów. Iwona Kochańska Programowanie współbieżne Wykład 10 Synchronizacja dostępu do współdzielonych zasobów Iwona Kochańska Mechanizm synchronizacji wątków/procesów Wykorzystanie semaforów zapobiega niedozwolonemu wykonaniu

Bardziej szczegółowo

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

Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg. Wady mechanizmów niskopoziomowych Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg. Dekkera zależny od liczby synchronizowanych

Bardziej szczegółowo

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

Semafory. // G - globalna dla wszystkich. // Wada - aktywne oczekiwanie Test_and_Set(Li); exit when Li = 0; end loop sekcja_krytyczna(i); G := 0; Semafory Rozwiązanie problemu wzajemnego wykluczania Bez dodatkowego wsparcia sprzętowego i programowego Zakładamy jedynie, że zapis do i odczyt z pamięci wspólnej są operacjami atomowymi (czyli istnieje

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1 Programowanie równoległe i rozproszone Monitory i zmienne warunku Krzysztof Banaś Programowanie równoległe i rozproszone 1 Problemy współbieżności Problem producentów i konsumentów: jedna grupa procesów

Bardziej szczegółowo

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

Bardziej szczegółowo

Wprowadzenie do programowania współbieżnego

Wprowadzenie do programowania współbieżnego Wprowadzenie do programowania współbieżnego Marcin Engel Instytut Informatyki Uniwersytet Warszawski Zamiast wstępu... Zamiast wstępu... Możliwość wykonywania wielu akcji jednocześnie może ułatwić tworzenie

Bardziej szczegółowo

Systemy operacyjne. Zajęcia 11. Monitory

Systemy operacyjne. Zajęcia 11. Monitory Systemy operacyjne. Zajęcia 11. Monitory 1. Monitor to mechanizm zamykający całą pamięć wspólną i synchronizację w pojedynczym module. 2. Monitor posiada całą pamięć wspólną jako część 'prywatną': dostępu

Bardziej szczegółowo

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

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1 Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie

Bardziej szczegółowo

synchronizacji procesów

synchronizacji procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak Plan wykładu Definicja semafora Klasyfikacja semaforów Implementacja semaforów Zamki Zmienne warunkowe Klasyczne problemy synchronizacji (2) Semafory

Bardziej szczegółowo

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

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1 Wątki 1. Wątki - wprowadzenie Wątkiem nazywamy sekwencyjny przepływ sterowania w procesie, który wykonuje dany program np. odczytywanie i zapisywanie plików Program Javy jest wykonywany w obrębie jednego

Bardziej szczegółowo

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

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak Plan wykładu Abstrakcja programowania współbieżnego Instrukcje atomowe i ich przeplot Istota synchronizacji Kryteria poprawności programów współbieżnych

Bardziej szczegółowo

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

Języki i Techniki Programowania II. Wykład 7. Współbieżność 1 Języki i Techniki Programowania II Wykład 7 Współbieżność 1 Programy, Procesy, Wątki Program to zestaw instrukcji do wykonania, dane do przetworzenia, mechanizmy sterujące (stos) Proces w komputerze to

Bardziej szczegółowo

synchronizacji procesów

synchronizacji procesów Dariusz Wawrzyniak Definicja semafora Klasyfikacja semaforów Implementacja semaforów Zamki Zmienne warunkowe Klasyczne problemy synchronizacji Plan wykładu (2) Semafory Rodzaje semaforów (1) Semafor jest

Bardziej szczegółowo

Programowanie Równoległe i Rozproszone

Programowanie Równoległe i Rozproszone Programowanie Równoległe i Rozproszone Lucjan Stapp Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska (l.stapp@mini.pw.edu.pl) 1/30 PRiR MONITOR klasa z następującymi właściwościami: wszystkie

Bardziej szczegółowo

Synchronizacja procesów i wątków

Synchronizacja procesów i wątków SOE Systemy Operacyjne Wykład 12 Synchronizacja procesów i wątków dr inŝ. Andrzej Wielgus Instytut Mikroelektroniki i Optoelektroniki WEiTI PW Problem sekcji krytycznej Podstawowy problem synchronizacji

Bardziej szczegółowo

SOP2 - semafory. grudzień

SOP2 - semafory. grudzień SOP2 - semafory grudzień 2010 1 Plan prezentacji Problem producent-konsument Problem czytelników i pisarzy Problem jedzących filozofów grudzień 2010 2 Producent-konsument var bufor: array [0..n-1] of produkt;

Bardziej szczegółowo

Monitory. Jarosław Kuchta

Monitory. Jarosław Kuchta 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

Bardziej szczegółowo

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

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd Synchronizacja procesów Proces producenta - zmodyfikowany (licznik) produkuj jednostka w nast_p while licznik =n do nic_nie_rob; bufor [we] := nast_p; we=we+1 mod n; licznik:=licznik+1; Zmodyfikowany proces

Bardziej szczegółowo

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

Programowanie współbieżne Wykład 5. Rafał Skinderowicz Programowanie współbieżne Wykład 5 Rafał Skinderowicz Monitory motywacje Mechanizmy synchronizacji takie jak blokady (zamki) semafory pozwalają efektywnie rozwiązywać dostępu do współdzielonych zasobów,

Bardziej szczegółowo

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ę. J. Ułasiewicz Programowanie aplikacji współbieżnych 1 11 Semafor nie jest mechanizmem strukturalnym. Aplikacje pisane z użyciem semaforów są podatne na błędy. Np. brak operacji sem_post blokuje aplikację.

Bardziej szczegółowo

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

Semafory. - aktywne oczekiwanie =GRGDWNRZ\PZVSDUFLHPVSU]WRZ\P 6SHFMDOQDLQVWUXNFMDPDV]\QRZDUHDOL]XMFDDWRPRZ\]DSLVL odczyt, np. Semafory 5R]ZL]DQLHSUREOHPXZ]DMHPQHJRZ\NOXF]DQLD %H]GRGDWNRZHJRZVSDUFLDVSU]WRZHJRLSURJUDPRZHJR =DNáDGDP\MHG\QLH*H]DSLVGRLRGF]\W]SDPLFLZVSyOQHMV RSHUDFMDPLDWRPRZ\PLF]\OLLVWQLHMHDUELWHUZVSyOQHMSDPLFL :UD]LHMHGQRF]HVQHJR]DSLVXLRGF]\WXUH]XOWDWHPEG]LH

Bardziej szczegółowo

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

Klasyczne problemy współbieżności. Problem producenta i konsumenta Problem czytelników i pisarzy Problem pięciu filozofów 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

Bardziej szczegółowo

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

Wykład 5. Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Wykład 5 Synchronizacja (część II) Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Wady semaforów Jeden z pierwszych mechanizmów synchronizacji Generalnie jest to mechanizm bardzo

Bardziej szczegółowo

Podstawy współbieżności

Podstawy współbieżności Podstawy współbieżności Algorytmy i struktury danych. Wykład 6. Rok akademicki: 2010/2011 Od koncepcji współbieżności do systemów rozproszonych Współbieżnośd rozważany na poziomie koncepcyjnym sposób realizacji

Bardziej szczegółowo

Programowanie równoległe i rozproszone. W1. Wielowątkowość. 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 Programowanie równoległe i rozproszone W1. Wielowątkowość Krzysztof Banaś Programowanie równoległe i rozproszone 1 Problemy współbieżności wyścig (race condition) synchronizacja realizowana sprzętowo (np.

Bardziej szczegółowo

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

Problemy czytelników i pisarzy oraz 5 ucztujących filozofów Problemy czytelników i pisarzy oraz 5 dr inż. Sławomir Samolej Katedra Informatyki i Automatyki Politechnika Rzeszowska Program przedmiotu oparto w części na materiałach opublikowanych na: http://wazniak.mimuw.edu.pl/

Bardziej szczegółowo

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

1 Wątki 1. 2 Tworzenie wątków 1. 3 Synchronizacja 3. 4 Dodatki 3. 5 Algorytmy sortowania 4 Spis treści 1 Wątki 1 2 Tworzenie wątków 1 3 Synchronizacja 3 4 Dodatki 3 5 Algorytmy sortowania 4 6 Klasa Runnable 4 Temat: Wątki Czym są wątki. Grafika. Proste animacje. Małe podsumowanie materiału.

Bardziej szczegółowo

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

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego Wątki Wątek - definicja Ciąg instrukcji (podprogram) który może być wykonywane współbieżnie (równolegle) z innymi programami, Wątki działają w ramach tego samego procesu Współdzielą dane (mogą operować

Bardziej szczegółowo

Systemy operacyjne III

Systemy operacyjne III Systemy operacyjne III WYKŁAD 3 Jan Kazimirski 1 Współbieżność 2 Współbieżność Wielozadaniowość - zarządzanie wieloma procesami w ramach jednego CPU Wieloprocesorowość - zarządzanie wieloma zadaniami w

Bardziej szczegółowo

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

Wykład 4. Synchronizacja procesów (i wątków) cześć I. Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Wykład 4 Synchronizacja procesów (i wątków) cześć I Wojciech Kwedlo, Wykład z Systemów Operacyjnych -1- Wydział Informatyki PB Procesy wykonują się współbieżnie Potrzeba synchronizacji Jeżeli w 100% są

Bardziej szczegółowo

Problemy współbieżności

Problemy współbieżności Problemy współbieżności wyścig (race condition) synchronizacja realizowana sprzętowo (np. komputery macierzowe) realizowana programowo (bariera, sekcja krytyczna, operacje atomowe) wzajemne wykluczanie

Bardziej szczegółowo

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

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run(). Wątki Streszczenie Celem wykładu jest wprowadzenie do obsługi wątków w Javie. Czas wykładu 45 minut. Definiowanie wątków jako klas potomnych Thread Nadpisanie metody run(). class Watek extends Thread public

Bardziej szczegółowo

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

WYKŁAD 4 SEMAPHORES (CIĄG DALSZY) Przykład 6 Problem czytelników i pisarzy. Wykład 4 strona 1/24 WYKŁAD 4 SEMAPHORES (CIĄG DALSZY) Przykład 6 Problem czytelników i pisarzy Wykład 4 strona 1/24 Ilustracja 5. Schemat problemu czytelników i pisarzy Wykład 4 strona 2/24 Opis problemu: Jest n czytelników,

Bardziej szczegółowo

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

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd Synchronizacja procesów Proces producenta - zmodyfikowany (licznik) produkuj jednostka w nast_p while licznik =n do nic_nie_rob; bufor [we] := nast_p; we=we+1 mod n; licznik:=licznik+1; Zmodyfikowany proces

Bardziej szczegółowo

Programowanie wspóªbie»ne

Programowanie wspóªbie»ne 1 Programowanie wspóªbie»ne wiczenia 5 monitory cz. 1 Zadanie 1: Stolik dwuosobowy raz jeszcze W systemie dziaªa N par procesów. Procesy z pary s nierozró»nialne. Ka»dy proces cyklicznie wykonuje wªasnesprawy,

Bardziej szczegółowo

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

Mechanizmy komunikacji. spotkania symetryczne (język CSP) spotkania asymetryczne (Ada) przestrzenie krotek (Linda) potoki, komunikaty i kanały (Unix) Mechanizmy komunikacji spotkania symetryczne (język CSP) spotkania asymetryczne (Ada) przestrzenie krotek (Linda) potoki, komunikaty i kanały (Unix) Język CSP Hoare (1978r.) Communicating Sequential Processes

Bardziej szczegółowo

Systemy Operacyjne synchronizacja i komunikacja procesów

Systemy Operacyjne synchronizacja i komunikacja procesów Katedra Informatyki, Politechnika Świętokrzyska w Kielcach Kielce, 1 grudnia 2006 1 1 Sytuacje hazardowe 2 Problem sekcji krytycznej 3 Warunki poprawności rozwiązania 4 Rozwiązanie programowe dla dwóch

Bardziej szczegółowo

Modelowanie procesów współbieżnych

Modelowanie procesów współbieżnych Modelowanie procesów współbieżnych dr inż. Maciej Piotrowicz Katedra Mikroelektroniki i Technik Informatycznych PŁ piotrowi@dmcs.p.lodz.pl http://fiona.dmcs.pl/~piotrowi -> Modelowanie... Literatura M.

Bardziej szczegółowo

Synchronizacja procesów

Synchronizacja procesów Synchronizacja procesów - Współbieżność i synchronizacja procesów - Systemowe mechanizmy synchronizacji procesów Systemy operacyjne Wykład 7 1 Współbieżność i synchronizacja procesów Abstrakcja programowania

Bardziej szczegółowo

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

J. Ułasiewicz Programowanie aplikacji współbieżnych 1 J. Ułasiewicz Programowanie aplikacji współbieżnych 1 1 1.1 Prosty przykład zakleszczenia (ang. Mexican standoff) W systemach w których wykonywane jest wiele współbieżnych procesów które operują na wspólnych

Bardziej szczegółowo

Kurs programowania. Wykład 8. Wojciech Macyna

Kurs programowania. Wykład 8. Wojciech Macyna Wykład 8 Program bez watków, jeden procesor, trzy zadania Program z watkami, jeden procesor, trzy zadania Procesory wielordzeniowe, każde zadanie na osobnym procesorze Trzy zadania uruchomione w watkach

Bardziej szczegółowo

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

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ Procesy i wątki Proces posiada samodzielne środowisko wykonawcze. Proces posiada własny zestaw podstawowych zasobów w czasie wykonywania; W szczególności, każdy proces ma własną przestrzeń pamięci. W uproszczeniu

Bardziej szczegółowo

Programowanie wspóªbie»ne

Programowanie wspóªbie»ne 1 Programowanie wspóªbie»ne wiczenia 2 semafory cz. 1 Zadanie 1: Producent i konsument z buforem cyklicznym type porcja; void produkuj(porcja &p); void konsumuj(porcja p); porcja bufor[n]; / bufor cykliczny

Bardziej szczegółowo

Java. Programowanie Obiektowe Mateusz Cicheński

Java. Programowanie Obiektowe Mateusz Cicheński Java Programowanie Obiektowe Mateusz Cicheński Wielowątkowość Proces a wątek? Thread vs Runnable sleep(), interrupt(), join() Problemy wielowątkowości Obiekty niemodyfikowalne (immutable) Serializacja

Bardziej szczegółowo

4. Procesy pojęcia podstawowe

4. Procesy pojęcia podstawowe 4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa

Bardziej szczegółowo

Aplikacje w Javie- wykład 11 Wątki-podstawy

Aplikacje w Javie- wykład 11 Wątki-podstawy 1 Aplikacje w Javie- wykład 11 Wątki-podstawy Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/ http://docs.oracle.com/javase/9/docs/

Bardziej szczegółowo

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

Obliczenia równoległe i rozproszone w JAVIE. Michał Kozłowski 30 listopada 2003 Obliczenia równoległe i rozproszone w JAVIE Michał Kozłowski 30 listopada 2003 Wątki w JAVIE Reprezentacja wątków jako obiektów Uruchamianie i zatrzymywanie wątków Realizacja wątków Ograniczenia Mechanizmy

Bardziej szczegółowo

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

Programowanie współbieżne i rozproszone w języku Java Programowanie współbieżne i rozproszone w języku Java Uniwersytet Marii Curie-Skłodowskiej Wydział Matematyki, Fizyki i Informatyki Instytut Informatyki Programowanie współbieżne i rozproszone w języku

Bardziej szczegółowo

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

Stworzenie klasy nie jest równoznaczne z wykorzystaniem wielowątkowości. Uzyskuje się ją dopiero poprzez inicjalizację wątku. Laboratorium 7 Wstęp Jednym z podstawowych własności Javy jest wielowątkowość. Wiąże się to z możliwością współbieżnego wykonywania różnych operacji w ramach pojedynczej wirtualnej maszyny Javy (JVM).

Bardziej szczegółowo

Programowanie wielowątkowe. Tomasz Borzyszkowski

Programowanie wielowątkowe. Tomasz Borzyszkowski Programowanie wielowątkowe Tomasz Borzyszkowski Wątki a procesy Jako jeden z niewielu języków programowania Java udostępnia użytkownikowi mechanizmy wspierające programowanie wielowątkowe. Program wielowątkowy

Bardziej szczegółowo

Strategia "dziel i zwyciężaj"

Strategia dziel i zwyciężaj Strategia "dziel i zwyciężaj" W tej metodzie problem dzielony jest na kilka mniejszych podproblemów podobnych do początkowego problemu. Problemy te rozwiązywane są rekurencyjnie, a następnie rozwiązania

Bardziej szczegółowo

Model pamięci. Rafał Skinderowicz

Model pamięci. Rafał Skinderowicz Model pamięci Rafał Skinderowicz Czym jest model pamięci Model pamięci dotyczy programów współbieżnych W programie współbieżnym może się zdarzyć, że dany wątek nie będzie widział od razu wartości zmiennej

Bardziej szczegółowo

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

Gdy kilka procesów czyta a przynajmniej jeden dokonuje zapisu wynik odczytu zależeć może od sposobu realizacji przeplotu. Komputery i Systemy Równoległe Jędrzej Ułasiewicz 1 9. Wzajemne wykluczanie 9.1 Przeplot i współużywalność zasobów Wyróżniamy dwa rodzaje zasobów: 1. Zasoby współużywalne - mogą być wykorzystane przez

Bardziej szczegółowo

3URJUDPRZDQLHZVSyáELH*QHZVWS

3URJUDPRZDQLHZVSyáELH*QHZVWS 3URJUDPRZDQLHZVSyáELH*QHZVWS Problem sortowania N liczb Algorytm sekwencyjny sortuj(1, N); NRV]WVRUWRZDQLDSU]H]SURVW]DPLDQN 2 SRUyZQD $OJRU\WPUyZQROHJá\ cobegin {wykonaj równolegle} VRUWXMSyáB1 VRUWXMSyáB11

Bardziej szczegółowo

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

J. Ułasiewicz Programowanie aplikacji współbieżnych 1 J. Ułasiewicz Programowanie aplikacji współbieżnych 1 1 1.1 Prosty przykład zakleszczenia (ang. Mexican standoff) W systemach w których wykonywane jest wiele współbieżnych procesów które operują na wspólnych

Bardziej szczegółowo

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

Programowanie współbieżne Wykład 2. Rafał Skinderowicz Programowanie współbieżne Wykład 2 Rafał Skinderowicz Program współbieżny a sekwencyjny Program zapis algorytmu, ciąg instrukcji do wykonania przez procesor: statyczny sekwencja instrukcji przekształcających

Bardziej szczegółowo

Klasyczne problemy synchronizacji

Klasyczne problemy synchronizacji 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

Bardziej szczegółowo

4. Procesy pojęcia podstawowe

4. Procesy pojęcia podstawowe 4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa

Bardziej szczegółowo

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie

Bardziej szczegółowo

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

1. Liczby i w zapisie zmiennoprzecinkowym przedstawia się następująco 1. Liczby 3456.0012 i 0.000076235 w zapisie zmiennoprzecinkowym przedstawia się następująco a) 0.34560012 10 4 i 0.76235 10 4 b) 3.4560012 10 3 i 7.6235 10 5 c) 3.4560012 10 3 i 7.6235 10 5 d) po prostu

Bardziej szczegółowo

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

Multiprocessor Shared-Memory Information Exchange. Damian Klata, Adam Bułak Multiprocessor Shared-Memory Information Exchange Damian Klata, Adam Bułak Wstęp Zajmiemy się analizą protokołu opartego na komunikacji przez pamięć dzieloną opracowany przez firmę Westinghouse. Protokół

Bardziej szczegółowo

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

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1. Wielowątkowość Programowanie w środowisku rozproszonym. Wykład 1. Informacje organizacyjne Wymiar godzin: W-30, LAB-15 Zaliczenie wykonanie kilku programów i ich zaliczenie (w trakcie zajęć laboratoryjnych)

Bardziej szczegółowo

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

5. Model komunikujących się procesów, komunikaty Jędrzej Ułasiewicz str. 1 5. Model komunikujących się procesów, komunikaty Obecnie stosuje się następujące modele przetwarzania: Model procesów i komunikatów Model procesów komunikujących się poprzez pamięć

Bardziej szczegółowo

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

Kurs programowania. Wykład 8. Wojciech Macyna. 10 maj 2017 Wykład 8 10 maj 2017 Współbieżność Watki w JAVA-ie Współbieżność może być realizowana na poziomie systemu operacyjnego (procesy) lub na poziomie aplikacji (watki). W JAVA-ie powszechnie stosuje się watki.

Bardziej szczegółowo

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

Równoległość i współbieżność Równoległość i współbieżność Wykonanie sekwencyjne. Poszczególne akcje procesu są wykonywane jedna po drugiej. Dokładniej: kolejna akcja rozpoczyna się po całkowitym zakończeniu poprzedniej. Praca współbieżna

Bardziej szczegółowo

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

Równoległość i współbieżność Równoległość i współbieżność Wykonanie sekwencyjne. Poszczególne akcje procesu są wykonywane jedna po drugiej. Dokładniej: kolejna akcja rozpoczyna się po całkowitym zakończeniu poprzedniej. Praca współbieżna

Bardziej szczegółowo

Język Java wątki (streszczenie)

Język Java wątki (streszczenie) Programowanie współbieżna Język Java wątki (streszczenie) Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Języka Java wątki Autor:

Bardziej szczegółowo

Programowanie komputerów

Programowanie komputerów Programowanie komputerów Wykład 7: Programowanie wielowątkowe w Javie dr inż. Walery Susłow Współbieżność Programy współbieżne (concurrent software) aplikacje potrafiące wykonywać kilka operacji w tym

Bardziej szczegółowo

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

Semafor ustaw_semafor(key_t nazwa, int start); Semafor usun_semafor(semafor sem); void signal(semafor sem); void wait(semafor sem); Semafory przypomnienie semafory służą ochronie dostępu procesów do sekcji krytycznej; na semaforach dostępne są dwie operacje: podniesienie semafora signal, opuszczenie semafora wait opuszczony semafor

Bardziej szczegółowo

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

Procesy i wątki. Blok kontrolny procesu. Proces. Proces - elementy. Stan procesu Proces Procesy i wątki Proces jest wykonywanym programem. Wykonanie procesu musi przebiegać w sposób sekwencyjny ( w dowolnej chwili na zamówienie naszego procesu może być wykonany co najwyżej jeden rozkaz

Bardziej szczegółowo

Algorytmy i Struktury Danych

Algorytmy i Struktury Danych Algorytmy i Struktury Danych Kopce Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 11 1 / 69 Plan wykładu

Bardziej szczegółowo

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

Programowanie współbieżne Wykład 7. Iwona Kochaoska Programowanie współbieżne Wykład 7 Iwona Kochaoska Poprawnośd programów współbieżnych Właściwości związane z poprawnością programu współbieżnego: Właściwośd żywotności - program współbieżny jest żywotny,

Bardziej szczegółowo

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

Mechanizmy pracy równoległej. Jarosław Kuchta Mechanizmy pracy równoległej Jarosław Kuchta Zagadnienia Algorytmy wzajemnego wykluczania algorytm Dekkera Mechanizmy niskopoziomowe przerwania mechanizmy ochrony pamięci instrukcje specjalne Mechanizmy

Bardziej szczegółowo

Dokumentacja do API Javy.

Dokumentacja do API Javy. Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu

Bardziej szczegółowo

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

Współbieżność w środowisku Java Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych

Bardziej szczegółowo

Programowanie współbieżne Zadanie numer 3 Monitory

Programowanie współbieżne Zadanie numer 3 Monitory Programowanie współbieżne Zadanie numer 3 Monitory Cel zadania Celem zadania jest poznanie monitorowego mechanizmu synchronizacji procesów i zasad jego działania. Podstawa zaliczenia 1. Zademonstrowanie

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

Zaawansowany kurs języka Python

Zaawansowany kurs języka Python Wykład 6. 6 listopada 2015 Plan wykładu Callable objects 1 Callable objects 2 3 Plan wykładu Callable objects 1 Callable objects 2 3 Callable objects Wszystko jest obiektem. Callable objects Wszystko jest

Bardziej szczegółowo

SYSTEMY OPERACYJNE WYKLAD 6 - procesy

SYSTEMY OPERACYJNE WYKLAD 6 - procesy Wrocław 2007 SYSTEMY OPERACYJNE WYKLAD 6 - procesy Paweł Skrobanek C-3, pok. 323 e-mail: pawel.skrobanek@pwr.wroc.pl www.equus.wroc.pl/studia.html 1 Zasoby: PROCES wykonujący się program ; instancja programu

Bardziej szczegółowo

Sortowanie przez wstawianie Insertion Sort

Sortowanie przez wstawianie Insertion Sort Sortowanie przez wstawianie Insertion Sort Algorytm sortowania przez wstawianie można porównać do sposobu układania kart pobieranych z talii. Najpierw bierzemy pierwszą kartę. Następnie pobieramy kolejne,

Bardziej szczegółowo

Systemowe mechanizmy synchronizacji procesów

Systemowe mechanizmy synchronizacji procesów Systemowe mechanizmy synchronizacji procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak Celem wykładu jest przedstawienie mechanizmów synchronizacji, które mogą być implementowane zarówno na

Bardziej szczegółowo

Generatory. Michał R. Przybyłek

Generatory. Michał R. Przybyłek Generatory Michał R. Przybyłek 1 Wstęp Generator to potencjalnie nieskończony, leniwie obliczany, ciąg wartości. W zależności od tego, która ze stron decyduje o wygenerowaniu nowej wartości wyróżniamy

Bardziej szczegółowo

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

Program jest więc strukturą statyczną zapisaną na jakimś nośniku. Natomiast proces jest wykonującym się programem. J. Ułasiewicz Programowanie aplikacji współbieżnych 1 1 Podstawowe definicje i pojęcia współbieżności 1.1 Motywacja Przewiduje się że w dalszej perspektywie głównym motorem wzrostu mocy przetwarzania komputerów

Bardziej szczegółowo

Proces y i y w i ąt ą ki

Proces y i y w i ąt ą ki Procesy i wątki Proces Proces jest wykonywanym programem. Wykonanie procesu musi przebiegać w sposób sekwencyjny ( w dowolnej chwili na zamówienie naszego procesu może być wykonany co najwyżej jeden rozkaz

Bardziej szczegółowo

Algorytmy z powrotami. Algorytm minimax

Algorytmy z powrotami. Algorytm minimax Algorytmy z powrotami. Algorytm minimax Algorytmy i struktury danych. Wykład 7. Rok akademicki: 2010/2011 Algorytm z powrotami rozwiązanie problemu budowane jest w kolejnych krokach, po stwierdzeniu (w

Bardziej szczegółowo

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

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 INFORMATYKA W SZKOLE Dr inż. Grażyna KRUPIŃSKA grazyna@fis.agh.edu.pl D-10 pokój 227 Podyplomowe Studia Pedagogiczne Sortowanie Dane wejściowe : trzy liczby w dowolnym porządku Dane wyjściowe: trzy liczby

Bardziej szczegółowo

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

WSPÓŁBIEŻNOŚĆ. MATERIAŁY: WSPÓŁBIEŻNOŚĆ ZAGADNIENIA: procesy, wątki, synchronizacja, synchronizacja w Java 5.0 blokady, egzekutory, zbiory wątków MATERIAŁY: http://docs.oracle.com/javase/tutorial/essential/concurrency/ HTTP://USERS.UJ.EDU.PL/~CIESLA/

Bardziej szczegółowo

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

Programowanie współbieżne Zadanie 5 - Podstawowe problemy programowania współbieżnego 150875 Grzegorz Graczyk numer indeksu imię i nazwisko 151021 Paweł Tarasiuk numer indeksu imię i nazwisko Data 2011-11-07 Kierunek Informatyka Specjalizacja Inżynieria Oprgoramowania i Analiza Danych Rok

Bardziej szczegółowo

Model pamięci. Rafał Skinderowicz

Model pamięci. Rafał Skinderowicz Model pamięci Rafał Skinderowicz Czym jest model pamięci Model pamięci dotyczy programów współbieżnych W programie współbieżnym może się zdarzyć, że dany wątek nie będzie widział od razu wartości zmiennej

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

Podstawy programowania obiektowego

Podstawy programowania obiektowego Podstawy programowania obiektowego Technologie internetowe Wykład 5 Program wykładu Podejście obiektowe kontra strukturalne do tworzenie programu Pojęcie klasy i obiektu Składowe klasy: pola i metody Tworzenie

Bardziej szczegółowo

Analiza algorytmów zadania podstawowe

Analiza algorytmów zadania podstawowe Analiza algorytmów zadania podstawowe Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r 0 Jaka wartość zostanie zwrócona przez powyższą

Bardziej szczegółowo

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Języki i metody programowania Java INF302W Wykład 2 (część 1) Języki i metody programowania Java INF302W Wykład 2 (część 1) Autor Dr inż. Zofia Kruczkiewicz Autor: Zofia Kruczkiewicz, Języki i metody programowania Java, wykład 2, część 1 1 Struktura wykładu 1. Identyfikacja

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

4. Procesy pojęcia podstawowe

4. Procesy pojęcia podstawowe 4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa

Bardziej szczegółowo

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych 2. Tablice Tablica to struktura danych przechowująca elementy jednego typu (jednorodna). Dostęp do poszczególnych elementów składowych jest możliwy za pomocą indeksów. Rozróżniamy następujące typy tablic:

Bardziej szczegółowo