Programowanie współbieŝne Paweł Rogaliński Politechnika Wrocławska pawel.rogalinski pwr.wroc.pl
Literatura podstawowa M. Ben-Ari: Podstawy programowania współbieŝnego i rozproszonego, WNT, Warszawa 1996. Z. Weiss, T. Gruźlewski: Programowanie współbieŝne i rozproszone w przykładach i zadaniach, WNT, Warszawa 1993. K. Barteczko: Java od podstaw do technologii, Wydaw. MIKOM, Warszawa 2004. B. Eckel: Thinking in Java edycja polska wydanie IV, Wydaw. HELION, Gliwice 2006. B. Goetz i in,: Java WspółbieŜność dla praktyków Wydaw. HELION, Gliwice 2007. Dokumentacja pakietu java.util.concurrent java.sun.com/j2se/1.5.0/docs/api The Java Tutorials: Concurrency http://java.sun.com/docs/books/tutorial/essential/concurrency/ Paweł Rogaliński - programowanie współbieŝne 2
Literatura podstawowa Stephen J. Hartley: Java as a Concurrent Programming Language for Operating Systems and Related Courses http://elvis.rowan.edu/~hartley/javaconcprog/ D. Lea: Concurrent Programming in Java: Design Principles and Patterns, Addison-Wesley, 1999. http://gee.cs.oswego.edu/dl/cpj/index.html Paweł Rogaliński - programowanie współbieŝne 3
Literatura uzupełniająca M. Ben-Ari: Podstawy programowania współbieŝnego, WNT, Warszawa 1989. M. J. Bach: Budowa systemu operacyjnego UNIX, WNT, Warszawa 1995. W. R. Stevens: Programowanie zastosowań sieciowych w systemie UNIX, WNT, Warszawa, 1995. Red. A. Karbowski, Obliczenia równoległe i rozproszone, Oficyna Wydaw. Politechniki Warszwskiej, 2001. S. Kozielski, Z. Szczerbiński: Komputery równoległe, WNT, Warszawa 1991. B. Borowik: Programowanie równoległe w zastosowaniach, Wydaw. NIKOM 2001. H. Schildt: Java. Kompendium programisty, Wydaw. HELION, Gliwice 2005. Paweł Rogaliński - programowanie współbieŝne 4
Program wykładu Pojęcie współbieŝności, procesy Poprawność programów współbieŝnych własności bezpieczeństwa i Ŝywotności Problem wzajemnego wykluczania algorytm Dekkera Klasyczne problemy współbieŝności: czytelnicy i pisarze, producent i konsument, problem pięciu filozofów Semafory definicja, typy semaforów, przykłady zastosowań Monitory definicja, przykłady zastosowań Mechanizmy synchronizacji w języku Java Wykład kończy się egzaminem Paweł Rogaliński - programowanie współbieŝne 5
W języku potocznym często mówimy: oni przeszli na drugą stronę ulicy jednocześnie. Mamy na myśli, Ŝe obaj byli na jezdni w tym samym czasie, ale niekoniecznie dokładnie w tej samej chwili na jezdnię wkraczali i dokładnie w tej samej chwili jezdnię opuszczali. W języku potocznym często mówimy: Ten profesor prowadzi jednocześnie wykłady z filozofii i socjologii. Mamy na myśli, Ŝe cykl wykładów z obu dziedzin odbywa się w tym samym semestrze, ale poszczególne wykłady odbywają się w róŝnych terminach. Paweł Rogaliński - programowanie współbieŝne 6
WspółbieŜność zespół zjawisk, czynności lub działań odbywających się jednocześnie. Uwaga: jednoczesność polega ta tym, Ŝe drugie zjawisko (czynność) rozpoczyna się przed zakończeniem poprzedniego zjawiska (czynności). Paweł Rogaliński - programowanie współbieŝne 7
WspółbieŜność przestrzenna kilka niezaleŝnych jednostek realizuje swoje zadania Paweł Rogaliński - programowanie współbieŝne 8
kolejne fazy produkcji WspółbieŜność czasowa - kilka współbieŝnych zadań znajduje się w róŝnych fazach wykonania ruch samochodów na taśmie Paweł Rogaliński - programowanie współbieŝne 9
Programowanie - ogół czynności związanych z opracowywaniem algorytmów, kodowaniem ich w określonym języku programowania i uruchamianiem ich w systemie komputerowym. Program - sformalizowany zapis algorytmu, składający się z deklaracji danych i ciągu wykonywanych instrukcji zapisanych w określonym języku programowania. Proces - program będący w trakcie wykonywania. Efektem działania procesu jest sekwencja zmian stanu systemu komputerowego odbywających się zgodnie z algorytmem zapisanym w programie. Paweł Rogaliński - programowanie współbieŝne 10
Program jest obiektem statycznym (formalnym opisem tego, co ma być wykonane). Proces jest obiektem dynamicznym (ciągiem sekwencyjnie wykonywanych instrukcji programu). KaŜdy program jest skończony, natomiast procesy mogą być skończone lub (teoretycznie) nieskończone. Paweł Rogaliński - programowanie współbieŝne 11
KaŜdy proces wykonuje się w pewnym środowisku, którego niezbędnymi elementami są: procesor (dokonujący zmian stanu systemu) oraz pamięć (w której przechowywany jest kod programu oraz dane). procesor pamięć operacyjna (program) pamięć masowa (dane) Paweł Rogaliński - programowanie współbieŝne 12
Graf stanów procesu proces proces aktywny aktywny (running) (running) zakończenie (terminate) wywłaszczenie (preemptt) wznowienie (schedule) czekanie na zdarzenie (wait for event) tworzenie (create) proces proces gotowy gotowy (ready) (ready) zdarzenie zaszło (event occured) proces proces wstrzymany wstrzymany (blocked) (blocked) Paweł Rogaliński - programowanie współbieŝne 13
rodzaje procesów dane wejściowe transformacyjny reaktywny proces transformacyjny Proces transformacyjny proces skończony, którego celem jest wykonanie pewnych obliczeń (czyli przekształcenie pobranych danych tak, by na końcu uzyskać właściwe wyniki) dane wyjściowe Paweł Rogaliński - programowanie współbieŝne 14
rodzaje procesów transformacyjny reaktywny proces reaktywny Proces reaktywny proces, który moŝe być wykonywany dowolnie długo (teoretycznie nieskończenie długo), i którego podstawowym celem jest interakcja (naprzemienna wymiana informacji) z otoczeniem. Paweł Rogaliński - programowanie współbieŝne 15
procesy sekwencyjne proces 1 proces 2 czas } procesor A procesy quasi-równoległe proces 1 proces 2 czas } procesor A procesy równoległe proces 1 proces 2 czas } procesor A } procesor B Paweł Rogaliński - programowanie współbieŝne 16
PROCESY sekwencyjne w danej chwili rozpoczęty jest co najwyŝej 1 proces współbieŝne w danej chwili moŝe być rozpoczętych kilka procesów quasi-równoległe procesy są wykonywane na jednym procesorze z podziałem czasu równoległe procesy są wykonywane na oddzielnych procesorach w środowisku scentralizowanym (wspólna pamięć) w środowisku rozproszonym (sieć połączeń) Paweł Rogaliński - programowanie współbieŝne 17
System scentralizowany i rozproszony Programowanie współbieŝne moŝe dotyczyć zarówno systemów jednoprocesorowych jak i systemów wieloprocesorowych opartych na wspólnej pamięci (systemy scentralizowane), lub architektury wieloprocesorowej połączonej siecią komputerową (systemy rozproszone), gdzie kaŝdy procesor dysponuje swoją pamięcią. SIEĆ LOKALNA WSPÓLNA WSPÓLNA PAMIĘĆ PAMIĘĆ PROCESOR PROCESOR PROCESOR KANAŁ KOMUNIKACYJNY PROCESOR PROCESOR PROCESOR PAMIĘĆ PAMIĘĆ PAMIĘĆ system scentralizowany system rozproszony Paweł Rogaliński - programowanie współbieŝne 18
oddziaływanie (interakcja) procesów współpraca współzawodnictwo proces 1 proces 2 dane (zmienne dzielone) i sygnały synchronizacyjne (komunikaty) Współpraca procesów jedno zadanie podzielone jest na kilka podzadań realizowanych współbieŝnie przez oddzielne procesy, które muszą wymieniać między sobą dane oraz sygnały synchronizacyjne proces n Współpraca procesów Paweł Rogaliński - programowanie współbieŝne 19
oddziaływanie (interakcja) procesów proces 1 wspólne zasoby współpraca współzawodnictwo proces 2 Współzawodnictwo procesów oddzielne zadania realizowane są przez oddzielne procesy, które współzawodniczą o dostęp do ograniczonych zasobów. proces n Współzawodnictwo procesów Paweł Rogaliński - programowanie współbieŝne 20
Termin programowanie współbieŝne uŝywa się do określenia technik i notacji programistycznych słuŝących do wyraŝania jednoczesności oraz rozwiązywania zagadnień związanych z powstałymi przy tym problemami synchronizacji i komunikacji. Programowanie współbieŝne jest bardzo waŝnym zagadnieniem, gdyŝ pozwala zajmować się jednoczesnością bez wdawania się w szczegóły implementacyjne. MoŜliwość takiego abstrahowania okazała się na tyle uŝyteczna przy pisaniu programów, Ŝe nowoczesne języki programowania wyposaŝono juŝ w mechanizmy programowania współbieŝnego. Paweł Rogaliński - programowanie współbieŝne 21
Podstawowe cele programowania współbieŝnego : 1. przyspieszenie wykonywania obliczeń ; 2. lepsze wykorzystanie zasobów (sprzętu); 3. umoŝliwienie współpracy wielu uŝytkownikom; 4. udostępnienie stylu programowania ułatwiającego tworzenie duŝych, przejrzyście zorganizowanych programów. Uwaga. Wyjątkowo korzystne okazuje się siępołączenie idei idei współbieŝności i i obiektowości (programowanie tzw. tzw. obiektów współbieŝnych jest jest bardzo bardzo dobrym dobrym sposobem modelowania rzeczywistych zjawisk). Paweł Rogaliński - programowanie współbieŝne 22
Poziomy przetwarzania i programowania współbieŝnego 1. Poziom prac równoczesna realizacja niezaleŝnych programów 2. Poziom zadań program podlega dekompozycji na niezaleŝne zadania, które są wykonywane równolegle np.. w postaci wątków. Zadaniami są wydzielone fragmenty programu, najczęściej w formie procedur lub niezaleŝnych iteracji pętli programowych. 3. Poziom instrukcji równocześnie są wykonywane niezaleŝne instrukcje programu 4. Poziom operacji wewnątrz rozkazu fazy realizacji rozkazu, które są niezaleŝne, wykonywane są równolegle (potokowe wykonywanie rozkazów) Im Im niŝszy niŝszy poziom poziom przetwarzania, przetwarzania, tym tym większą większą rolę rolę w przetwarzaniu przetwarzaniu współbieŝnym współbieŝnym odgrywają odgrywają mechanizmy mechanizmy sprzętowe sprzętowe (poziom (poziom 4 4 jest jest niedostępny niedostępny dla dla programisty programisty cała cała współbieŝność współbieŝność jest jest zapewniona zapewniona sprzętowo). sprzętowo). Im Im wyŝszy wyŝszy poziom, poziom, tym tym istotniejsze istotniejsze stają stają się się mechanizmy mechanizmy programowe, programowe, zanika zanika natomiast natomiast zaleŝność zaleŝność od od sprzętu sprzętu (poziom (poziom 1 1 moŝna moŝna realizować realizować zarówno zarówno w systemach systemach wieloprocesorowych wieloprocesorowych (kaŝdy (kaŝdy program program jest jest wykonywany wykonywany na na innym innym procesorze), procesorze), jak jak i i w jednoprocesorowych jednoprocesorowych (korzystając (korzystając z z podziału podziału czasu). czasu). Paweł Rogaliński - programowanie współbieŝne 23