Programowanie Równoległe i Rozproszone



Podobne dokumenty
Programowanie Równoległe i Rozproszone

miejsca przejścia, łuki i żetony

Sieci Petriego. Sieć Petriego

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

WOJSKOWA AKADEMIA TECHNICZNA WYDZIAŁ CYBERNETYKI

Rozszerzenia sieci Petriego

Najkrótsza droga Maksymalny przepływ Najtańszy przepływ Analiza czynności (zdarzeń)

Programowanie Rozproszone i Równoległe. Edward Görlich goerlich@th.if.uj.edu.pl

Rozszerzenia sieci Petriego

Rywalizacja w sieci cd. Protokoły komunikacyjne. Model ISO. Protokoły komunikacyjne (cd.) Struktura komunikatu. Przesyłanie między warstwami

PROJEKT WSPÓŁFINANSOWANY ZE ŚRODKÓW UNII EUROPEJSKIEJ W RAMACH EUROPEJSKIEGO FUNDUSZU SPOŁECZNEGO OPIS PRZEDMIOTU

Język UML w modelowaniu systemów informatycznych

Definicje. Algorytm to:

Wykład 5: Specyfikacja na poziomie systemowym

ZARZĄDZANIE PROJEKTAMI I PROCESAMI. Mapowanie procesów AUTOR: ADAM KOLIŃSKI ZARZĄDZANIE PROJEKTAMI I PROCESAMI. Mapowanie procesów

Sterowniki Programowalne (SP) Wykład 11

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Modelowanie procesów współbieżnych

Sieci Komputerowe Modele warstwowe sieci

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

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Wprowadzenie do programowania współbieżnego

Algorytmy Równoległe i Rozproszone Część X - Algorytmy samostabilizujące.

Protokoły sieciowe - TCP/IP

Przetwarzanie równoległesprzęt. Rafał Walkowiak Wybór

Proces rozproszony 1

Algorytmy równoległe: ocena efektywności prostych algorytmów dla systemów wielokomputerowych

Obliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Technologie informacyjne (5) Zdzisław Szyjewski

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

1. ARCHITEKTURY SYSTEMÓW KOMPUTEROWYCH

Problemy niezawodnego przetwarzania w systemach zorientowanych na usługi

Sterowniki Programowalne (SP)

Algorytmy Równoległe i Rozproszone Część VI - Systemy rozproszone, podstawowe pojęcia

1 Wprowadzenie do algorytmiki

PROGRAMOWANIE METODĄ GRAFPOL STEROWNIKÓW PLC STERUJĄCYCH PROCESAMI TECHNOLOGICZNYMI W ODLEWNIACH

PARADYGMATY PROGRAMOWANIA Wykład 4

4. Procesy pojęcia podstawowe

Przesyłania danych przez protokół TCP/IP

Zastosowanie bisymulacji do. Non-Interference XVI FIT, Karpacz 2002

T2A_W01 T2A_W01 T2A_W02 3 SI_W03 Posiada szeroką wiedzę w zakresie teorii grafów T2A_W01

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Problem zakleszczenia

Zagadnienia egzaminacyjne INFORMATYKA. stacjonarne. I-go stopnia. (INT) Inżynieria internetowa STOPIEŃ STUDIÓW TYP STUDIÓW SPECJALNOŚĆ

Algorytm. a programowanie -

Zagadnienia egzaminacyjne INFORMATYKA. Stacjonarne. I-go stopnia. (INT) Inżynieria internetowa STOPIEŃ STUDIÓW TYP STUDIÓW SPECJALNOŚĆ

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

JĘZYKI PROGRAMOWANIA STEROWNIKÓW

Algorytmy równoległe: prezentacja i ocena efektywności prostych algorytmów dla systemów równoległych

CZĘŚĆ PIERWSZA. Seminarium grupy RSPN. Piotr Lasek Uniwersytet Rzeszowski. Kontakt

Układy VLSI Bramki 1.0

Protokoły sieciowe model ISO-OSI Opracował: Andrzej Nowak

Podstawy Automatyki. Wykład 4 - algebra schematów blokowych. dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

