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

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

SOP2 - semafory. grudzień

Wprowadzenie do programowania współbieżnego

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

Programowanie Równoległe i Rozproszone

Monitory. Wady semafora

Systemy operacyjne. Zajęcia 11. Monitory

Programowanie współbieżne Zadanie nr 4 Spotkania

Komunikacja asynchroniczna w modelu rozproszonym

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

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

Wstęp do programowania 2

3URJUDPRZDQLHZVSyáELH*QHZVWS

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

synchronizacji procesów

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

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

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

synchronizacji procesów

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

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

Modelowanie procesów współbieżnych

Wstęp do programowania

Pascal - wprowadzenie

Programowanie Współbieżne. Monitory

Synchronizacja procesów

Monitory. Jarosław Kuchta

Bloki anonimowe w PL/SQL

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

DECLARE VARIABLE zmienna1 typ danych; BEGIN

Synchronizacja procesów

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

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

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

ForPascal Interpreter języka Pascal

Modelowanie złożonych układów cyfrowych (1)

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

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

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

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

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

Klient-Serwer Komunikacja przy pomocy gniazd

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

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

Visual Basic for Application (VBA)

Programowanie Współbieżne. Wstęp

LibreOffice Calc VBA

15. Funkcje i procedury składowane PL/SQL

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Wstęp do programowania

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

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

PODSTAWY BAZ DANYCH 13. PL/SQL

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

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

PL/SQL. Część 1 Bloki PL/SQL. Piotr Medoń

Systemy operacyjne III

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Zasady Programowania Strukturalnego

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

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

Język HDL - VERILOG. (Syntetyzowalna warstwa języka) Hardware Description Language Krzysztof Jasiński PRUS PRUS

Wstęp do programowania

Składowane procedury i funkcje

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Wykład 4. Algorytmy i programy. Algorytmy + struktury danych = programy. Niklaus Wirth. Algorytm = logika + sterowanie.

Problemy współbieżności

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

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

Programowanie w Turbo Pascal

Algorytmika i Programowanie VBA 1 - podstawy

Wstęp do Programowania potok funkcyjny

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

Zagadnienia zaawansowane. Lech Kruś,

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

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 II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Programowanie współbieżne Zadanie numer 3 Monitory

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

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

Język PL/SQL Pakiety podprogramów

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Programowanie. Pascal - język programowania wysokiego poziomu. Klasa 2 Lekcja 9 PASCAL

Cw.12 JAVAScript w dokumentach HTML

1 Wprowadzenie do algorytmiki

Systemowe mechanizmy synchronizacji procesów

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

Programowanie strukturalne

Wstęp do programowania

Instrukcja warunkowa i złoŝona.

Struktura pliku projektu Console Application

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

PL/SQL. Zaawansowane tematy PL/SQL

Informatyka 1. Wyrażenia i instrukcje cd., ręczna symulacja, operacje wejścia/wyjścia

Język programowania PASCAL

Transkrypt:

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 Nowy język do zapisu procesów współbieżnych prostota 4 instrukcje proste (przypisanie, pusta, wejścia, wyjścia) 2 instrukcje strukturalne (alternatywa, pętla) mechanizm spotkań symetrycznych możliwe równoległe wykonywanie instrukcji w ramach procesu możliwość parametryzowania procesów

Program w CSP [ P1::<treść procesu P1> P2::<treść P2>... Pn::<treść Pn> ] II oznacza równoległość procesów P1, P2,..., Pn etykiety procesów Możliwość parametryzowania procesów: P(k:1..N):: <treść zależna od zmiennej związanej k> daje w wyniku N procesów P(1),...,P(N).

Instrukcje języka CSP (1) Instrukcja przypisania zwykła x := n jednoczesna (x,y,z) := (2a+1, b+c, a-2c) Instrukcja pusta słowo kluczowe skip (niezbędna przy wykorzystaniu alternatywy)

Instrukcje języka CSP (2) Alternatywa uogólnienie instrukcji warunkowej [ D1->I1 [] D2->I2 []... [] Dn->In ] Di dozory (ciągi warunków logicznych oddzielonych średnikami operator and) Ii niepuste ciągi instrukcji oddzielone średnikami operator następstwa Wykonanie: - równoczesne obliczenie wszystkich dozorów - wybranie jednego z dozorów spełnionych (niedeterministyczne) - wykonanie następujących po nim instrukcji Brak spełnionych dozorów zatrzymuje wykonywanie programu (błąd)

