Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Programowanie współbieżne
© Jerzy Skurczyński Instytut Matematyki Uniwersytetu Gdańskiego Gdańsk, 2000 r.
2
Literatura: 1. M.J. Bach, Budowa systemu operacyjnego UNIX, WNT, 1995. 2. M. Ben-Ari, Podstawy programowania współbieżnego i rozproszonego, WNT, 1996. 3. J.S. Gray, Komunikacja między procesami w Unixie, RM, 1998. 4. J. JáJá, An Introduction to Parallel Algorithms, Addison-Wesley, 1992. 5. Z. Manna, A. Pnueli, The Temporal Logic of Reactive and Concurrent Systems (Specification), Springer-Verlag, 1992. 6. A. Nye, Xlib Programming Manual, O’Reilly & Associates, Inc., 1993. 7. M.J. Rochkind, Programowanie w systemie Unix dla zaawansowanych, WNT, 1993. 8. R. Stevens, Programowanie zastosowań sieciowych w systemie Unix, WNT, 1996. Materiały do wykładu dostępne w: julia . univ . gda . pl / ~ matjs / dydaktyka.html
3
1. PODSTAWOWE POJĘCIA Najważniejszym pojęciem pierwotnym tego wykładu będzie proces obliczeniowy. Proces jest wykonywanym programem. 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. Procesy transformacyjne są to procesy skończone, które mają na celu wykonanie pewnego obliczenia (to jest przekształcenie pobranych na początku danych tak, aby na końcu uzyskać właściwe, czyli spełniające specyfikację wyniki). Procesy reaktywne są to procesy, które mogą być wykonywane dowolnie długo (teoretycznie nieskończenie długo), i których podstawowym celem jest interakcja (naprzemienna wymiana informacji) z otoczeniem.
4
W przypadku procesów transformacyjnych podstawowymi kryteriami oceny programów
wykonywanych przez te procesy są: 1) poprawność (skończony czas obliczeń oraz zgodność wyników ze specyfikacją dla wszystkich możliwych danych dopuszczalnych); 2) złożoność (zużycie zasobów - czasu procesora oraz pamięci - w funkcji rozmiaru danych). W przypadku procesów reaktywnych oceniana jest głównie prawidłowość wymiany informacji z otoczeniem. W przeciwieństwie do procesów transformacyjnych zależy nam też, aby procesy reaktywne mogły wykonywać się dowolnie długo (nie zawieszały się). Uwaga. W praktyce oczywiście zależy nam też na jak najsprawniejszym (w takim sensie, jak dla procesów transformacyjnych) działaniu procesów reaktywnych, toteż wybrane fragmenty programów reaktywnych możemy oceniać tak, jak programy transformacyjne.
5
Dwa procesy nazywamy współbieżnymi, jeżeli każdy z nich rozpoczął się przed zakończeniem
drugiego procesu. Przykłady 1) procesy są współbieżne 2) 3) procesy nie są współbieżne t t t Uwaga. O współbieżności możemy mówić zarówno w przypadku wykonywania procesów na tym samym komputerze, jak i na oddzielnych komputerach.
6
W literaturze można napotkać następujące określenia:
współbieżny (concurrent) równoległy (parallel) rozproszony (distributed) Są one używane w różnych kontekstach. Zazwyczaj pierwsze dwa używane są zamiennie, przy czym nieco częściej określenie „równoległy” oznacza „wykonywany współbieżnie na tym samym komputerze”. Natomiast określenie „rozproszony” oznacza „wykonywany współbieżnie na oddzielnych komputerach połączonych w sieć”. Obliczenia równoległe (na jednym komputerze) mogą odbywać się jako: 1) rzeczywiście równoległe - jeśli komputer ma wiele procesorów i każdy procesor obsługuje co najwyżej jeden proces w dowolnej chwili czasu; 2) pozornie równoległe - jeśli czas pracy jednego procesora dzielony jest na krótkie odcinki przydzielane różnym procesom na zasadzie przeplotu.
7
Dwa procesy współbieżne nazywamy niezależnymi, jeżeli fakt wykonywania któregokolwiek z
nich w żaden sposób nie wpływa na wykonywanie drugiego. W przeciwnym przypadku procesy nazywamy zależnymi. Przykłady 1) Procesy wykonywane na dwóch oddzielnych PC (nie połączonych w sieć) przez dwóch nie- komunikujących się ze sobą użytkowników są niezależne. 2) Procesy wykonywane jednocześnie na tym samym komputerze i współdzielące plik roboczy są zależne. 3) Jeżeli jeden gracz uruchomi jednocześnie dwa programy szachowe i w jednym z nich będzie powielał ruchy wykonywane przez komputer w drugim - procesy będą zależne ! Uwaga. W rzeczywistości to, czy dwa procesy uznamy za niezależne, czy za zależne, w wielu przypadkach zależy od poziomu abstrakcji (ignorowania szczegółów) na jakim rozpatrujemy działanie tych procesów.
8
Kolejnym pojęciem pierwotnym, do jakiego będziemy się odwoływali, jest pojęcie zdarzenia.
Przez zdarzenie będziemy rozumieli każdy fakt zachodzący poza procesem (jego środowiskiem), który ma jakiś wpływ na wykonywanie procesu. Przykłady 1) wprowadzenie danych przez użytkownika 2) nadejście sygnału od zegara systemowego 3) wyłączenie zasilania Zdarzenia dzielimy na synchroniczne i asynchroniczne. Synchroniczne to takie, o których proces z góry „wie”, że w określonym momencie mają nastąpić i jest na nie „przygotowany”, zdarzenia asynchroniczne występują w nieokreślonej z góry chwili czasu i mogą wymusić na procesie zachowanie się „wyjątkowe”. To, jak zaklasyfikujemy pewne zdarzenie, silnie zależy od poziomu abstrakcji, na jakim analizujemy zachowanie się procesu. Uwaga. Z punktu widzenia sprzętu zdarzenia asynchroniczne związane są zwykle z przerwaniami.
9
Programowanie współbieżne jest tworzeniem programów, których wykonanie powoduje
uruchomienie pewnej liczby procesów współbieżnych (zazwyczaj procesy te są zależne). Podstawowe cele programowania współbieżnego : 1) przyspieszenie wykonywania obliczeń (w przypadku procesów transformacyjnych); 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ę połączenie idei współbieżności i obiektowości (programowanie tzw. obiektów współbieżnych jest bardzo dobrym sposobem modelowania rzeczywistych zjawisk).
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.