ZiMSK. VLAN, trunk, intervlan-routing 1

w sieciach szerokopasmowych CATV i ISP - Model OSI

Prezentacja systemu RTLinux

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej

Spis treści. 1 Wprowadzenie. 1.1 Podstawowe pojęcia. 1 Wprowadzenie Podstawowe pojęcia Sieci komunikacyjne... 3

MODEL WARSTWOWY PROTOKOŁY TCP/IP

Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych

Analiza konstrukcji zawierających wskaźniki. Piotr Błaszyński

T2A_W03 T2A_W07 K2INF_W04 Ma uporządkowaną, podbudowaną teoretycznie kluczową wiedzę w zakresie realizacji informacyjnych systemów rozproszonych

Referencyjny model OSI. 3 listopada 2014 Mirosław Juszczak 37

Definicja sieci. Sieć Petriego jest czwórką C = ( P, T, I, O ), gdzie: P = { p 1, p 2,, p n } T = { t 1, t 2,, t m }

1 Automaty niedeterministyczne

Podstawy Automatyki. Wykład 4 - algebra schematów blokowych. dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Język ludzki kod maszynowy

Technologie informacyjne - wykład 12 -

Model sieci OSI, protokoły sieciowe, adresy IP

Data Mining Wykład 9. Analiza skupień (grupowanie) Grupowanie hierarchiczne O-Cluster. Plan wykładu. Sformułowanie problemu

Wstęp do programowania 2

Adres IP

Numeryczna algebra liniowa