Instrukcja alternatywy Przykład: [x=1->x:=x+3 [] x>4->y:=2x [] x<0->x:=abs(x)] Możliwość parametryzowania przykład: (p:1..5) x<2*p -> y:=f p (x) Efekt instrukcji warunkowej if w then I: [ w -> I [] not w -> skip ]

Instrukcje języka CSP (3) Instrukcja pętli - *alternatywa *[ D1->I1 [] D2->I2 []... [] Dn->In ] Wykonywana tak długo, aż nie będzie spełniony żaden dozór Wykonanie równoległe instrukcji I1 I2... In comment słowo kluczowe oznaczające komentarz

Komunikacja między procesami Mechanizm spotkania symetrycznego: nadawca A instrukcja wyjścia B!X(y1...yn) odbiorca B instrukcja wejścia A?X(z1...zn) Procesy muszą wzajemnie znać swoje nazwy. Pominięcie wyrażeń y i z w instrukcjach daje mechanizm synchronizacji

Idea spotkania Proces A Proces B B!paczka(5,3,6,8) A?paczka(x1,x2,x3,x4) Instrukcje wykonywane tylko wspólnie (czekanie na drugiego)

Problem producenta-konsumenta (bez bufora) [ PRODUCENT:: p:porcja; *[true -> produkuj(p); KONSUMENT!p]; KONSUMENT:: p:porcja; *[PRODUCENT?p -> konsumuj(p);] ] porcja typ przekazywanego elementu Instrukcja wejścia Q?.. w dozorach procesu P: true jeśli Q czeka na wykonanie odpowiedniej instrukcji wyjścia P!... false jeśli Q nie istnieje zawiesza P do chwili, gdy Q dojdzie do instrukcji wyjścia W jednym dozorze może wystąpić tylko jedna instrukcja wejścia i musi być to ostatnia instrukcja dozoru!

Problem producenta-konsumenta (z buforem jednoelementowym) [ PRODUCENT:: p:porcja; *[true -> produkuj(p); BUFOR!p]; BUFOR:: p:porcja; *[PRODUCENT?p -> KONSUMENT!p;] KONSUMENT:: p:porcja; *[BUFOR?p -> konsumuj(p);] ] W CSP procesy nie mogą komunikować się przez wspólną pamięć konieczne wprowadzenie procesu BUFOR Bufor N-elementowy? ćwiczenie Modelowanie procesów współbieżnych 11

Język Ada Język programowania głównie systemów czasu rzeczywistego (przeważnie współbieżnych) Bardzo rozbudowany, złożona skrajnia Brak pełnego kompilatora dla PC (kłopotliwa realizacja współbieżności) Standard zapisu programów współbieżnych w publikacjach naukowych

Mechanizm spotkań asymetrycznych Wzorowane na spotkaniach z CSP Dodatkowe obliczenia wykonywane w jednym z procesów (proces obsługujący serwer) Serwer udostępnia procesowi obsługiwanemu (klientowi) różne miejsca spotkań, widoczne w postaci wejść (entries). Klient musi znać nazwę serwera, serwer nie zna klientów.

Przykład serwer liczący pierwiastek task (proces) A task (proces) B... entry SQRT(n in:integer; y: out real); B.PRW(5,y) accept PRW(n in:integer; y: out real); end; y:=sqrt(n); Modelowanie procesów współbieżnych 14

Problem czytelników i pisarzy package czytelnia is (package pakiet deklaracji danych i procedur udostępnianych innym) procedure czytanie(x: out Integer); procedure pisanie(x: in Integer); end; package body czytelnia is książka: Integer; task PORTIER is (task definiuje proces) entry ZACZYNAM; entry KOŃCZĘ; entry PISZĘ(x: in Integer); end; procedure czytanie(x: out Integer) is PORTIER.ZACZYNAM; x:=książka; PORTIER.KOŃCZĘ; end czytanie; procedure pisanie(x: in Integer) is PORTIER.PISZĘ(x); end pisanie;

Problem czytelników i pisarzy cd. task body PORTIER is ilu_czyta: Integer:=0; liczba czytających begin loop select count liczba procesów czekających na spotkanie when PISZĘ count = 0 => w tym wejściu accept ZACZYNAM; ilu_czyta:=ilu_czyta+1; or accept KOŃCZĘ; ilu_czyta:=ilu_czyta-1; or when ilu_czyta = 0 => accept PISZĘ(x: in Integer) do książka := x; end PISZĘ; loop select accept ZACZYNAM; ilu_czyta:=ilu_czyta+1; else exit; end select; end loop; end select; end loop; end PORTIER;

