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. Ben-Ari, Podstawy programowania współbieżnego, WNT 1989 lub M. Ben-Ari, Podstawy programowania współbieżnego i rozproszonego, WNT, 1996 K. Jensen, Coloured Petri Nets, Basic Concepts, Analysis Methods and Practical Use, Vol. 1-3, Springer 1996 Dodatkowo: A. Jaszkiewicz, Inżynieria oprogramowania, Wydawnictwo Helion, Warszawa, 1997. S. Szejko (red.), Metody wytwarzania oprogramowania, Mikom, 2002 J. Górski (red.), Inżynieria oprogramowania w projekcie informatycznym, Mikom, 1999
Program przedmiotu Idea i abstrakcja programowania współbieżnego Problem wzajemnego wykluczania Pojęcia semafora i monitora Podstawy modelowania formalnego Sieci miejsc i przejść Kolorowane sieci Petriego Metody analizy formalnej współbieżnych systemów informatycznych Laboratorium: Wykorzystanie kolorowanych sieci Petriego do modelowania współbieżnych systemów informatycznych
Program sekwencyjny... begin for i:=1 to n do read(a[k]); sort(1,n); for k:=1 to n do write(a[k]); end... procedure sort(lewy,prawy:integer)... begin for i:=lewy to prawy do for j:=i+1 to prawy do if a[j]<a[i] then begin temp:=a[j]; a[j]:=a[i]; a[i]:=temp; end end;... Przykład sortowanie liczb
Ulepszenie algorytmu dzielimy zbiór wejściowy na 2 części sortujemy obie części oddzielnie scalamy otrzymane zbiory Liczba porównań Algorytm zwykły n 2 /2 Ulepszony 2*(n/2) 2 /2 + n (scalanie) = n 2 /4 + n
Przykładowe wartości n n 2 /2 n 2 /4 + n n 2 /8 + n 10 50 35 23 40 800 440 140 100 5 000 2 600 1 350 1 000 500 000 251 000 126 000
Dalsze usprawnienia Sortowanie obu części można wykonać równolegle (np. na dwóch procesorach). Notacja:... cobegin sort(1,n) sort(n+1,2n) coend scal(1,n,n+1,2n)...
Podstawowe zagadnienie Które czynności należy/można wykonać współbieżnie?... cobegin sort(1,n) sort(n+1,2n) scal(1,n,n+1,2n) coend... sort 1 sort 2 scal początkowo 4, 2, 7, 6, 1 8, 5, 0, 3, 9 sortuje 1 2, 4, 7, 6, 1 8, 5, 0, 3, 9 sortuje 2 2, 4, 7, 6, 1 5, 8, 0, 3, 9 scalanie jw. jw. 2 scalanie jw. jw. 2, 4 scalanie jw. jw. 2, 4, 5
Czy program jest poprawny Sortowanie sekwencyjne testy na krótkich zbiorach wejściowych powtarzalność sekwencji determinizm Program współbieżny wiele możliwych wykonań programu zachowanie zależne od warunków wejściowych, procedur składowych, szybkości procesora/ów
Programowanie współbieżne Termin używany do określenia technik i notacji programistycznych służących do wyrażenia potencjalnej równoległości oraz do rozwiązywania zagadnień związanych z powstającymi przy tym problemami synchronizacyjnymi i komunikacyjnymi. Implementacja równoległości wiąże się ze sprzętem i oprogramowaniem, w zasadzie niezależnymi od programowania współbieżnego. Można zatem rozważać równoległość bez wdawania się w szczegóły implementacyjne.
Rozwój programowania współbieżnego Wyrosło na gruncie potrzeb związanych z systemami operacyjnymi Lata 50-te fizyczna obsługa komputera jest rozłączna z jego pracą to może być współbieżne z obliczeniami Programy nadzorujące odczyt wielu wsadów jednocześnie, zadania przetwarzane kolejno, bez strat czasowych programiści tracili możliwość obserwacji działania programu napotykając błąd, komputer zapisywał obraz pamięci i wykonywał kolejny program przyczyny błędu szukał programista czas obrotu rzędu godzin, a nawet dni
Rozwój c.d. Ograniczenia przepustowości czytników wydzielenie odrębnych jednostek do przetwarzania wejścia i wyjścia (spooling przechwytywanie, np. zapis na taśmę) operacje proste prosty sprzęt niewielki wzrost kosztów Wieloprogramowość przełączanie komputera między zadaniami możliwość pracy wielu programistów przy wielu terminalach (wrażenie komputera na wyłączność ) omijanie zamyślonego programisty) Systemy wieloprocesorowe model przeplatanych obliczeń pozostaje aktualny
Abstrakcja programowania współbieżnego Badanie abstrakcyjnych zadań programistycznych podlegających ustalonym regułom. Nie jest studium systemów operacyjnych bądź systemów czasu rzeczywistego. Techniki p.w. mogą być użyte w istniejących systemach (spełniających reguły). Składowe systemu wyłamujące się z reguł powinny być wyjątkowo starannie opisywane i implementowane.
Program współbieżny Kilka procesów sekwencyjnych Komunikacja między procesami synchronizacja działań wymiana danych Współdzielone zasoby (np. pamięć) Nie musi istnieć wspólna pamięć główna (programowanie rozproszone)
Problem wzajemnego wykluczania Abstrakcja wielu problemów synchronizacyjnych, jeden z dwóch najistotniejszych problemów programowania współbieżnego. Fragment A1 procesu P1 i fragment A2 procesu P2 wykluczają się nawzajem, jeśli wykonanie A1 nie może nałożyć się w czasie z wykonaniem A2. Jeżeli oba procesy starają się wykonać kolizyjne fragmenty jednocześnie, należy zapewnić przyblokowanie jednego z nich. Typowy przykład: przydział zasobów.
Założenia do rozwiązania problemu Pozwolić działać tylko jednemu procesowi. Współbieżność możliwa tylko przy luźnym powiązaniu procesów rzadkie i krótkie żądania komunikacji. strefa lokalna protokół wstępny strefa krytyczna protokół końcowy Program główny Koszty współbieżności
Wymagania Krótkie protokoły minimalizacja kosztów Krótki czas przebywania w strefie krytycznej Niezawodność urządzeń i procedur dostępu do nich Zabezpieczenie przed błędnym działaniem procesów (błąd nie powinien mieć wpływu na pozostałe procesy)
Poprawność systemów i programów częściowa poprawność (bezpieczeństwo) Dotyczy własności statycznych programu (np. wzajemne wykluczanie). Jeśli program zakończy się, to poda prawidłowy wynik. Program nie znajdzie się w stanie niepożądanym. całkowita poprawność (żywotność) Dotyczy własności dynamicznych Program zakończy się i poda prawidłowy wynik. Program osiągnie w końcu każdy pożądany stan. (w końcu = w nieokreślonym, skończonym czasie)
Przejawy braku żywotności Blokada programu globalny brak żywotności Każdy proces ze zbioru jest wstrzymany w oczekiwaniu na zdarzenie, które może być spowodowane tylko przez inny proces z tego zbioru. Blokada nie musi wystąpić nie zawsze jest wykrywana w testach. Zagłodzenie programu lokalny brak żywotności Proces nie jest wznowiony, mimo iż zdarzenie, na które czeka, wystąpiło dowolną liczbę razy. Trudniejsze do wykrycia i poprawienia.