Dr Michał Tanaś(

Algorytmy równoległe. Rafał Walkowiak Politechnika Poznańska Studia inżynierskie Informatyka 2010

System komputerowy. Sprzęt. System komputerowy. Oprogramowanie

Reprezentacje grafów nieskierowanych Reprezentacje grafów skierowanych. Wykład 2. Reprezentacja komputerowa grafów

PROGRAMOWALNE STEROWNIKI LOGICZNE

Kurs programowania. Wykład 12. Wojciech Macyna. 7 czerwca 2017

Analiza i programowanie obiektowe 2016/2017. Wykład 6: Projektowanie obiektowe: diagramy interakcji

Algorytm. Krótka historia algorytmów

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Graf. Definicja marca / 1

Sieci komputerowe. Dr inż. Robert Banasiak. Sieci Komputerowe 2010/2011 Studia niestacjonarne

Podstawy Automatyki. Wykład 4 - algebra schematów blokowych. dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Język UML w modelowaniu systemów informatycznych

Systemy wbudowane. Uproszczone metody kosyntezy. Wykład 11: Metody kosyntezy systemów wbudowanych

Topologie sieciowe. mgr inż. Krzysztof Szałajko

UML w Visual Studio. Michał Ciećwierz

ξ II.UWr Wprowadzenie do STM

Spacery losowe generowanie realizacji procesu losowego

Wybrane działy Informatyki Stosowanej

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Czujniki obiektowe Sterowniki przemysłowe

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Urządzenia wejścia-wyjścia

Transkrypt:

Programowanie Równoległe i Rozproszone Lucjan Stapp Wydział Matematyki i Nauk Informacyjnych Politechnika Warszawska (l.stapp@mini.pw.edu.pl) 1/40 PRiR SYSTEMY ROZPROSZONE Powody użycia systemów rozproszonych: dzielenie obciążenia (ang. load sharing) lepsze użycie dostępnej mocy obliczeniowej; dzielenie zasobów (ang. resource sharing) wspólne użycie (dostęp) drogich zasobów albo rzadko używanych urządzeń; dzielenie danych (ang. data sharing) dostęp do rozproszonych baz danych; struktura geograficzna może być rozproszona; struktura logiczna może być prostsza; niezawodność systemu może zostać zwiększona przez swą strukturę; elastyczność systemu jest zwiększona, zyskuje możliwość dodawania usuwania pojedynczych jednostek (np. procesora); 2/40 PRiR SYSTEMY ROZPROSZONE Charakterystyka systemów rozproszonych kryterium logiczne: zwielokrotnienie zasobów współ-używanych; elementy odpowiedzialne za komunikację posiadają widoczne bądź ukryte poziomy kontroli; kontrola wykonywania jest przeprowadzana na całym systemie przez kilka procesów bez połączeń hierarchicznych i nie mających spójnego poglądu na cały system; procesy mają rozłączne przestrzenie adresowe i komunikują się przez jawne przekazywanie komunikatów. 3/40 PRiR Przygotował: Lucjan Stapp 1

SYSTEMY ROZPROSZONE RODZAJE ARCHITEKTUR ROZPROSZONYCH jednokierunkowy pierścień (ang. ring) dwukierunkowy pierścień (ang. bi-directional ring) 4/40 PRiR SYSTEMY ROZPROSZONE RODZAJE ARCHITEKTUR ROZPROSZONYCH drzewa 5/40 PRiR SYSTEMY ROZPROSZONE RODZAJE ARCHITEKTUR ROZPROSZONYCH gwiazda pełne połączenie bardzo kosztowne, bardzo trudne do zaprojektowania 6/40 PRiR Przygotował: Lucjan Stapp 2

Modele są używane do dokładnego zdefiniowania żądanych charakterystyk systemu: co nie jest zdefiniowane -nie może być zweryfikowane, a co nie jest zweryfikowane może być błędem. Zadania modelu to: dokładne zdefiniowanie specyficznych własności i charakterystyk budowanego lub analizowanego systemu; dostarczenie podstaw do zweryfikowania tych własności. 7/40 PRiR Różne modele są stosowane do określania różnych właściwości. Aby wyrazić konkretną cechę systemu trzeba wybrać z klasy modeli te, które reprezentują tę właściwość. 8/40 PRiR Rodzaje właściwości niezbędnych do rozwoju systemu rozproszonego: zbiory, sekwencje, struktury danych; przekształcanie jednego zbioru danych w inny i zrozumiałe relacje wejścia/wyjścia pomiędzy przekształceniami i zbiorami danych; sekwencyjność i wielobieżność zbiorów danych, które są dostarczane albo generowane w różnych momentach czasu; przekształcanie jednej sekwencji czasowej w drugą. 9/40 PRiR Przygotował: Lucjan Stapp 3

Rodzaje właściwości niezbędnych do rozwoju systemu rozproszonego (c.d.): sekwencje przekształceń; przepływ danych pomiędzy przekształceniami; wielobieżność transformacji; kontrola interakcji pomiędzy równoległymi przekształceniami; czas potrzebny na wykonanie przekształceń; niezawodność/osiągalność wykonania przekształcenia w środowisku (generowanie i rodzaje błędów). 10/40 PRiR Diagram przepływu (ang. flow chart) zazwyczaj opisuje sekwencje, wybory i poszczególne kroki przetwarzania. Charakterystyka przepływu danych, równoległość i sprawność nie są reprezentowane. Jest to istotne dla reprezentowania sekwencyjnych programów, ale niewystarczające dla problemów rozproszonego programowania. 11/40 PRiR Modele systemów rozproszonych: graf zależności; sieci Petri; algebra procesów; modele aktorów (ang. actor model); teoria śladów (ang. theory of traces). 12/40 PRiR Przygotował: Lucjan Stapp 4

Graf zależności to skierowany acykliczny graf reprezentujący relację zależności (skończona, symetryczna, zwrotna). Diagram zależności to wizualna reprezentacja grafu zależności. W tym diagramie krawędzie prowadzą od każdego modułu do wszystkich modułów, które są od niego (modułu wyjściowego) zależne. 13/40 PRiR Sieci Petri Sieci Petri zostały zdefiniowane w latach 60. XX wieku przez Carla Adama Petriego. Sieć Petri (zwana także siecią miejsce/ tranzycja (place/transition) lub P/T net) to matematyczna reprezentacja dyskretnych systemów rozproszonych. Przez swoją zdolność do wyrażania współbieżnych zdarzeń uogólniają one teorię automatów Sieć Petriego w najprostszej wersji składa się z "miejsc", "tranzycji" oraz krawędzi skierowanych. Taką siecią można jedynie opisać układ jako statyczne połączenie możliwych do osiągnięcia stanów. 14/40 PRiR Sieć Petri Sieć Petriego w najprostszej wersji składa się z "miejsc", "tranzycji" oraz krawędzi skierowanych. Taką siecią można jedynie opisać układ jako statyczne połączenie możliwych do osiągnięcia stanów. Aby opisać konkretny stan układu, potrzebne są "żetony", które można przemieszczać pomiędzy miejscami poprzez przejścia - po krawędziach grafu. http://pl.wikipedia.org/wiki/sie%c4%87_petriego 15/40 PRiR Przygotował: Lucjan Stapp 5

Sieć Petri Tradycyjnie miejsce oznacza się okręgiem, w którym można umieścić żeton prezentowany przez koło. W jednym miejscu może znajdować się dowolna, nieujemna liczba żetonów. Tranzycje oznacza się prostokątami lub kreskami, a krawędzie to strzałki. Krawędzie mogą mieć wagi większe lub równe 1. Wagi równej 1 nie oznacza się, tak jak pokazano na rysunku. Waga określa, ile dokładnie żetonów przechodzi po krawędzi. http://pl.wikipedia.org/wiki/sie%c4%87_petriego 16/40 PRiR Sieć Petri Przejście może być aktywne lub nie. Przejście aktywne to takie, którego wszystkie krawędzie wejściowe połączone są z miejscami mającymi żetony w takiej ilości, że jest ona większa lub równa wadze odpowiednich krawędzi. http://pl.wikipedia.org/wiki/sie%c4%87_petriego 17/40 PRiR Sieć Petri Tylko przejście aktywne może być odpalone. Odpalenie przejścia to zabranie z wszystkich miejsc wejściowych tylu żetonów, ile wynika z wag krawędzi łączących miejsca z przejściem. Następnie na miejscach wyjściowych połączonych z przejściem pojawiają się żetony. Ilość żetonów "wchodzących" i "wychodzących" z przejścia nie musi być taka sama. W jednym ruchu można odpalić tylko jedno przejście. http://pl.wikipedia.org/wiki/sie%c4%87_petriego 18/40 PRiR Przygotował: Lucjan Stapp 6

Sieć Petri Wykonanie sieci Petri jestniedeterministyczne, co oznacza: Wielokrotne tranzycje mogą być możliwe do odpalenia w tym samym czasie, ale nie muszą odpalić; Być może żadna nie odpali odpalanie jest na życzenie, w czasie pomiędzy 0 a nieskończonością (a możliwe jest też, że nie odpali w ogóle). Ponieważ odpalanie jest niedeterministyczne, sieci Petri są dobrym narzędziem do modelowania systemów rozproszonych. 19/40 PRiR Algebra procesów (ang. processalgebralub process calculi) Algebra procesów dostarcza narzędzi do wysokopoziomowego opisu interakcji, komunikacji i synchronizacji na zbiorze niezależnych agentów (procesów). Algebra procesów dostarcza także praw algebraicznych umożliwiających opis procesów. Umożliwia to ich analizę, dostarcza także narzędzi do formalnego analizowania równoważności procesów. 20/40 PRiR Algebra procesów Najbardziej znane przykłady algebry procesów to: Communicating Sequential Processes CSP to formalny język dla opisu wzorców interakcji w systemach współbieżnych. CSP zaproponował w 1978 C. A. R. Hoare. Calculus of Communicating Systems (CCS) to algebra procesów stworzona przez Robina Milnera. Umożliwia modelowanie nieprzerywalnej komunikacji pomiędzy dokładnie dwoma uczestnikami. Język formalny umożliwia opis takich działań jak złożenie równoległe, wybór akcji i ograniczenie zakresu operacji równoległej. 21/40 PRiR Przygotował: Lucjan Stapp 7

Algebra procesów Najbardziej znane przykłady algebry procesów to: Algebra of Communicating Processes (ACP) nie do końca wykorzystana metoda wnioskowania o systemach współbieżnych π calculus rozszerzenie CCS. 22/40 PRiR Algebra procesów Najbardziej znane przykłady algebry procesów to: ambient calculus jest używany do opisu i wnioskowania o własnościach systemów współbieżnych, których cechą podstawową jest mobilność (mobility). Mobilność oznacza tu zarówno obliczenia na ruchomych urządzeniach (sieć ma zmienną, dynamiczną topologię), jak też mobilne obliczenia (tzn. kod wykonalny może być przemieszczany na sieci do różnych węzłów). Ambient calculus dostarcza jednorodnego środowiska do modelowania obu tych rodzajów mobilności. Jest to dziś podstawowe narzędzie do modelowania zachowań w Internecie. 23/40 PRiR Algebra procesów Najbardziej znane przykłady algebry procesów to: PEPA (Performance Evaluation Process Algebra) to stochastyczna algebra procesów stworzona do modelowania systemów komunikacyjnych ze szczególnym uwzględnieniem roli poszczególnych węzłów (komputerów) komunikacyjnych. Jest to rozszerzenie klasycznych algebr procesów takich jak CCS i CSP. Z każdą aktywnością związana jest zmienna losowa oznaczająca oczekiwany zakres wykonania tej aktywności. 24/40 PRiR Przygotował: Lucjan Stapp 8

Programy rozproszone charakteryzują się przez: brak globalnej kontroli; brak globalnej pamięci; niezależność prędkości wykonywania od równoległych procesów; niedeterminizm wykonywania. 25/40 PRiR Algorytmy rozproszone składają się z 2 części. Są to: wiadomości (struktura wiadomości i sposób ich wysyłania); procesy (algorytmy równoległe). Dawniej algorytmy rozproszone były implementowane w systemach operacyjnych. 26/40 PRiR Link jest ścieżką komunikacyjną (ang. communication path) pomiędzy dwoma komputerami. W obszarze zasobów programy rozproszone są nazywane protokołami (ang. protocols). Kontrolują przesyłanie informacji i procesy powiązane z zasobami. 27/40 PRiR Przygotował: Lucjan Stapp 9

Protokoły dzielą się na uzgodnienia i konwencje. Definicja protokołu określa standardowy kanał komunikacji (wirtualną ścieżkę) pomiędzy łączącymi się urządzeniami. Typowe zagadnienia, które trzeba brać pod uwagę: Elementy danych bity, zmienne znakowe, pakiety, komunikaty, pliki, zadania; Uzgodnienia kod konwencji, formaty, szybkość ścieżki, kontrola sekwencji; Wirtualna ścieżka struktury adresowe, priorytety, sekwencyjność, kontrola błędów, kontrola wykonywania, itd.; 28/40 PRiR Warstwy protokołów i ich funkcje: warstwa aplikacji (ang. application layer) transfer pieniędzy, poczta elektroniczna, edycja tekstu itd.; warstwa prezentacji (ang. presentation layer) różnice pomiędzy węzłami w tej samej sieci; warstwa sesji; warstwa transportowa (ang. transport layer) przesyłanie plików, wsparcie dla wirtualnych terminali; końcowa warstwa odbiorcy (ang. subscriber end-to-end layer) komunikacja międzyprocesowa (np. virtual circuit, czas rzeczywisty, transmitowanie); warstwa dostępu do sieci (ang. network access layer) usługa dostępu do sieci (np. virtual circuit, transmisja itd.); 29/40 PRiR Warstwy protokołów i ich funkcje: warstwa intranetu (ang. intranet layer) - end-to-end - kontrola wykonywania, sekwencjalizacja; warstwa intranetu węzeł do węzła kontrola zatorów, wyznaczanie trasy; warstwa połączeń (ang. link control level) zarządzanie błędami, kontrola połączeń. Protokół połączeń jest najniższą warstwą funkcyjną, poniżej znajdują się fizyczne/elektroniczne warstwy. 30/40 PRiR Przygotował: Lucjan Stapp 10

W systemach rozproszonych programy działające rozproszenie nazywane są programami rozproszonymi. Najważniejsze problemy związane z zarządzaniem systemem rozproszonym to: wzajemne wykluczanie (ang. mutual exclusion); wybór koordynatora; zakleszczenia (deadlock) - zapobieganie i wykrywanie; wyłączenie działającego systemu; zarządzanietransferami (by bipoints and multipoint); zarządzanie zdublowanymi zadaniami (affords). 31/40 PRiR Stopień podziału niesymetrycznie każdy proces wykonuje swój własny algorytm symetrycznie: symetria kodu (każdy proces ma swoją nazwę i procedura zależy od nazwy); silna symetria procedura nie zależy od nazwy, ale od typu wiadomości; pełna symetria wszystkie procesy wykonują tę samą procedurę. 32/40 PRiR Pisanie algorytmów rozproszonych jest łatwiejsze, jeśli mamy do dyspozycji monitor rozwiązujący ten problem. Zostanie to pokazane na przykładzie problemu producent - konsument. 33/40 PRiR Przygotował: Lucjan Stapp 11

class buffer : public monitor; { message box [n]; /* bufor składa się z n komórek */ int first_free, first_occ = 0; /* first_free numer pierwszej wolnej komórki */ /* first_occ numer pierwszej zajętej komórki */ int begprod, endprod, begcons, endcons = 0; queue p,c; void put (message m); { if (begprod-endcons >=n ) p.delay(); begprod ++ ; box [first_free] = m; first_free=(first_free + 1)%n ; endprod ++; if (begcons - endprod < 0) c.continue(); } /* end of buffer */ /*początki produkcji, końce produkcji */ /*początki konsumpcji, końce konsumpcji */ void get (message * m); { if (begcons-endprod >= 0) c.delay(); begcons ++ ; m = box [first_occ]; first_occ = (first_occ + 1 ) % n ; endcons ++; if (begprod endcons<n) p.continue(); 34/40 PRiR process::producer (buffer B); message m; message production () {... void main() { while(1) { m=production(); B.put(m); process::consumer (buffer B); message m; void consuption (message m) {... void main() { while(1) { B.get(&m); consuption (m); 35/40 PRiR ROZPROSZONE ROZWIĄZANIE PROBLEMU PRODUCENT -KONSUMENT n - elementowy bufor jest w posiadaniu konsumenta PRODUCENT WIADOMOŚĆ przyrost bufor KONSUMENT 36/40 PRiR Przygotował: Lucjan Stapp 12

Algorytm producenta: process::producer (); type message; /* typ produktu */ type incrementation; /* typ dodatkowej informacji wysyłanej przez konsumenta */ message m; int begprod, c_endcons = 0,0; /*początek produkcji, koniec konsumpcji konsumenta */ message production () {... 37/40 PRiR Algorytm producenta(cd.): void produce_and_send (message * m) { if (begprod-c_endcons <n) { begprod ++ ; m=production (); send (m) ; void acceptation ( incrementation i) { c_endcons ++; void main() { while(1) { if (incrementation_received ) acceptation (i); produce_and_send (message * m); 38/40 PRiR Algorytm konsumenta: process::consumer (); type message; /* typ produktu */ type incrementation; /* typ dodatkowej informacji wysyłanej przez konsumenta */ message m; incrementation i; message box [n]; int first_free, first_occ = 0; /*first_free numer pierwszej wolnej komórki */ /*first_occ numer pierwszej zajętej komórki */ int begcons, endprod = 0; /*początki konsumpcji, końce produkcji */ 39/40 PRiR Przygotował: Lucjan Stapp 13

Algorytm konsumenta(cd): void consumption () { if (begcons-endprod < 0) { begcons ++ ; m = box [first_occ] ; first_occ = ( first_occ + 1 ) % n; send (i); /* incrementation */; } void acceptation ( message m) { box [first_free ] = m; first_free = (first_free + 1 ) % n; endprod ++; } void main() { while(1) { if (message_received ) acceptation (m); consumption (); } 40/40 PRiR Przygotował: Lucjan Stapp 14