Przestrzeń krotek w Lindzie (1) Linda idea komunikacji, której realizację można włączyć do dowolnego języka programowania Podstawowe pojęcia: krotka ciąg danych, z których każdy ma określony typ. Dane nie muszą być określone. sygnatura krotki ciąg typów poszczególnych elementów krotki Procesy realizują się w środowisku przestrzeni krotek. operacje INPUT, OUTPUT, READ, TRY_INPUT, TRY_OUTPUT Nie narzuca powiązań czasowych ani w przestrzeni adresowej (procesy nie muszą się znać)

Przestrzeń krotek w Lindzie (2) Proces A Przestrzeń krotek Proces B (4, 2) (6, 1.3) OUTPUT( A ) ( B ) ( S ) INPUT(5, x:real) ( a, true, 1) (5, 2.71)

Problem 5 filozofów

Próba 1 Program filozofy; var widelec:array[0..4] of (*binary*) semaphore; i:integer; procedure filozof(i:integer); begin repeat myśl; wait(widelec[i]); wait(widelec[(i+1)mod 5]); jedz; signal(widelec[i]); signal(widelec[(i+1)mod 5]); forever end; begin (program główny) for i:=0 to 4 do widelec[i]:=1; cobegin filozof(0); filozof(1); filozof(2); filozof(3); filozof(4); coend end. Modelowanie procesów współbieżnych 20

Próba 1 komentarz Semafory zapewniają wzajemne wykluczanie przy dostępie do widelców Zapewnione bezpieczeństwo (jedzenie po zakończeniu oczekiwania na 2 widelce-semafory) Możliwość blokady Jeśli filozofowie się zsynchronizują i równocześnie biorą lewe widelce

Program filozofy; monitor mon_widelec; var Próba 2 widelec:array[0..4] of integer; można_jesc:array[0..4] of condition; i:integer; liczba widelców dostępnych danemu filozofowi procedure weź_widelec(i:integer) begin if widelec[i]<>2 then wait(można_jesc[i]); widelec[(i+1)mod 5]:=widelec[(i+1)mod 5]-1; widelec[(i-1)mod 5]:=widelec[(i-1)mod 5]-1; end; procedure odłóż_widelec(i:integer) begin widelec[(i+1)mod 5]:=widelec[(i+1)mod 5]+1; widelec[(i-1)mod 5]:=widelec[(i-1)mod 5]+1; if widelec[(i+1)mod 5]=2 then signal(można_jesc[(i+1)mod 5]); if widelec[(i-1)mod 5]=2 then signal(można_jesc[(i-1)mod 5]); end; Modelowanie procesów współbieżnych 22

Próba 2 cd. procedure filozof(i:integer); begin repeat myśl; weź_widelec[i]; jedz; odłóż_widelec[i]; forever end; begin (program główny) for i:=0 to 4 do widelec[i]:=2; cobegin filozof(0); filozof(1); filozof(2); filozof(3); filozof(4); coend end. Modelowanie procesów współbieżnych 23

Próba 2 komentarz Zastosowanie monitora Filozof bierze widelce, gdy oba są dostępne Zapewnione wzajemne wykluczanie i bezpieczeństwo Niemożliwa blokada Możliwe zagłodzenie Jeśli dwaj filozofowie zmówią się i nie dopuszczą siedzącego między nimi do jedzenia

Rozwiązanie poprawne Oparte na pierwszej próbie Dodatkowy semafor odgradzający lokaj gwarantuje, że co najwyżej czterech filozofów próbuje wziąć widelce. Rozwiązanie nie dopuszcza blokady i zagłodzenia

Rozwiązanie poprawne - kod Program filozofy; var widelec:array[0..4] of (*binary*) semaphore; lokaj: semaphore; i:integer; procedure filozof(i:integer); begin repeat myśl; wait(lokaj); wait(widelec[i]); begin (program główny) wait(widelec[(i+1)mod 5]); lokaj:=4; jedz; signal(widelec[i]); signal(widelec[(i+1)mod 5]); signal(lokaj); forever end; for i:=0 to 4 do widelec[i]:=1; cobegin filozof(0); filozof(1); filozof(2); filozof(3); filozof(4); coend end. Modelowanie procesów współbieżnych 26