Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

1 Programowanie współbieżne i rozproszone Instytut Informatyki dr Anna Kwiatkowska.

Podobne prezentacje


Prezentacja na temat: "1 Programowanie współbieżne i rozproszone Instytut Informatyki dr Anna Kwiatkowska."— Zapis prezentacji:

1 1 Programowanie współbieżne i rozproszone Instytut Informatyki dr Anna Kwiatkowska

2 2 Literatura M. Ben – Ari Podstawy programowania współbieżnego i rozproszonego B. E. Borowik Programowanie równoległe w zastosowaniach G. Coulouris, J. Dollmore, T. Kindberg Systemy rozproszone podstawy i projektowanie D. Harel Rzecz o istocie informatyki – algorytmika Z.Weiss, T. Gruźlewski "Programowanie współbieżne i rozproszone

3 3 Literatura (c.d.) Mike Morgan Poznaj język Java, Mikom 2001 Steve Potts Java w zadaniach, wydawnictwo Robomatic 2001 K. Barteczko Programowanie obiektowe i zdarzeniowe w Javie, wydawnictwo PJWSTK, 2005 H. Schildt Java2, kurs podstawowy, Edition 2002 Elliote Rusty Harold,Java Programowanie sieciowe, RM, Warszawa 2001

4 4 Wstęp Ciągle wzrastające zapotrzebowanie na zwiększenie mocy obliczeniowej komputerów (obecnie prędkości są rzędu kilkuset GFLOPS) Ograniczenia technologiczne sprzętu komputerowego hamują ten postęp Rozwiązania problemu poszukuje się w: implementacji obliczeń na komputerach o architekturze równoległej realizacji algorytmów współbieżnych

5 5 Współbieżność Jeśli w jednym komputerze istnieje w tej samej chwili czasowej wiele procesów, to mówimy, że są one wykonywane współbieżnie Komputer ma jeden procesor centralny – współbieżność osiąga się przez przeplatanie porcji poszczególnych procesów Komputer ma N procesorów – N procesów może być wykonywanych równolegle (realnie jednocześnie)

6 6 Dlaczego? Pisanie programów jest trudne Jest to stwierdzenie prawdziwe już w przypadku programów sekwencyjnych, gdy na raz wykonuje się jedna instrukcja i nie trzeba rozważać wszystkich możliwych interakcji z innymi działającymi w tym samym czasie programami Wprowadzenie współbieżności jeszcze bardziej utrudnia programowanie Dlaczego zatem warto i należy rozważać programy współbieżne?

7 7 Dlaczego rozważamy programowanie współbieżne Niektóre problemy są z natury współbieżne, rozwiązania innych dają się łatwo i elegancko wyrazić w postaci niezależnie wykonujących się procedur

8 8 Przykład chcemy napisać grę akcji, w której wiele postaci porusza się na ekranie wykonując pewne działania taką scenę możemy oprogramować sekwencyjnie rozważając akcje wszystkich postaci w jednym fragmencie kodu znacznie elegantszym rozwiązaniem jest oprogramowanie z osobna każdej postaci (można to zrobić obiektowo, nadając każdej z nich pewne indywidualne cechy), a następnie uruchomienie współbieżne tylu procesów, ile postaci chcemy uzyskać na ekranie oczywiście wymaga to także prawidłowej synchronizacji działania wszystkich procesów, co obejmuje działania takie jak na przykład wykrywanie kolizji i zapobieganie im.

9 9 Dlaczego? Systemy operacyjne optymalizują czas obrotu zadania wykonując nowy proces, w czasie, gdy wykonywany dotychczas proces czeka np. na zakończenie operacji wejścia- wyjścia Stale zwiększają się moc obliczeniowa procesorów umożliwia wykonanie wielu zadań interakcyjnych na jednym procesorze w sposób niezauważalny dla użytkownika

10 10 Przykład system operacyjny z podziałem czasu potrafi wykonywać wiele procesów współbieżnie dzieląc czas procesora między wiele procesów proces otrzymuje pewien kwant czasu (rzędu milisekund), w czasie którego korzysta z procesora gdy kwant skończy się, system operacyjny "przełącza" procesy: odkłada ten, który się wykonywał na później i zajmuje się innym ponieważ przełączanie odbywa się często, więc użytkownicy komputera mają wrażenie, że komputer zajmuje się wyłącznie ich procesem

11 11 Przykład (cd) co więcej, rozwiązując pewien problem, użytkownik może uruchomić "jednocześnie" dwa procesy, które ze sobą w pewien sposób współpracują jest to powszechnie stosowane na przykład w środowisku systemu operacyjnego Unix, który umożliwia wykonywanie programów w potoku, np.: ls -l | grep moje | more wszystkie trzy programy wchodzące w skład takiego potoku wykonują się współbieżnie, z tym że wyniki generowane przez pierwszy z nich są podawane na wejście drugiego, wyniki drugiego -- - na wejście trzeciego itd

12 12 Dlaczego? malejące ceny sprzętu sprzyjają powstawaniu architektur wieloprocesorowych, w których można uzyskać prawdziwą współbieżność tzn. wykonywać jednocześnie wiele procesów na różnych procesorach system operacyjny nie musi już "oszukiwać" dzieląc czas jedynego procesora między wiele procesów, lecz może wykonywać każdy z nich na innym procesorze (przynajmniej dopóki wystarczy procesorów) nowoczesne układy zawierają udogodnienia takie jak: wielowątkowość (hyperthreading), czy wręcz kilka rdzeni w jednej kości procesora.

13 13 Dlaczego? rozpowszechnienie się sieci komputerowych stwarza jeszcze inne możliwości współbieżnego wykonywania poszczególne obliczenia składające się na duże zadanie mogą być wykonywane na różnych komputerach połączonych siecią rozproszone systemy operacyjne potrafią zarządzać czasem wielu procesorów, znajdujących się w wielu różnych węzłach sieci

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

15 15 Pojęcia podstawowe Praca sekwencyjna poszczególne akcje procesu są wykonywane jedna po drugiej, kolejna akcja rozpoczyna się po całkowitym zakończeniu poprzedniej

16 16 Pojęcia podstawowe Praca współbieżna: składające się na nią zjawiska, czynności lub działania odbywają się równocześnie. Współbieżność jest abstrakcją równoległości. Rozproszoność jest specjalnym typem współbieżności, w której składniki współbieżne są fizycznie oddalone

17 17 Procesy Proces – program w trakcie wykonywania, jest sekwencją zmian systemu komputerowego, które odbywają się zgodnie z zapisanym w programie algorytmem. Realizacja procesu zajmuje się procesor. Procesor i pamięć operacyjna to urządzenia niezbędne do wykonania każdego procesu.

18 18 Pojęcia podstawowe Proces - program w trakcie działania. Proces jest ciągiem czynności, zaś program jest ciągiem instrukcji. Program nie jest procesem, gdyż jest obiektem pasywnym, natomiast proces jest obiektem aktywnym z licznikiem rozkazów wskazującym następny rozkaz do wykonania oraz ze zbiorem przydzielonych mu zasobów.

19 19 Procesy współbieżne Dwa procesy są współbieżne, jeśli jeden z nich rozpoczyna się przed zakończeniem drugiego.

20 20 Rodzaje procesów skończone nieskończone (system operacyjny, systemy czasu rzeczywistego sterujące automatami lub wskutek błędu w programie)

21 21 Procesy współbieżne Proces nieskończony jest współbieżny ze wszystkimi procesami, które rozpoczęły się od niego później. Przykład: System operacyjny, a dokładniej procesy wchodzące w jego skład wykonują się współbieżnie ze wszystkimi procesami uruchamianymi przez użytkowników systemu komputerowego.

22 22 Klasyfikacja procesów współbieżnych rozłączne procesy interakcyjne kooperujące (współpracujące) konkurencyjne (współzawodniczące)

23 23 Procesy współbieżne Współbieżne są np. procesy wykonywane na dwóch nie połączonych ze sobą komputerach osobistych – procesy te nie mają na siebie wpływu, są rozłączne

24 24 Zasób dzielony Wspólny obiekt, z którego może korzystać w sposób wyłączny wiele procesów nazywa się zasobem dzielonym (może być wykorzystywany tylko przez jeden proces lub ograniczoną ich liczbę, mniejszą od liczby chętnych).

25 25 Procesy współbieżne O współzawodnictwie mówimy, gdy dwa procesy ubiegają się o ten sam zasób (np. dostęp do tej samej komórki pamięci). Współzawodnictwo wymaga synchronizacji, gdyż akcja procesu musi być wstrzymana, jeśli zasób potrzebny do jej wykonania jest w danej chwili zajęty przez inny proces.

26 26 Procesy współbieżne Współpraca procesów równoległych wymaga komunikowania się, gdyż do działania jednego z nich jest potrzebna informacja tworzona przez drugi proces. Akcje tych procesów muszą być częściowo uporządkowane w czasie, gdyż informacja musi być najpierw utworzona, potem wykorzystana. informacja

27 27 Komunikacja miedzy procesami Komunikacja miedzy parą procesów obejmuje działania po stronie procesu nadawczego oraz odbiorczego, dające w wyniku: przenoszenie danych za środowiska procesu nadawczego do środowiska procesu odbiorczego synchronizację czynności odbiorczych z czynnościami nadawczymi

28 28 Komunikacja miedzy procesami Każde przekazanie komunikatu obejmuje przesłanie przez proces nadawczy zbioru wartości danych (komunikatu) za pomocą określonego mechanizmu komunikacji i akceptację komunikatu przez proces odbiorczy

29 29 Program współbieżny Poziomy uzależnienia procesów współbieżnych: procesy będące współbieżnym wykonaniem niezależnych programów użytkowych – synchronizacją tą zajmuje się system operacyjny

30 30 Program współbieżny procesy interakcyjne komunikują się i synchronizują w sposób określony przez programistę – program opisujący zachowanie się zbioru takich współbieżnych procesów nazywa się programem współbieżnym

31 31 Program współbieżny Program współbieżny składa się z kilku (co najmniej dwóch) współbieżnych procesów sekwencyjnych, które muszą się ze sobą komunikować lub synchronizować swoje działania

32 32 Poprawność W celu wykazania, że program sekwencyjny jest poprawny należy udowodnić dwie rzeczy: zawsze, jeśli program się zatrzyma to zwróci nam dobre wyniki ( częściowa poprawność ) w ogóle się zatrzyma ( własność stopu )

33 33 Własność bezpieczeństwa Własność bezpieczeństwa jest uogólnieniem własności częściowej poprawności na programy współbieżne. Program współbieżny jest bezpieczny jeśli nigdy nie doprowadza do niepożądanego stanu (zawsze utrzymuje system w pożądanym stanie).

34 34 Przykład rozpatrujemy ruchliwe skrzyżowanie w środku dużego miasta procesy to samochody usiłujące przez to skrzyżowanie przejechać (na wprost) własność bezpieczeństwa wyraża fakt, że nie dojdzie do kolizji można ją wyrazić: nigdy na skrzyżowaniu nie będą jednocześnie samochody jadące w kierunku wschód-zachód i północ- południe.

35 35 Własność żywotności Program współbieżny jest żywotny, jeśli zapewnia, że każde pożądane zdarzenie w końcu zajdzie. Własność żywotności jest uogólnieniem własności stopu na programy współbieżne. Gwarantuje, że zdarzenie zawsze w końcu zajdzie, ale nie określa kiedy to się stanie.

36 36 Przykład W przykładzie skrzyżowania oznacza to, że każdy samochód, który chce przez skrzyżowanie przejechać, w końcu przez to skrzyżowanie przejedzie

37 37 Uczciwość (sprawiedliwość) Własność uczciwości – określa jak ma być rozwiązany problem współzawodnictwa procesów. Gdy procesy nie są identyczne, sprawiedliwość jest cechą, którą trudno zdefiniować, a jeszcze trudniej zmierzyć.

38 38 Uczciwość (sprawiedliwość) Specyfikacje uczciwości: uczciwość słaba – jeśli proces nieprzerwanie zgłasza żądanie to kiedyś będzie ono obsłużone uczciwość mocna – jeśli proces zgłasza żądanie nieskończenie wiele razy, to kiedyś będzie ono obsłużone

39 39 Uczciwość (sprawiedliwość) oczekiwanie liniowe jest bardziej praktycznym pojęciem, ponieważ jeżeli proces zgłosi żądanie może być wprawdzie wyprzedzony przez każdy z pozostałych procesów, ale tylko jeden raz FIFO jest najsilniejszą specyfikacją uczciwości i łatwo ją zaimplementować

40 P2 P1 t1 t2 t3 Uczciwość mocna i słaba Proces zgłasza żądanie przez ustawienie bitu na 1. Proces P2 okresowo zgłasza i wycofuje żądanie P1 zgłasza żądanie i podtrzymuje je nieskończenie długo, dopóki nie zostanie zrealizowane Proces obsługujący żądania okresowo sprawdza stan bitu w chwilach t1, t2, t3... System ten jest słabo uczciwy, ponieważ obsłuży żądanie procesu P1, ale nie jest mocno uczciwy, bo nie obsłuży żądania procesu P2.

41 41 Obliczenia równoległe Idea obliczeń równoległych polega na podzieleniu obliczeń na części – wątki, z których każda jest wykonywana na oddzielnym procesorze. Po wykonaniu każdego z wątków następuje faza synchronizacji. Działanie 2 Działanie 1

42 42 Wątki Wątek jest podstawową jednostką wykorzystującą procesor Różnica między procesem a wątkiem polega przede wszystkim na sposobie wykorzystania dostępnych zasobów.

43 43 Wątki każdy proces ma przydzielony odrębny obszar pamięci operacyjnej grupa równorzędnych wątków współdzieli tą samą przestrzeń adresową, kod i zasoby systemu operacyjnego

44 44 Wielowątkowość w Java wątki działają praktycznie równolegle równoległość działań w ramach procesu osiągamy przez uruchamianie kilku różnych wątków

45 45 Wielowątkowość w Java zmiany wątków mogą dokonywać się według następujących mechanizmów: współpracy - wątek sam decyduje kiedy oddać czas procesora innym wątkom wywłaszczania – o dostępie wątków do procesora decyduje systemowy zarządca wątków ( przydział z przeplotem)

46 46 Wielowątkowość w Java każdy proces posiada co najmniej jeden wątek nazywany wątkiem głównym zaleta: wspólny dostęp wszystkich wątków danego procesu do zmiennych globalnych wada: brak ochrony danych programu przed równoległymi zmianami dokonywanymi przez różne wątki (możliwość niespójnych danych)

47 47 Wielowątkowość w Java uruchamianiem wątków i zarządzaniem nimi zajmuje się klasa Thread aby uruchomić wątek należy stworzyć obiekt klasy Thread i użyć metody start() wobec tego obiektu metoda run() określa co ma robić wątek

48 48 Metody klasy Thread activeCount() – zwraca liczbę aktywnych wątków należących do danej grupy checkAccess() – sprawdza za pomocą bieżącego obiektu SecurityManager, czy bieżacy wątek jest upoważniony do modyfikowania danego wątku countStackFrames() – zwraca głębokość stosu mierzoną liczbą stron currentThread() – zwraca odwołanie do aktualnie wykonywanego wątku destroy() – powoduje natychmiastowe zakończenie działania wątku bez możliwościwykonania operacji końcowych

49 49 Metody klasy Thread dumpStack() – wyświetla zawartość stosu aktualnie wykonywanego wątku enumerate() – przygotowuje tablicę wątków, zawierającą kopie wszystkich aktywnych wątków danej grupy getname() – zwraca nazwę wątku getPrioryty() – zwraca priorytet wątku getThreadgroup() – zwraca odwołanie do danej grupy wątków (ThreadGroup) interrupt() – przerywa określony wątek interrupted() – sprawdza, czy bieżący wątek został przerwany (metoda statyczna)

50 50 Metody klasy Thread isAlive() – zwraca true, jeśli określony wątek jest nadal czynny, wątek staje się czynny po wywołaniu jego metody start() isDaemon() – zwraca true, jeśli określony wątek jest demonem (demon działa w tle, niezależnie od interfejsu użytkownika), jeśli nie działa już żaden wątek interfejsu użytkownika i jedynymi wątkami są demony, to JVM kończy działanie isInterrupted() – zwraca true, jeśli dany wątek został przerwany join() – scala dwa wątki w oczekiwaniu na moment, kiedy inny wątek przestanie być czynny

51 51 Metody klasy Thread run() – rozpoczyna wykonywanie docelowego obiektu wątku setDaemon() – oznacza wątek jako demon lub jako wątek użytkownika, w zależności od wartości parametru setName() – zmienia nazwę wątku setPriority() – sprawdza, czy wątek jest upoważniony do zmiany swojego priorytetu, jeśli tak, to zmienia go zgodnie z wartością parametru, metoda ta nigdy nie ustawia priorytetu na poziomie wyższym niż dla danej grupy, priorytet ustala się za pomocą następujących stałych: MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY

52 52 Metody klasy Thread sleep() – powoduje, że bieżący wątek zwalnia procesor i wstrzymuje jego działanie na określony czas w milisek start() – rozpoczyna działanie danego wątku, powoduje wywołanie przez maszynę JVM jego metody run() toString() – zwraca reprezentacje łańcuchową (String) wątku, obejmującą jego nazwę, priorytet i grupę yield() – powoduje, że bieżący wątek zwalnia procesor, dzięki czemu procedura szeregująca może go udostępnić innym wątkom

53 53 Pierwszy sposób tworzenia i uruchomienia wątku zdefiniować własną klasę dziedziczącą Thread przedefiniować odziedziczoną metodę run() podając w niej działania, które ma wykonywać wątek stworzyć obiekt własnej klasy wysłać mu komunikat start()

54 54 Wielowątkowość w Java - przykład public class Timer extends Thread{ public void run(){ … while(true){ try{ this.sleep(1000); }catch (InterruptedException exc){ …}}} kod wątku jest opisany w metodzie run() w pętli while usypiamy wątek wykonujący metodę run() na 1 sek w trakcie uśpienia wątek jest odsuwany od procesora ……. Timer tm= new Timer(); tm.start …. utworzenie i uruchomienie wątku w programie

55 55 Drugi sposób tworzenia i uruchamiania wątku zdefiniować klasę implementującą interfejs Runnable (np. class C implements Runnable) dostarczyć w niej definicji metody run() (co ma robić watek) utworzyć obiekt tej klasy (np. C c=new C();) utworzyć obiekt klasy Thread przekazując w konstruktorze referencje do obiektu utworzonego (np.Thread th=new Thread(c);) wywołać na rzecz nowoutworzonego obiektu klasy Thread metodę start() (th.start();)

56 56 Wielowątkowość w Java -przykład class Timer implements Runnable { public void run(){int time=0; while(true) { try {Thread.sleep(1000); } catch(InterruptedException exc) { System.out.println( watek zostal przerwany); return;} time++; }}}

57 57 Wielowątkowość w Java -przykład utworzenie i uruchomienie tak zdefiniowanego wątku zliczającego czas (w innej klasie) ma następującą postać: Timer czas=new Timer(); Thread watek=new Thread(czas); watek.start();

58 58

59 59 import java.awt.*; import java.awt.event.*; import java.awt.event.MouseEvent; import java.applet.*; public class watki1 extends Applet implements Runnable, MouseMotionListener { int x1=50; int y1=50; Thread stoper=null; int licznik=0; public void init() {addMouseMotionListener(this);} public void start() { if (stoper==null) {stoper=new Thread(this); stoper.start(); }} public void destroy() {removeMouseMotionListener(this);}

60 60 public void run() { while (stoper != null) {try {Thread.sleep(1000); } catch(InterruptedException e){} licznik++; repaint(); }} public void mouseDragged(MouseEvent e) { x1=e.getX(); y1=e.getY(); repaint(); } public void mouseMoved(MouseEvent e){} public void paint(Graphics g) { g.drawString("wynik:"+licznik,10,20); g.drawString("pociagnij",x1,y1); }}

61 61

62 62 Koniec pracy wątku Wątek kończy pracę, wtedy gdy zakończy się jego metoda run() programowo zakończyć jego pracę – należy sprawdzić w metodzie run() warunki zakończenia gdy są spełnione spowodować wyjście z run() (np. return) w klasie Thread znajduje się metoda stop()

63 63 Wątek zablokowany Wątek może znajdować się w stanie zablokowania z następujących powodów: uśpienie wątku metodą sleep(ilość milisekund); wywołanie metody suspend() (niezalecane); zawieszenie wątku metodą wait() a obudzenie go po wywołaniu metody notify() lub notifyAll(); wątek oczekuje na zakończenie operacji wejścia- wyjścia; wątek próbuje wywołać metodę synchronizowaną na innym obiekcie, który jest właśnie blokowany

64 64 Blokada Zbiór procesów znajduje się w stanie blokady (zastoju, martwego punktu), jeśli każdy z tych procesów jest wstrzymywany w oczekiwaniu na zdarzenie, które może być spowodowane tylko przez inny proces z tego zbioru.

65 65 Zagłodzenie Zagłodzenie (zakleszczenie) występuje wówczas, gdy proces nie zostaje wznowiony, mimo, że zdarzenie na które czeka, występuje dowolną ilość razy, ale za każdym razem jest wybierany jakiś inny czekający proces.

66 66 Zagłodzenie Zagłodzenie zależy od strategii wznawiania procesów i jest przejawem braku żywotności programu. Jeśli procesy będą wznawiane: zawsze w kolejności, w jakiej zostały wstrzymane (kolejka prosta), to zjawisko zagłodzenia nie wystąpi, zgodnie z priorytetami (kolejka priorytetowa), możliwe, że procesy o niższym priorytecie zostaną zagłodzone

67 67 Niskopoziomowe mechanizmy synchronizacji Mechanizm przerwań umożliwia przełączenie procesora na wykonywanie innego procesu. Przerwanie może być spowodowane: jakimś zdarzeniem zewnętrznym błędem wykonywania programu wykonaniem specjalnej instrukcji powodującej przerwanie

68 68 Niskopoziomowe mechanizmy synchronizacji Obsługa przerwań - procedura wykonywana automatycznie jako następstwo przerwania. Maskowanie przerwań - mechanizm umożliwiający zablokowanie kolejnych przerwań, gdy jest jeszcze realizowana procedura obsługi poprzedniego

69 69 Wady mechanizmu przerwań Programowanie przerwań wiąże się z ingerencją w obszar systemu operacyjnego W systemie wieloprocesorowym mechanizm ten nie gwarantuje wzajemnego wykluczania przy dostępie do pamięci, gdyż dwa różne procesory mogą w tym samym czasie realizować dwa różne przerwania

70 70 Arbiter pamięci Arbiter pamięci zapewnia wzajemne wykluczanie przy zapisie lub odczycie pojedynczej komórki pamięci Gdy dwa procesory podejmą próbę dostępu w tej samej chwili do komórki pamięci, uzyskają do niej dostęp w losowej kolejności.

71 71 Wielowątkowość w JAVA Metody stop() suspend() resume() ze starszych wersji JAVA należą nadal do API, ale nie zaleca się ich stosowania specjaliści z Sun doszli do wniosku, że zwiększają prawdopodobieństwo zajścia blokady

72 72 Wielowątkowość w JAVA Działanie sekcji krytycznej: -"przejęcie" pewnych fragmentów kodu bądź określonych zasobów do wyłącznego użytku jednego wątku -każdy watek, który chce uzyskać wyłączny dostęp do fragmentu chronionego kodu musi najpierw wejść do tej sekcji krytycznej - operacja wejścia może się udać gdy żaden inny wątek nie przebywa w tej sekcji

73 73 Mechanizmy wysokopoziomowe Mechanizmy synchronizacji: semafory - zadaniem jest przepuszczanie i zatrzymywanie procesów monitory - jego głównym przeznaczeniem jest zarządzanie wybranym zasobem komputera

74 74 Mechanizmy wysokopoziomowe Mechanizmy komunikacji i synchronizacji: spotkania - mogą być symetryczne (dwoje ludzi) i asymetryczne (wizyta klienta w zakładzie naprawczym) przestrzeń krotek - nie trzeba znać ani dostawców ani odbiorców informacji potoki komunikaty i kanały

75 75 Semafor binarny Semafor binarny jest zmienną logiczna (pojedynczym bitem), zatem może przyjmować wartości 0 lub 1. podniesienie semafora S: S:=1 opuszczenie semafora S: czekaj aż S=1; S:=0;

76 76 Semafor ogólny Semafor ogólny jest zmienną całkowitą z dwoma wyróżnionymi operacjami. podniesienie semafora S: S:=S+1; opuszczenie semafora S: czekaj, aż S>0; S:=S-1; (operacja jest niepodzielna tylko wtedy, gdy S>0 jest spełniony)

77 77 Monitor Monitor to zebrane w jednej konstrukcji programowej pewne wyróżnione zmienne oraz procedury i funkcje działające na tych zmiennych. Część tych procedur i funkcji jest udostępniana na zewnątrz monitora – tylko ich wywołanie umożliwia procesom dostęp do zmiennych ukrytych wewnątrz monitora.

78 78 Monitor Wyróżnia je fakt, że wykonanie procedury monitora jest sekcją krytyczną wykonującego ją procesu. Istnieje możliwość wstrzymywania i wznawiania procesów wewnątrz procedury monitorowej.

79 79 Sekcja krytyczna Fragment procesu, w którym korzysta on z obiektu dzielonego nazywa się sekcją krytyczną tego procesu. Ponieważ w danej chwili z obiektu dzielonego może korzystać tylko jeden proces wykonując swoją sekcję krytyczną uniemożliwia on wykonanie sekcji krytycznych innym procesom.

80 80 Sekcja krytyczna Procesor dzieli swój czas pomiędzy system operacyjny i wszystkie wykonujące się procesy (algorytm programu współbieżnego powinien zapewnić wykonywanie sekcji krytycznych procesów przez system operacyjny ponieważ ma on najwyższy priorytet)

81 81 Sekcja krytyczna Procesy współbieżne chcące wejść do własnej sekcji krytycznej wykonują instrukcję powodującą takie przerwanie, przy którym procesor zajmie się wykonywaniem systemu operacyjnego

82 82 Sekcja krytyczna żaden inny proces nie będzie mógł przeszkodzić w wykonywaniu sekcji krytycznej dzięki maskowaniu po zakończeniu obsługi tego przerwania procesor wróci do wykonywania procesów użytkowych lub obsłuży następne przerwanie

83 83 Wymagania czasowe żaden proces nie może wykonywać swojej sekcji krytycznej nieskończenie długo uniemożliwiając innym procesom wejście do sekcji krytycznej (tzn. rozpoczęcie jej wykonywania) w sekcji krytycznej proces powinien przebywać jak najkrócej

84 84 Wymagania czasowe zachowanie się procesów poza sekcja krytyczną nie powinno być w żaden sposób ograniczone, poza sekcja krytyczną proces może się zatem zapętlić lub skończyć procesy mogą się wykonywać z różnymi dowolnie wybranymi prędkościami

85 85 Fazy równoległości

86 86 Techniki dekompozycji W celu zrównoleglenia algorytmu, należy dokonać dekompozycji problemu. W zależności od rozpatrywanego zadania należy wybrać najkorzystniejszą z metod dekompozycji

87 87 Dekompozycja geometryczna Jest zalecana wówczas, gdy obliczenia w każdym punkcie struktury danych zależą tylko i wyłącznie od położenia punktów w stosunku do punktu środkowego. Im odległość od punktu środkowego jest większa, tym więcej danych musi być doprowadzonych do obliczeń.

88 88 Dekompozycja iteracyjna Wykorzystuje fakt, że większość programów sekwencyjnych zawiera pętle. Wyniki zbioru kilku iteracji mogą być przesłanką do określenia osobnego zadania. Dekompozycja ta jest preferowana na komputerach z pamięcią rozproszoną.

89 89 Dekompozycja rekurencyjna Zaczyna się od podzielenia oryginalnego problemu na dwa lub więcej podproblemów, a następnie współbieżnego ich rozwiązywania. W tej metodzie każdy proces działa jako źródło nowego zadania i równocześnie jest odbiorcą rezultatów wygenerowanych w poprzednim zadaniu.

90 90 Dekompozycja spekulatywna Działania tej dekompozycji sprowadzają się zasadniczo do próby N technik rozwiązań jakiegoś problemu równocześnie. Wybierany jest proces, który pierwszy obliczy prawidłowe rozwiązanie w możliwie najkrótszym czasie. Pozostałe N-1 procesów jest odrzucanych.

91 91 Dekompozycja rozproszona W dekompozycji rozproszonej rozwiązywany problem jest dzielony na fragmenty. Liczba fragmentów musi być większa niż liczba procesorów. Każdemu procesorowi przydziela się pewną liczbę tych fragmentów w taki sposób, aby za obliczenia każdej z tych grup był odpowiedzialny tylko jeden powierzony tej grupie procesor.

92 92 Dekompozycja funkcjonalna Sprowadza się do przyporządkowania każdej procedurze wykonującej jedno zadanie oddzielnego, wyspecjalizowanego procesora, który będzie wykonywał pracę najskuteczniej i w sposób równoległy.

93 93 Przykład Program sekwencyjny jest wykonywany jako ciąg instrukcji jedna po drugiej. Przykład:Obliczenie wartości wyrażenia: A*B- (C+D)/(E-F) x1:=C+D; x2:=E-F; x3:=A*B; x4:=x1/x2; x5:=x3-x4;

94 94 Przykład (c.d.) Przykład Obliczanie wartości x1 i x2 może być wykonane: jednocześnie, o ile umożliwia to sprzęt sekwencyjnie w przeplocie, o ile umożliwia to oprogramowanie Są to akcje potencjalnie równoległe.

95 95 Przykład(c.d.) Algorytm obliczenia wartości wyrażenia: A*B-(C+D)/(E-F) z elementami równoległymi x1:=C+D x2:=E-F x4:=x1/x2 x3:=A*B x5:=x3-x4

96 96 Przykład 4 Jeśli algorytm wymaga sekwencji instrukcji: x:=3; y:=4; wtedy można zaoszczędzić czas wykonując je równolegle. Natomiast, gdyby instrukcje miały postać: x:=3; y:=x; po zrównolegleniu nową wartością y byłaby stara wartość x.

97 97 Przykład 6 Wiele problemów można rozwiązać dużo sprawniej dzięki przetwarzaniu równoległemu. Zadanie obliczania sumy wyrazów ciągu o n wyrazach Algorytm sekwencyjny wymaga n-1 dodawań, czyli ma koszt O(N) Algorytm równoległy będzie się wykonywał w czasie O(log 2 N)

98 98 Sumowanie w czasie logarytmicznym Drugi krok (n/4 procesorów) Pierwszy krok (n/2 procesorów) Krok log 2 N (1 procesor) a n-1 a1a1 a2a2 anan a4a4 a3a3... a 1 + a 2 a 3 + a 4 a 1 + a 2... a 1 + a 2 +a 3 + a 4 a n-3 + a n-2 +a n-1 +a n.... Suma ciągu

99 99 Szybkość i efektywność komputerów równoległych Miarą korzyści, jaka wypływa ze zrównoleglenia procesów jest przyspieszenie aplikacji. Przyspieszenie programu wynosi: gdzie T(P) – czas potrzebny do przebiegu programu na P procesorach

100 100 Szybkość i efektywność komputerów równoległych Efektywność programu na P procesorach określona jest przez wzór: Jest to stosunek osiągniętego przyspieszenia do liczby procesorów wykonujących dane obliczenia

101 101 Szybkość i efektywność komputerów równoległych Prawo Amdahla Każdy program zawiera dwa rodzaje obliczeń: obliczenia, które muszą być wykonane szeregowo obliczenia, które mogą być zrównoleglone Dynamika wzrostu prędkości programu zaczyna gwałtownie spadać, gdy wewnętrzne szeregowe części programu zaczynają dominować nad częścią równoległą programu.

102 102 Dzielenie zasobów Zasób – zbiór rzeczy, które mogą być z pożytkiem dzielone (wspólnie wykorzystywane) w systemie rozproszonym. Zbiór ten obejmuje składowe sprzętowe (dyski, drukarki) i rozciąga się na jednostki definiowane przez oprogramowanie (pliki, okna, bazy danych i inne jednostki danych)

103 103 Dzielenie zasobów Zarządca zasobów (ang. resource manager)- moduł oprogramowania zarządzającego zbiorem zasobów konkretnego typu. Każdy zasób, który ma być w sposób efektywny wspólnie wykorzystywany musi być zarządzany przez program tworzący interfejs komunikacyjny umożliwiający dostęp do zasobu, działanie na nim oraz jego aktualizacje w sposób niezawodny i spójny.

104 104 Problem wzajemnego wykluczania Rozwiązanie tego problemu polega na wprowadzeniu do treści każdego procesu dodatkowych instrukcji: poprzedzających sekcję krytyczną – protokół wstępny następujące bezpośrednio po sekcji krytycznej – protokół końcowy Protokół wstępny Protokół końcowy Sekcja krytyczna

105 105 Problem wzajemnego wykluczania Definiuje się go następująco: Należy zsynchronizować N procesów, z których każdy w nieskończonej pętli na przemian zajmuje się własnym algorytmem i wykonuje sekcję krytyczną. Zsynchronizować należy w taki sposób, aby wykonanie sekcji krytycznych jakichkolwiek dwóch lub więcej procesów nie pokrywało się w czasie.

106 106 Rozwiązanie problemu wzajemnego wykluczania - własności N procesów wykonuje nieskończone pętle zawierające ciąg instrukcji, który można podzielić na: sekcje krytyczną i sekcje lokalną – instrukcje z sekcji krytycznych dwu lub więcej procesów nie mogą być przeplatane

107 107 Rozwiązanie problemu wzajemnego wykluczania - własności Rozwiązanie zapisane przez wstawienie do pętli dodatkowych instrukcji wykonywanych przez proces, który chce wejść lub opuścić sekcję krytyczną : protokół wstępny i końcowy

108 108 Rozwiązanie problem wzajemnego wykluczania - własności Proces może zatrzymać się w swojej sekcji lokalnej – nie może zatrzymać się ani zapętlić podczas wykonywania swoich protokołów ani sekcji krytycznej.

109 109 Rozwiązanie problem wzajemnego wykluczania - własności W programie nie może wystąpić blokada – jeśli kilka procesów próbuje wejść do swoich sekcji krytycznych, to jednemu musi się to w końcu udać.

110 110 Rozwiązanie problem wzajemnego wykluczania - własności Żaden z procesów nie może zostać zagłodzony – jeśli proces zgłasza zamiar wejścia do sekcji krytycznej przez rozpoczęcie wykonania protokołu wstępnego, to w końcu musi osiągnąć cel.

111 111 Rozwiązanie problem wzajemnego wykluczania - własności Przy braku rywalizacji o sekcję krytyczną pojedynczy proces, który chce wejść do swojej sekcji krytycznej wejdzie do niej natychmiast.

112 112 Semafory były pierwszym mechanizmem synchronizacyjnym stosowanym w językach wysokiego poziomu oprócz określenia jego stanu początkowego można na nim wykonywać tylko dwie operacje : podniesienie semafora (wait) i opuszczenie semafora (signal) rodzaje semaforów: ogólny i binarny

113 113 Zasada działania semafora opuszczenie semafora S, to wykonanie instrukcji: jeśli S>0, to S:=S-1 w przeciwnym razie wstrzymaj działanie procesu wykonującego tą operację podniesienie semafora s, to wykonanie instrukcji: jeśli są procesy wstrzymane w wyniku wykonania operacji opuszczania semafora s, to wznów jeden z nich, w przeciwnym razie S:=S+1

114 114 Schemat synchronizacji przy pomocy semafora Proces A Proces B S:=S-1 S=0 signal(S) S:=S+1 ktoś czeka wait(S)

115 115 Semafory Ponieważ operacje podniesienia i opuszczenia semafora są niepodzielne, w danej chwili tylko jeden proces może badać stan semafora S i ewentualnie zmniejszyć lub zwiększyć jego wartość

116 116 Ograniczenia nie można wykonywać na nim działań arytmetycznych brak informacji o tym ile procesów zostało wstrzymanych na danym semaforze często trzeba oprócz semafora wprowadzać zmienne pomocnicze (całkowite) programista musi sam zadbać, aby zmienne te były odpowiednio modyfikowane wszelkie operacje na tych zmiennych muszą być sekcja krytyczną

117 117 Semafory Problemy, które można poprawnie rozwiązać za pomocą semaforów: wzajemne wykluczanie dwóch procesów producenci i konsumenci czytelnicy i pisarze pięciu filozofów przejazd przez wąski most gra w łapki

118 118 Monitory koncepcja monitora powstała w wyniku poszukiwań strukturalnego mechanizmu do synchronizacji procesów monitor to zebrane w jednej konstrukcji programowej pewne wyróżnione zmienne oraz procedury i funkcje działające na tych zmiennych część tych procedur i funkcji jest udostępniana na zewnątrz monitora

119 119 Monitory tylko wywołanie udostępnionych funkcji i procedur monitora umożliwia procesom dostęp do zmiennych ukrytych wewnątrz monitora wykonanie procedury monitora jest sekcją krytyczna wykonującego ją procesu istnieje możliwość wstrzymywania i wznawiania procesów wewnątrz procedury monitorowej służą do tego specjalne zmienne

120 120 Przejście procesu przez monitor Proces A M.P(y) Monitor M procedure P(x:real); begin …. wait(C); …… signal(C); …. end; procesy oczekujące na wejście procesy oczekujące na C procesy wstrzymane po signal

121 121 Monitory Problemy, które mogą być poprawnie rozwiązane przy pomocy monitorów: producenci i konsumenci z losową wielkością pobieranych i wstawianych porcji prom jednokierunkowy trzy drukarki stolik dwuosobowy

122 122 Spotkania symetryczne komunikacja synchroniczna za pomocą instrukcji wejscia-wyjścia proces A chce wysłać (instrukcja wyjścia) do procesu B ciąg wartości X, aby to było możliwe w procesie B musi się znajdować dualna instrukcja wejścia z parametrem tego samego typu, co X

123 123 Spotkania symetryczne instrukcja wejścia-wyjścia jest wykonywana wtedy, gdy sterowanie w procesie A osiągnie instrukcję wyjścia, a w procesie B odpowiadającą jej instrukcję wejścia wówczas odbywa się spotkanie, które polega na przekazaniu ciągu wartości X

124 124 Spotkania symetryczne parę instrukcji wejścia-wyjścia można uważać za dwie części tej samej instrukcji ciąg wyrażeń w instrukcji może być pusty – taka para instrukcji nazywa się sygnałem i jest to mechanizm służący tylko do synchronizacji procesów

125 125 Spotkania symetryczne Proces A Proces B WY(5) WE(y)

126 126 CSP język do zapisywania procesów współbieżnych realizujący spotkania symetryczne oprócz zwykłej instrukcji przypisania jest możliwe przypisanie jednoczesne, wykonanie takiej instrukcji polega na równoległym obliczeniu wartości wyrażeń podanych z prawej strony, a następnie jednoczesnym przypisaniu ich odpowiadającym zmiennym z lewej strony instrukcji

127 127 Spotkania symetryczne Przykłady problemów, które można prosto rozwiązać przy użyciu spotkań symetrycznych: algorytm Ricarta i Agrawali (proces, który chce wejść do swojej sekcji krytycznej prosi o pozwolenie wszystkie pozostałe) korygowanie logicznych zegarów głosowanie centrala telefoniczna

128 128 Asymetryczne spotkania podczas spotkania mogą być wykonywane dodatkowo pewne obliczenia, przy czym mogą być one wykonywane tylko przez jeden z komunikujących się procesów, zwanym obsługującym (serwer) proces obsługujący udostępnia procesowi obsługiwanemu (klient) różne miejsca spotkań miejsca spotkań są widoczne w postaci wejść do programu obsługującego

129 129 Asymetryczne spotkania proces obsługiwany musi znać nazwę procesu obsługującego i wejście, przez które chce się z nim spotkać proces obsługujący nie zna nazwy procesu obsługiwanego spotkanie jest asymetryczne ze względu na jednostronną identyfikację partnerów oraz jednostronną aktywność podczas spotkania

130 130 Asymetryczne spotkania ten sam proces może być jednocześnie procesem obsługującym (udostępnia swoje wejścia) jak i obsługiwanym (korzysta z wejść innych procesów)

131 131 ADA powstał jako język przeznaczony głównie do programowania systemów czasu rzeczywistego opis języka: I.C.Pyle Ada, WNT jest językiem rozbudowanym o dość złożonej składni

132 132 Przestrzeń krotek krotka to ciąg danych, z których każda ma określony typ ciąg typów poszczególnym elementów krotki tworzy jej sygnaturę Przykład krotka (5,3.14,TRUE,c,20) ma sygnaturę (integer, real, boolean,char,integer)

133 133 Przestrzeń krotek typami elementów krotek mogą być także typy złożone (tablice, rekordy itp.) wszystkie procesy realizują się w środowisku zwanym przestrzenią krotek z przestrzeni tej proces pobiera dane w postaci krotek i wysyła wyniki także w formie krotek każdy proces komunikuje się tylko z otaczającą go przestrzenią nie musi wiedzieć o istnieniu innych procesów

134 134 Operacje w przestrzeni krotek operacja INPUT – realizuje pobieranie krotek z przestrzeni, pobierana jest krotka o sygnaturze zgodnej z sygnaturą ciągu parametrów tej operacji operacja OUTPUT – powoduje umieszczenie krotki w przestrzeni krotek operacja READ – ma taki sam efekt jak INPUT z tą różnicą, że przeczytana krotka nie jest usuwana z przestrzeni

135 135 Przestrzeń krotek Przykład Do pobrania krotki (5, 3.14, TRUE,c,20) można użyć następującej operacji: INPUT (i:integer, r:real, b:boolean, c:char, j:integer) Po jej wykonaniu zmienne występujące jako parametry operacji INPUT będą miały następujące wartości: i=5, r=3.14, b=TRUE, c=c, j=20

136 136 Przestrzeń krotek Proces A Proces B OUTPUT(A) INPUT(5,x:real) (6, 1.3) (5,2.71) (5,c) (A) Przestrzeń krotek

137 137 LINDA opis:D.Gelertner Generative communication in LINDA, ACM Trans.Program. Lang. and Syst., tom7, str nie jest konkretnym językiem programowania, tylko pewną ideą, której realizację można włączać do dowolnego języka programowania współbieżnego mechanizm komunikacji między procesami komunikacja w Lindzie nie narzuca żadnych powiązań między procesami ani w czasie ani w przestrzeni

138 138 Przestrzeń krotek Problemy do rozwiązania przy użyciu przestrzeni krotek: obliczanie całki oznaczonej problem ośmiu hetmanów mnożenie macierzy centrala telefoniczna

139 139 Potoki wyniki jednego programu są danymi do drugiego system operacyjny DOS zawiera mechanizm przetwarzania potokowego: p 1 |p 2 |p 3 |...|p n zapis ten oznacza, że standardowe wyjście programu p 1 będzie potraktowane jako standardowe wejście programu p 2 itd..

140 140 Potoki System MS DOS nie daje możliwości współbieżnego przetwarzania, jednak: jest to mechanizm zewnętrznie bardzo podobny do potoków w UNIX sposób programowania jest taki sam, jak dla wykonania współbieżnego

141 141 Potoki Przykłady zadań, które można rozwiązać stosując potoki: producent i konsument obliczanie współczynników rozwinięcia dwumianu Newtona porównywanie ze wzorcem problem ośmiu hetmanów

142 142 Komunikacja przez potok Proces A Proces B write(k) read(z) otop tsej ot

143 143 Pascal_C powstał w Instytucie Informatyki Uniwersytetu Warszawskiego (S.Kurpiewski Język Pascal_C,praca magisterska) jest podzbiorem języka Pascal rozszerzonym o instrukcje programowania współbieżnego: cobegin, coend, oraz o możliwość deklarowania monitorów i procesów w taki sam sposób, jak funkcje i procedury w monitorze deklaracje udostępnianych procedur poprzedza się słowem export

144 144 Concurrent Pascal jest jedną z pierwszych prób rozszerzenia Pascala o mechanizmy umożliwiające programowanie współbieżne zaproponowany przez Brinch Hansena (Brinch Hansen The programming language – Concurrent Pascal, IEEE trans of Software Eng., tom 2,str ) istnieje mozliwośc zdefiniowania specjalnego typu monitorowego i specjalnego typu procesowego

145 145 Concurrent Pascal nazwy udostępnianych procedur poprzedza się słowem entry typowi condition odpowiada typ queue kolejki procesów mogą być co najwyżej jednoelementowe, jeśli trzeba wstrzymać w monitorze więcej procesów należy użyć tablicy zadeklarowanej jako typ queue

146 146 Pascal Plus opis języka: J.Welsh i in. Pascal Plus: another langugage for modular multiprogramming, Software Practice and Experience, tom 9, str oraz D.Bustard i in. Currenr program structures, Englewood Clifs, NJ,Prentise- Hall,1988 podstawowym pojęciem jest koperta, czyli zbiór deklaracji zmiennych oraz procedur i funkcji zebranych w jednej konstrukcji programowej

147 147 Pascal Plus koperty są obiektami biernymi koperta ma takie same własności, jak monitor, z tą różnicą, że udostępniane przez nią procedury mogą być wykonywane jednocześnie przez kilka współbieżnych procesów typ condition jest standardowym monitorem o nazwie Condition możliwe jest wstrzymywanie procesów z prirytetem

148 148 Synchronizowanie metod W niektórych sytuacjach odrębne wątki współdzielą dane i muszą uwzględniać stan innych wątków Java obsługuje synchronizację metod z wykorzystaniem monitorów Monitor jest związany z konkretnym elementem danych i funkcjonuje jak blokada nałożona na te dane

149 149 Synchronizowanie metod kluczem synchronizacji w Javie jest koncepcja monitora który kontroluje dostęp do obiektów monitor działa poprzez implementację koncepcji zamykania gdy obiekt jest zamknięty przez wątek, żaden inny wątek nie ma do niego dostępu

150 150 Synchronizowanie metod gdy wątek wyjdzie z obiektu, jest on otwierany i dostępny dla innych wątków wszystkie obiekty w Javie posiadają monitor właściwość ta jest wbudowana w język Java wszystkie obiekty mogą być synchronizowane

151 151 Synchronizacja metod Kiedy wątek monitoruje element danych, nakłada na niego blokadę, która uniemożliwia innym wątkom modyfikowanie danych Użycie monitorów nie zapobiega dostępowi do obiektu przez kod, który pomija monitor

152 152 Synchronizacja Synchronizowane mogą być: Metody Synchronized void metoda(){…} Sekcje kodu – ryglowanie obiektu Synchronized(lock) {….} gdzie lock – referencja do zablokowanego obiektu

153 153 Synchronizacja metod dostęp do metod synchronizuje się poprzez słowo kluczowe synchronized synchronizowana metoda jest tworzona dzięki poprzedzeniu jej deklaracji tym słowem kluczowym

154 154 Synchronizowanie metod gdy taka metoda zostanie wywołana, wątek wywołujący wchodzi do monitora obiektu, który zamyka ten obiekt wszystkie wątki próbujące wywołać synchronizowaną metodę będącą w użyciu wejdą w stan oczekiwania dopóki obiekt nie zostanie otwarty gdy wątek opuszcza synchronizowana metodę, obiekt jest otwierany

155 155 Synchronizowanie bloku ogólna forma bloku synchronizowanego jest następująca: synchronized(obiekt){ //instrukcje synchronizowane} gdzie obiekt jest referencją do obiektu, który będzie synchronizowany

156 156 bloki synchronizowane są ogólniejsze od metod synchronizowanych, bowiem zapis każdej synchronizowanej metody: synchronized void metoda(){ //kod..} jest równoważny zapisowi: void metoda(){ synchronized(this){ //kod..}}

157 157 gdy synchronizujemy pojedyncza instrukcję, nawiasy nie są potrzebne blok synchronizowany zapewnia, że wywołanie metody będącej składnikiem obiekt zajdzie tylko wtedy, gdy wątek wywołujący wejdzie do monitora tego obiektu

158 158 Przykład synchronizacja metod synchronized int sumArray(int nums[]) { sum=0; for(int i=0; i

159 159 synchronizacja wywołania public void run() { int sum; System.out.println(thrd.getName() + "rusza"); synchronized(sa);{ answer=sa.sumArray(a);} System.out.println("Suma dla"+ thrd.getName() + "wynosi" + answer); System.out.println(thrd.getName() + "konczy"); }

160 160 Sekcja krytyczna zestaw instrukcji w programie, który ma wyłączny dostęp do jakiegoś kodu nazywamy sekcją krytyczną w Javie sekcje krytyczne wprowadza się jako bloki lub metody synchronizowane użycie sekcji krytycznych pozwala na prawidłowe współdzielenie zasobów przez wątki

161 161 Komunikacja między wątkami Java obsługuje komunikacje miedzy wątkami przy użyciu metod wait(), notify() oraz notifyAll(); metody wait(), notify() oraz notifyAll() są częścią wszystkich obiektów (są zaimplementowane przez klasę Object)

162 162 Koordynacja metody te mogą być wywoływane tylko z wnętrza synchronizowanej metody gdy wątek jest czasowo zablokowany, wtedy wywołuje metodę wait() powoduje to uśpienie wątku i zwolnienie monitora danego obiektu, dzięki czemu z obiektu może korzystać inny wątek

163 163 Koordynacja w późniejszym czasie uśpiony wątek zostaje obudzony, gdy jakiś inny wątek wejdzie do tego samego monitora i wywoła notify() lub notifyAll() wywołanie notify() wznowi jeden wątek wywołanie notifyAll() wznowi wszystkie watki, spośród których dostęp do obiektu uzyska te o najwyższym priorytecie

164 164 Koordynacja działań wątków Koordynacja działań wątków sprowadza się do następujących kroków: wątek wywołuje metodę wait() na rzecz danego obiektu, gdy oczekuje, że się ma coś z obiektem zdarzyć (zmiana stanu obiektu przez inny wątek)

165 165 wywołanie wait() blokuje wątek (jest on odsuwany od procesora) a jednocześnie powoduje otwarcie rygla (odblokowanie) zajętego przez niego obiektu, umożliwiając dostęp do obiektu z sekcji krytycznych innych wątków

166 166 wait() może być wywoływane tylko z sekcji krytycznej, bowiem chodzi tu o współdziałanie wątków na tym samym ryglowanym obiekcie inny wątek może teraz zmienić stan obiektu i powiadomić o tym wątek czekający (za pomocą metody notify() lub notifyAll() )

167 167 odblokowanie (przywrócenie gotowości działania i ewentualne wznowienie działania wątku ) następuje, gdy inny wątek wywoła metodę notify() lub notifyAll() na rzecz tego samego obiektu, na którym dany wątek czeka (na rzecz którego wywołał metodę wait() )

168 168 metoda notifyAll() odblokowuje wszystkie czekajace na danym obiekcie wątki wywołanie notify() lub notifyAll() musi być także zawarte w sekcji krytycznej

169 169 działanie metod wait(), notify(), notifyAll() zawsze są związane z konkretnymi obiektami jednocześnie działanie tych metod dotyczy wątków (czyli zazwyczaj innych obiektów) które na tych konkretnych obiektach operują

170 170 Formy metody wait() zdefiniowanej w klasie Object final void wait() throws InterruptedException ta forma czeka do powiadomienia final void wait(long milisekundy) throws InterruptedException czeka na powiadomienie przez określony czas w milisekundach

171 171 Formy metody wait() zdefiniowanej w klasie Object final void wait(long milisekundy,long nanosekundy) throws InterruptedException dodatkowo pozwala na podanie czasu w nanosekundach ogólne formy final void notify(); final void notifyAll();

172 172 Stany wątków Wątek może znajdować się w czterech stanach: New Thread Runnable NotRunnable Dead

173 173 Stany wątków stan New Thread powstaje w momencie stworzenia obiektu- wątku do stanu Runnable wątek przechodzi po wywołaniu metody start(), która z kolei wywołuje metodę run()

174 174 stan Runnable niekoniecznie oznacza, że wątek jest aktualnie wykonywany jest to raczej potencjalna gotowość do działania, czy system operacyjny akurat przydzieli temu wątkowi czas procesora zależy od wielu czynników (jaki jest schemat zarządzania wątkami, jakie są ich priorytety itp.)

175 175 NotRunnable do stanu NotRunnable wątek przechodzi na skutek: wywołania metody sleep(usypiającej wątek) – powrót do stanu Runnable po upływie podanego czasu wywołania metody wait() (watek czeka na powiadomienie o jakimś zdarzeniu), powrót do stanu Runnable po tym, jak jakiś inny obiekt powiadamia wątek o wystąpieniu zdarzenia za pomocą metody notify() lub notifyAll()

176 176 NotRunnable blokowania na operacjach wejścia – wyjścia, powrót do stanu Runnable po zakończeniu operacji blokowanie na obiekcie z zamkniętym ryglem – oczekiwanie na zakończenie działania innego wątku

177 177 wątek kończy działanie na skutek zakończenia metody run() i przechodzi do stanu Dead mimo, iż nadal może istnieć obiekt oznaczający wątek, ponowne użycie wobec niego metody start() jest niedozwolone (w Javie wątki nie są restartowalne ) aby ponownie uruchomić wątek należy stworzyć nowy obiekt i zastosować metodę start()

178 178 Koniec pracy wątku klasa Thread dostarcza dwóch metod: wywołana na rzecz wątku metoda final boolean isAlive() zwraca true, jeżeli wątek wciąż działa, w przeciwnym razie false metoda final void join() throws InterruptedException czeka, aż wątek na którego rzecz została wywołana, zakończy się

179 179 Priorytet wątków każdy wątek posiada swój priorytet wątki o dużym priorytecie posiadają potencjalnie większy dostęp do procesora gdy uruchamiany jest wątek potomny, jego priorytet jest taki sam jak priorytet rodzica

180 180 Priorytet wątków priorytet wątku można zmienić wywołując metodę final void setPriority (int poziom) gdzie poziom określa nowy poziom priorytetu dla wątku wywołującego aby ustawić wątek z powrotem na domyślny priorytet, należy podać NORM_PRIORITY

181 181 Priorytet wątków poziom musi się znajdować w zakresie od MIN_PRIORITY do MAX_PRIORITY aktualnie, wartości te wynoszą odpowiednio 1 oraz 10 pobrać aktualny poziom priorytetu można za pomocą metody final int getPriority()

182 182 Architektury równoległe Jeden system operacyjny Każdy węzeł ma własny system Przełącznik sieciowy

183 183 Architektury równoległe Komputery równoległe składają się z wielu rozłącznych elementów przetwarzających, które współpracują ze sobą działając współbieżnie. Istotne jest co robi każdy ze składników oraz komunikacja miedzy nimi

184 184 Architektury równoległe SMP (Symmetric Multiprocesor) – maszyny, w których wszystkie procesory korzystają z tej samej pamięci operacyjnej DMP (Distributed Memory Processing) – systemy z pamięcią rozproszoną (w tej architekturze każdy z procesów – węzłów dysponuje własną pamięcią operacyjną, o tej architekturze są także systemy klastrowe) NUMA (Non-Uniform Memory Access) – jest maszyną DMP złożoną z węzłów SMP (w niej każdy obszar pamięci ma inny czas dostępu) COW (Cluster of Workstation)

185 185 Komputery równoległe Z uwagi na zastosowany sposób przetwarzania danych komputery równoległe można podzielić na trzy grupy charakteryzujące się: równoległością danych(oddzielne procesory wykonują ten sam program na różnych segmentach danych) równoległością sterowania (oddzielne procesory wykonują ten sam program, ale każdy ma przypisany inny ciąg obliczeń) równoległością zadań (każdy procesor ma przydzieloną sobie inną część tego samego programu do wykonania )

186 186 System rozproszony (ang. distributed system) jest zbiorem samodzielnych komputerów połączonych za pomocą sieci i wyposażonych w rozproszone oprogramowanie systemowe Oprogramowanie systemu rozproszonego umożliwia komputerom koordynowanie ich działań oraz dzielenie zasobów systemu: sprzętu, oprogramowania i danych.

187 187 Własności decydujące o użyteczności systemu rozproszonego 1. dzielenie (wspólne użytkowanie) zasobów 2. otwartość 3. współbieżność 4. skalowalność 5. tolerowanie uszkodzeń 6. przezroczystość

188 188 Dzielenie zasobów Modele systemów rozproszonych: model klient – serwer : wszystkie zasoby dzielone są utrzymywane i zarządzane przez procesy serwerów model oparty na obiektach : za obiekt uważa się każdy zasób dzielony, proces żądający dostępu do zasobu wysyła komunikat do odpowiedniego obiektu

189 189 Model klient - serwer K S KKKKKKK SSS proces klienta proces serwera

190 190 Model oparty na obiektach U O Z UUUUU O Z O Z O Z obiekt i zarządca użytkownik obiektu

191 191 Otwartość systemu komputerowego charakteryzuje jego zdolność do rozszerzania różnymi sposobami. jest określona przede wszystkim przez możliwości dodawania nowych usług dzielenia zasobów bez naruszania lub podwajania usług już istniejących

192 192 Otwartość systemu rozproszonego systemy otwarte charakteryzują się tym, że dane na temat ich kluczowych interfejsów są podawane do powszechnej wiadomości opierają się na mechanizmie jednolitej komunikacji międzyprocesorowej i upowszechnionych interfejsach dostępu do zasobów wspólnych

193 193 Współbieżność W systemie rozproszonym opartym na modelu dzielenia zasobów istnieją dwie sytuacje, w których występują działania równoległe: wielu użytkowników jednocześnie wydaje polecenia lub współpracuje z programami użytkowymi wiele procesów serwerów działa współbieżnie, odpowiadając na zamówienia pochodzące od procesów różnych klientów

194 194 Współbieżność Współbieżność wykonywania w systemach rozproszonych jest wynikiem osobnych działań użytkowników, niezależności zasobów i rozmieszczenia procesów usługowych w oddzielnych komputerach.

195 195 Skalowalność Zakłada się, że żaden pojedynczy zasób nie występuje w formie ograniczonej Ze wzrostem zapotrzebowania powinno być możliwe rozszerzanie systemu tak, aby mógł je spełnić.

196 196 Tolerowanie uszkodzeń Dwa podejścia, na których opierają się systemy komputerowe tolerujące uszkodzenia: redundancja sprzętowa – użycie nadmiarowych składowych odtwarzanie programowe – zaprojektowanie programów do usuwania skutków uszkodzeń

197 197 Przezroczystość Przezroczystość -ukrywanie przed użytkownikiem i programistą aplikacji oddzielności składowych Przezroczystość dostępu (umożliwia dostęp do lokalnych i odległych obiektów informacji za pomocą identycznych działań) Przezroczystość położenia (umożliwia dostęp do obiektów informacji bez znajomości ich lokalizacji) Nazywa się je wspólnie przezroczystością sieci

198 198 Przezroczystość Przykład 6: Występowanie przezroczystości sieci: użycie adresu poczty elektronicznej, np. wysyłanie poczty nie wymaga znajomości jego fizycznego lub sieciowego położenia – przezroczystość położenia procedura wysyłania komunikatu pocztowego nie zależy od położenia odbiorcy – przezroczystość dostępu

199 199 Komunikacja między procesami Składowe systemu rozproszonego są rozłączne zarówno logicznie, jak i fizycznie i muszą się komunikować aby mogły współdziałać.

200 200 Komunikacja miedzy procesami Mechanizm komunikacji może być: synchroniczny – inaczej z blokowaniem, czyli nadawca czeka po wysłaniu komunikatu do czasu, aż odbiorca wykona operację odbioru asynchroniczny – inaczej bez blokowania, co znaczy, że komunikat jest umieszczany w kolejce komunikatów oczekujących na przyjęcie przez odbiorcę, a proces nadawczy może kontynuować działanie natychmiast.

201 201 Schemat komunikacji synchronicznej proces, który chce wysłać komunikat czeka aż inny proces będzie chciał go odebrać proces, który chce odebrać komunikat czeka, aż inny proces będzie chciał go wysłać przekazanie komunikatu może się odbyć jedynie przy udziale zainteresowanych procesów ( bez pośrednika)

202 202 Schemat komunikacji asynchronicznej proces, który chce wysłać komunikat nie czeka, aż ktoś będzie chciał go odebrać, tylko umieszcza go w buforze proces, który chce odebrać komunikat czeka, aż będzie dla niego komunikat lub kończy odbiór komunikatu sygnalizując błąd

203 203 Cechy komunikacji asynchronicznej wysyłanie komunikatu nie wstrzymuje nadawcy (z pewnymi wyjątkami) wysłane i jeszcze nie odebrane komunikaty są przechowywane w buforze bufor może być nieograniczony lub ograniczony; próba wysłania komunikatu do pełnego bufora może kończyć się błędem lub wstrzymaniem procesu wysyłającego odbieranie komunikatów może zakończyć się wstrzymaniem nadawcy (wersja blokująca) lub błędem (wersja nieblokująca)

204 204 Komunikacja miedzy procesami systemy asynchroniczne używają przepływu danych w jedną stronę (nadawca może wysłać komunikat i kontynuować zadanie, odbiorca wysyła odrębny komunikat) systemy synchroniczne tworzą kanał komunikacyjny między dwoma procesami

205 205 Komunikacja między procesami Istotną różnicą między tymi dwoma schematami jest potrzeba buforowania komunikatów. komunikacja asynchroniczna: nadawca może wysłać wiele komunikatów, zanim odbiorca je odbierze z kanału komunikacyjnego, zatem musi być możliwość buforowania nieograniczonej liczby komunikatów ( jeśli liczba komunikatów w buforze jest ograniczona nadawca zostaje wstrzymany)

206 206 Komunikacja między procesami komunikacja synchroniczna: w dowolnym momencie w kanale jest co najwyżej jeden komunikat, zatem buforowanie jest zbędne

207 207 Przykład 7 Różnica między systemem telefonicznym a pocztowym. rozmowa telefoniczna synchronizuje działania dzwoniącego i osoby odbierającej telefon, problemy związane z synchronizacja powodują np. sygnały zajętości, nieodbieranych telefonów itp. do skrzynki pocztowej można wrzucać dowolną ilość listów, odbiorca zaś może przejrzeć pocztę w dowolnym momencie – brak synchronizacji

208 208 Sposoby adresowania komunikatów identyfikacja symetryczna – komunikujące się procesy znają swoje nazwy identyfikacja asymetryczna – jedna ze stron nie wie z kim się komunikuje, charakterystyczna dla architektury klient – serwer komunikat może być wysłany po konkretnym kanale komunikacyjnym – wysyłający nie musi wiedzieć do kogo trafi komunikat

209 209 Komunikacja miedzy procesami Schematy komunikacji najczęściej stosowane w systemach rozproszonych: model komunikacji klient-serwer służący do komunikacji między parami procesów model komunikacji na zasadzie rozsyłania grupowego przydatny w łączności między grupami współpracujących procesów

210 210 Komunikacja klient - serwer KLIENT (zablokowany) SERWER 2.przetwarzanie 1. zamówienie 3. odpowiedź

211 211 Rozsyłanie grupowe Wysyłanie do grupy odbierz P2 P3 P4 P1

212 212 Rozsyłanie grupowe Komunikację w trybie rozsyłania grupowego można uzasadnić następującymi przykładami: 1. Odnajdywanie obiektu 2. Tolerowanie uszkodzeń 3. Zwielokrotnione aktualizacje

213 213 Komunikacja grupowa Przykład 8: Prosty kantor kupiecki, który można stworzyć za pomocą dwóch różnych zadań: proces dostawcy informacji wciąż obiera nowe dane handlowe z pojedynczego źródła i przekazuje do wszystkich kupców, którzy zgłosili zainteresowanie danym towarem (dla każdego zewnętrznego źródła będzie działał osobny proces dostawcy informacji)

214 214 Komunikacja grupowa proces kupiecki jest tworzony wtedy, gdy użytkownik zamówi informacje o jakimś towarze – proces kupiecki zgłasza zapotrzebowanie na wiadomości u dostawcy informacji i po dokonaniu tego odbiera wszystkie wysyłane do niego informacje i wyświetla użytkownikowi (dla każdego towaru potrzebnego użytkownikowi jest wymagany osobny proces kupiecki)

215 215 Komunikacja grupowa stacja robocza źródło zewnętrzne K K K K K K K K dostawca informacji 2 dostawca informacji 1 źródło komunikatu

216 216 Programowanie rozproszone Wysyłanie komunikatu jest akcją wyższego poziomu, która może być łatwo zaimplementowana na fizycznie rozproszonych procesorach, stąd nazwa nadana tej dziedzinie: programowanie rozproszone lub przetwarzanie rozproszone.

217 217 Komunikacja miedzy procesami Sposoby organizowania komunikacji miedzy identyczne działającymi procesami: rozgłaszanie (broadcasting) bicie serca (heartbeating) przekazywanie żetonu (token passing) wspólny worek (common bag)

218 218 Komunikacja miedzy procesami Rozgłaszanie to rozsyłanie tego samego komunikatu do wszystkich procesów

219 219 Komunikacja miedzy procesami Bicie serca polega na wielokrotnym wykonaniu czynności: wysłanie informacji do procesów sąsiednich odebranie od nich odpowiedzi przetworzenie odpowiedzi ponowne rozesłanie informacji

220 220 Komunikacja miedzy procesami Przekazywanie żetonu jest techniką stosowaną głównie do synchronizacji procesów w systemach rozproszonych. Żeton jest pewnym wyróżnionym komunikatem kolejno przekazywanym miedzy procesami tworzącymi zamknięty pierścień

221 221 Komunikacja miedzy procesami Wspólny worek zawiera zbiór komunikatów z opisem i parametrami działań do wykonania. Każdy proces pobiera taki komunikat, wykonuje działanie i wynik wkłada z powrotem do worka. Wyróżniony proces wkłada do worka komunikaty inicjujące i pobiera z niego wyniki.

222 222 Problem pięciu filozofów Najbardziej znany przykład nieustającej współbieżności ilustrujący wiele zagadnień synchronizacji i współpracy. Problem jest wzorcem wielu sytuacji z zakresu programowania współbieżnego i rozproszonego, np. współzawodnictwo wielu procesorów o pewne zasoby dzielone w komputerowych systemach operacyjnych.

223 223 Problem pięciu filozofów F 5 F 1 F 2 F 3 F 4 W 1 W 5 W 4 W 3 W 2

224 224 Problem pięciu filozofów Rozwiązanie z możliwością blokady Zgłodniały filozof czeka aż będzie wolny lewy jego widelec, podnosi go i następnie czeka, aż będzie wolny prawy widelec i także go podnosi. Po najedzeniu się odkłada oba widelce na stół.

225 225 Problem pięciu filozofów Blokada – gdy każdy chwyci w tym samym momencie swój lewy widelec i będzie czekał aż jego prawy sąsiad skończy jeść i odłoży widelec. Typowy przykład zjawiska blokady, w której uczestniczą wszystkie współdziałające procesy.

226 226 Problem pięciu filozofów Semafor binarny Widelec[i] reprezentuje widelec o numerze i Podniesienie widelca – opuszczenie semafora Odłożenie widelca – podniesienie semafora Wartości początkowe: For i:=1 to 5 do Widelec[i]:=1;

227 227 Problem pięciu filozofów Proces Filozof(i); begin j:=(i+1) mod 5; while true do begin myślenie; pobierz(Widelec[i]); pobierz(Widelec[j]); jedzenie; odłóż(Widelec[i]); odłóż(Widelec[j]); end;

228 228 Problem pięciu filozofów Rozwiązanie poprawne Sami filozofowie nie są w stanie rozwiązać problemu odżywiania, jeśli będą obstawać przy tym, aby żaden z nich nie był wyróżniony. Potrzebny jest zewnętrzny arbiter rozstrzygający, którzy filozofowie będą mieli pierwszeństwo w spornych przypadkach.

229 229 Problem pięciu filozofów Semafor Lokaj dopuszcza co najwyżej czterech filozofów do współzawodnictwa o widelce. Początkowe wartości: For i:=1 to 5 do Widelec[i]:=1; Lokaj:=4;

230 230 Problem pięciu filozofów Proces Filozof(i); beginj:=(i+1)mod 5; while true do begin myślenie; Podnieś(Lokaj); Pobierz(Widelec[i]);Pobierz(Widelec[j]); jedzenie; Odłóż(Widelec[i]);Odłóż(Widelec[j]); end;

231 231 Problem pięciu filozofów Rozwiązanie z możliwością zagłodzenia Filozof podnosi jednocześnie oba widelce, gdy tylko są wolne. Blokada nie wystąpi – jeśli podniesie widelce, to w skończonym czasie je odłoży. Zagłodzenie – jeśli zawsze któryś z sąsiadów będzie jadł.

232 232 Problem pięciu filozofów Dla każdego filozofa jest zapamiętane ile leżących przy nim widelców jest wolnych – tablica Wolne[i], i=0..4. Do wstrzymywania każdego procesu stosowana jest tablica Filozof[i], i=0..4

233 233 Problem pięciu filozofów Monitor: Proces, zgłaszając żądanie przydziału widelców, podaje swój numer – na jego podstawie można stwierdzić, czy oba widelce są wolne (tablica Wolne). Jeśli nie, to proces jest wstrzymywany (tablica Filozof) – dzięki temu po odłożeniu przez jednego widelców można próbować wznowić tylko jego sąsiadów

234 234 Problem pięciu filozofów Wartości początkowe: For i:=0 to 4 do begin Wolne[i]:=2; Filozof[i]:=0; end;

235 235 Problem pięciu filozofów Procedury monitora procedure Biorę(i: integer); begin while Wolne[i]<2 do czekaj(Filozof[i]) Wolne[(i+5)mod 5]:=Wolne[(i+5)mod 5]-1; Wolne[(i+1)mod 5]:=Wolne[(i+1)mod 5]-1; end;

236 236 Problem pięciu filozofów procedure Odkładam(i:integer); begin Wolne[(i+5)mod 5]:=Wolne[(i+5)mod 5]+1; Wolne[(i+1)mod 5]:=Wolne[(i+1)mod 5]+1; Próbuj(Filozof[(i+5)mod 5]); Próbuj(Filozof[(i+1)mod 5]); end;

237 237 Problem pięciu filozofów Bardziej efektywne Odkładam: procedure Odkładam(i:integer); Wolne[(i+5)mod 5]:=Wolne[(i+5)mod 5]+1; Wolne[(i+1)mod 5]:=Wolne[(i+1)mod 5]+1; if Wolne[(i+5)mod 5] =2 then Próbuj(Filozof[(i+5)mod 5]); if Wolne[(i+1)mod 5] =2 then Próbuj(Filozof[(i+1)mod 5]); end;

238 238 Mechanizmy wysokopoziomowe w językach programowania współbieżnego Mechanizmy komunikacji i synchronizacji: semafory monitory (Pascal_C, Concurrent Pascal, Pascal Plus i in.) spotkania - mogą być symetryczne (dwoje ludzi - CSP) i asymetryczne (wizyta klienta w zakładzie naprawczym - Ada) przestrzeń krotek - nie trzeba znać ani dostawców ani odbiorców informacji (Linda) potoki (DOS) komunikaty i kanały (Unix)

239 239 Semafory były pierwszym mechanizmem synchronizacyjnym stosowanym w językach wysokiego poziomu oprócz określenia jego stanu początkowego można na nim wykonywać tylko dwie operacje : podniesienie semafora (wait) i opuszczenie semafora (signal) rodzaje semaforów: ogólny i binarny

240 240 Zasada działania semafora opuszczenie semafora S, to wykonanie instrukcji: jeśli S>0, to S:=S-1 w przeciwnym razie wstrzymaj działanie procesu wykonującego tą operację podniesienie semafora s, to wykonanie instrukcji: jeśli są procesy wstrzymane w wyniku wykonania operacji opuszczania semafora s, to wznów jeden z nich, w przeciwnym razie S:=S+1

241 241 Schemat synchronizacji przy pomocy semafora Proces A Proces B S:=S-1 S=0 signal(S) S:=S+1 ktoś czeka wait(S)

242 242 Semafory Ponieważ operacje podniesienia i opuszczenia semafora są niepodzielne, w danej chwili tylko jeden proces może badać stan semafora S i ewentualnie zmniejszyć lub zwiększyć jego wartość

243 243 Ograniczenia nie można wykonywać na nim działań arytmetycznych brak informacji o tym ile procesów zostało wstrzymanych na danym semaforze często trzeba oprócz semafora wprowadzać zmienne pomocnicze (całkowite) programista musi sam zadbać, aby zmienne te były odpowiednio modyfikowane wszelkie operacje na tych zmiennych muszą być sekcja krytyczną

244 244 Semafory Problemy, które można poprawnie rozwiązać za pomocą semaforów: wzajemne wykluczanie dwóch procesów producenci i konsumenci czytelnicy i pisarze pięciu filozofów przejazd przez wąski most gra w łapki

245 245 Monitory koncepcja monitora powstała w wyniku poszukiwań strukturalnego mechanizmu do synchronizacji procesów monitor to zebrane w jednej konstrukcji programowej pewne wyróżnione zmienne oraz procedury i funkcje działające na tych zmiennych część tych procedur i funkcji jest udostępniana na zewnątrz monitora

246 246 Monitory tylko wywołanie udostępnionych funkcji i procedur monitora umożliwia procesom dostęp do zmiennych ukrytych wewnątrz monitora wykonanie procedury monitora jest sekcją krytyczna wykonującego ją procesu istnieje możliwość wstrzymywania i wznawiania procesów wewnątrz procedury monitorowej służą do tego specjalne zmienne typu condition

247 247 Przejście procesu przez monitor Proces A M.P(y) Monitor M procedure P(x:real); begin …. wait(C); …… signal(C); …. end; procesy oczekujące na wejście procesy oczekujące na C procesy wstrzymane po signal

248 248 Monitory Problemy, które mogą być poprawnie rozwiązane przy pomocy monitorów: producenci i konsumenci z losową wielkością pobieranych i wstawianych porcji prom jednokierunkowy trzy drukarki stolik dwuosobowy

249 249 Pascal_C powstał w Instytucie Informatyki Uniwersytetu Warszawskiego (S.Kurpiewski Język Pascal_C,praca magisterska) jest podzbiorem języka Pascal rozszerzonym o instrukcje programowania współbieżnego: cobegin, coend, oraz o możliwość deklarowania monitorów i procesów w taki sam sposób, jak funkcje i procedury w monitorze deklaracje udostępnianych procedur poprzedza się słowem export

250 250 Concurrent Pascal jest jedną z pierwszych prób rozszerzenia Pascala o mechanizmy umożliwiające programowanie współbieżne zaproponowany przez Brinch Hansena (Brinch Hansen The programming language – Concurrent Pascal, IEEE trans of Software Eng., tom 2,str ) istnieje mozliwośc zdefiniowania specjalnego typu monitorowego i specjalnego typu procesowego

251 251 Concurrent Pascal nazwy udostępnianych procedur poprzedza się słowem entry typowi condition odpowiada typ queue kolejki procesów mogą być co najwyżej jednoelementowe, jeśli trzeba wstrzymać w monitorze więcej procesów należy użyć tablicy zadeklarowanej jako typ queue

252 252 Tworzenie gniazd gniazdo spełniające rolę klienta stara się nawiązać połączenie ze zdalnym gniazdem serwera (musi znać IP, lub nazwę hosta, numer portu na którym serwer nasłuchuje) po zlokalizowaniu gniazda serwera klient wysyła żądanie nawiązania komunikacji gdy serwer zaakceptuje żądanie klienta, przesyła do niego specyfykację nowego gniazda (które zrealizuje połączenie po jego stronie) klient kończy fazę nawiązania połączenia (może się rozpocząć wymiana danych)

253 253 Tworzenie gniazd na karcie Internet są dostępne dwa komponenty TClientSocket oraz TSerwerSocket rola gniazda serwera polega na stałym oczekiwaniu i obsłudze żądań nawiązania komunikacji otrzymywanych od gniazd klienckich jeśli serwer akceptuje dane połączenie, wówczas tworzy specjalne gniazdo, które będzie odpowiedzialne za komunikację z klientem nasłuchujące gniazdo serwera nadal biernie oczekuje na nadchodzące żądania

254 254 Linie papilarne porównywanie całych odcisków palców nie jest skutecznym sposobem wyszukiwania podobnego wzorca w bazie danych, gdyż drobne przesunięcia lub inne prawie niewidoczne zmiany powodowałyby drastyczną zmianę wyniku porównania.

255 255 Linie papilarne na podstawie badań stwierdzono, że w celu usunięcia takiej sytuacji przy jednoczesnym zachowaniu wiarygodności otrzymywanych wyników wystarczy porównywać istnienie i położenie pewnych cech odcisków zwanych punktami charakterystycznymi

256 256 Linie papilarne punkty charakterystyczne odcisku są to miejsca zakończeń i rozwidleń linii papilarnych, na podstawie których można z dużym prawdopodobieństwem jednoznacznie określać tożsamość osoby o danym odcisku już około 16 punktów charakterystycznych wystarczy do jednoznacznego określenia przynależności badanego odcisku do konkretnej osoby

257 257 Linie papilarne dla uproszczenia założono, że grubość linii papilarnych wynosi 1 piksel

258 258 Linie papilarne założono, że odciski w bazie są dobrze zorientowane i użytkownik wprowadzając wzorzec również dokonuje wstępnej obróbki do odpowiedniego formatu dopuszcza się, że po takich zmianach odcisk nie będzie w stu procentach dobrze sformatowany i granica błędu mierzona w pikselach podawana jest jako parametr funkcji obliczającej zgodność punktów charakterystycznych

259 259 Linie papilarne Schemat działania dla jednego procesora: najpierw pobierz wzorzec, potem wyszukaj punkty charakterystyczne i zapamiętaj wynik należy już kolejno pobierać odciski z bazy, wyszukiwać w nich punkty charakterystyczne, a następnie porównywać z wzorcem.

260 260 Linie papilarne Wyszukiwanie punktów charakterystycznych przy przyjętych założeniach sprowadza się do: zbadania otoczenia punktu podejrzanego o bycie punktem charakterystycznym rozpatrzeniu kilkunastu możliwości przy założonej grubości linii równej 1 piksel, otoczeniem jest tablica o wymiarach 3*3, więc sprawdzenie wszystkich możliwości jest bardzo szybkie.

261 261 Linie papilarne Porównywanie polega na: badaniu, czy dla punktu charakterystycznego z wzorca A istnieje punkt charakterystyczny w odpowiadającym mu obszarze (co do dokładności podanej przez użytkownika) we wzorcu B na podstawie tych porównań tworzona jest charakterystyka zgodności odcisków, która za pomocą jednej z wielu możliwych interpretacji (minimum, maksimum, zgodność w dwie strony, itp) przekształcana jest na wartość procentową zgodności odcisków.

262 262 Linie papilarne potrzeba zrównoleglenia kryje się w rozmiarach bazy danych porównanie wzorca z względnie małą ( odcisków) bazą danych trwa bardzo krótko nawet dla jednego procesora gdy tych odcisków jest wiele setek tysięcy (bądź milionów), wtedy to sprawdzanie trwałoby kilka godzin,

263 263 Przykładowy wynik działania aplikacji: punkty niebieskie- rozwidlenia, zielone- punkty końcowe

264 264 Linie papilarne dwie metody kolejkowania: "dyktatura" - gdy jeden z procesorów zajmuje uprzywilejowaną pozycję i nie zajmuje się obliczeniami tylko kieruje pracami pozostałych, mankamentem modelu jest bardzo obciążony system komunikacji między procesorami

265 265 Linie papilarne "demokracja" - każdy procesor otrzymuje tyle samo pracy do wykonania, niedogodnością może być nierówna praca poszczególnych procesorów, a przez to wydłużenie czasu działania programu (program pracuje z szybkością najwolniejszego procesora).

266 266 Linie papilarne prezentowany jest czas przetwarzania w zależności od zastosowanego modelu kolejkowania oraz wykorzystywanej liczby procesorów w doświadczeniu jako wzorzec został wzięty nieznacznie przerobiony odcisk znajdujący się w bazie wszystkie próby zostały wykonane dla tego samego odcisku.

267 267 Uzyskane wyniki przedstawia następujący wykres

268 268 Linie papilarne dla demokracji minimalne czasy działania nie maleją wraz ze wzrostem liczby procesorów tylko są funkcją nieciągłą prawdopodobną przyczyną takiego stanu rzeczy jest to, że komputer jest wykorzystywany także do innych celów i ten projekt w niektórych momentach musiał ustąpić pola innym zadaniom

269 269 Linie papilarne dla dyktatury możemy zauważyć zwiększenie wydajności programu wraz ze zwiększaniem liczby procesorów największy wzrost wydajności ma miejsce przy niskiej liczbie procesorów po przekroczeniu liczby czterech procesorów wzrost wydajności gwałtownie maleje i przy dalszym zwiększaniu utrzymuje się na prawie stałym poziomie

270 270 Linie papilarne powodem tego jest to, że dużą część działania algorytmu pochłaniają operacje wejścia/wyjścia (wczytywanie odcisków) prawdopodobnie system ma ograniczone możliwości zwielokrotniania operacji dostępów do dysków, gdyż jest nastawiony na wykonywanie obliczeń nie może zatem w efektywny sposób obsłużyć zwiększającej się liczby odwołań do dysku, co skutkuje ustaleniem wydajności na w miarę stałym poziomie.

271 271 Linie papilarne demokracja jest zdecydowanie lepsza dla mniejszej liczby procesorów, pozwala lepiej gospodarować mocą obliczeniową procesorów wraz ze zwiększaniem liczby procesorów przewaga maleje i dla większej liczby przewagę ma dyktatura w demokracji wszystkie procesory muszą bowiem czekać na najwolniejszego, powoduje to obniżenie wydajności tej strategii.

272 272 Izomorficzność grafu. Implementacja na maszynie równoległej algorytmu równoległego sprawdzającego izomorficzność grafu Graf G jest izomorficzny z grafem H jeśli istnieje takie, różnowartościowe i na, przyporządkowanie wierzchołków grafu H wierzchołkom grafu G, że jeśli jakieś dwa wierzchołki są połączone krawędzią w jednym z grafów, to odpowiadające im wierzchołki w drugim grafie również łączy krawędź

273 273 Macierz przyległości macierz przyległości M przedstawia ilość ścieżek długości 1 pomiędzy każdymi dwoma wierzchołkami w G natomiast suma i -tego wiersza w macierzy M to stopień wierzchołka V i.

274 274 Potęga macierzy przyległości macierz M k ( 1kn ) przedstawia ilość ścieżek długości k pomiędzy każdymi dwoma wierzchołkami natomiast suma i -tego wiersza w macierzy M k to ilość ścieżek długości k (stopień k -ścieżek) rozpoczynających się w wierzchołku V i.

275 275 Algorytm 1. Główny procesor przesyła macierze A i B do p procesorów 2. for k1 to parallel-do for ik to n step p do if (otrzymałem exit) then return false CA i, DB i if (test( C, D )=false) then wyślij exit do innych procesów return false if ( i>n ) then print kończe działanie

276 276 Algorytm 3. If (wszystkie procesory skończyły pomyślnie) then return true Funkcja test(C,D) zwraca: true - kiedy istnieje taka funkcja f:CD false - w przeciwnym przypadku

277 277 Pomiar prędkości algorytmu dla grafów o 180 wierzchołkach

278 278 Algorytmy ALGORYTM CENTRALNEGO SERWERA stworzenie serwera koordynującego (udzielającego pozwoleń) wejście procesów do sekcji krytycznej jest jedną z podstawowych i najprostszych metod realizacji wzajemnego wykluczania w środowisku rozproszonym przy założeniu, że istnieje tylko jedna sekcja krytyczna, proces, który chce wejść do zasobu dzielonego wysyła do serwera komunikat z zamówieniem i oczekuje na odpowiedź, często porównywaną do otrzymania żetonu dającego prawo do wejścia

279 279 ALGORYTM CENTRALNEGO SERWERA w sytuacji gdy sekcja krytyczna jest pusta serwer natychmiast "wręcza" procesowi żeton, a proces może wejść do sekcji jeżeli żeton jest w posiadaniu innego procesu (żeton jest tylko jeden - spełnienie warunku, że w sekcji może w danej chwili znajdować się tylko jeden proces), wówczas proces zamawiający jest ustawiany w kolejce serwera

280 280 ALGORYTM CENTRALNEGO SERWERA wychodząc z sekcji krytycznej każdy z procesów zwraca żeton serwerowi, wysyłając jednocześnie komunikat o opuszczeniu sekcji w przypadku gdy serwer udostępnia wejście do sekcji procesom znajdującym się w kolejce (w danej chwili tylko pierwszemu z nich), wówczas kieruje się priorytetem najstarszego wpisu pozwolenie na wejście uzyskuje proces, który ustawi się w kolejce najwcześniej

281 281 ALGORYTM CENTRALNEGO SERWERA widać sytuację, w której w sekcji krytycznej znajduje się proces P3 (jest w posiadaniu żetonu), proces P4 wysłał już zamówienie żetonu do serwera wcześniej, natomiast proces P2 wysyła właśnie zamówienie na żeton

282 282 ALGORYTM CENTRALNEGO SERWERA Kolejny krok algorytmu pokazuje zachowanie się poszczególnych procesów oraz żetonu. Proces P2 ustawił się w kolejce lokalnej serwera, żeton został zwrócony i natychmiast zostanie przekazany procesowi zamawiającemu najwcześniej, tzn. procesowi P4

283 283 ALGORYTM CENTRALNEGO SERWERA proces P4 znajduje się w sekcji, na początku kolejki znalazł się proces P2, a kolejne procesy mogą wysyłać zamówienia

284 284 ALGORYTM CENTRALNEGO SERWERA algorytm ten spełnia warunki wymienione jako warunki wzajemnego wykluczania. jednak system z zastosowaniem pojedynczego serwera jest podatny na awarie bardzo brzemienne w skutkach ze względu na to, że przez serwer przechodzą wszystkie operacje, jego uszkodzenie może być bardzo niebezpieczne dla całego systemu z tego powodu opisany algorytm jest jedynie obrazem przedstawiającym podstawy realizacji wzajemnego wykluczania i nie jest stosowany w rozwiązaniach systemów rozproszonych

285 285 Algorytm Lamporta spełnia warunki bezpieczeństwa, ruchu i uporządkowania algorytm zakłada, że wszystkie procesy w systemie posiadają lokalną kolejkę przechowującą komunikaty żądania innych procesów oraz znacznik czasu wysyłając komunikat, każdy proces zaopatruje go w numer dający informację, z którego procesu wysłano komunikat oraz w znacznik czasu w celu właściwego ich odbioru i interpretacji przy udzielaniu pozwolenia wejścia do sekcji proces, który chce wejść do sekcji krytycznej, tworzy komunikat żądania, który oprócz tego, że jest wysyłany do innych procesów, jest także umieszczany w kolejce procesu wysyłającego żądanie

286 286 Algorytm Lamporta komunikat taki ma swój znacznik czasu proces odbierający żądanie natychmiast wysyła odpowiedź ze znacznikiem czasu, a przybyłe żądanie umieszcza w swojej kolejce proces wysyłający żądanie będzie mógł wejść do sekcji krytycznej jeżeli jego komunikat będzie znajdował się na początku kolejki procesu wysyłającego oraz gdy jego komunikat zostanie odebrany przez inne procesy, a otrzymana odpowiedź będzie miała większy znacznik czasu od znacznika czasu żądania po opuszczeniu sekcji krytycznej proces usuwa własny numer z kolejki i zawiadamia wszystkie inne procesy w systemie o zwolnieniu zasobu dzielonego wówczas procesy otrzymujące komunikat zwalniający "czyszczą" własną kolejkę z numerem procesu opuszczającego sekcję.

287 287 Algorytm Lamporta Najistotniejszymi założeniami algorytmu Lamporta są: utrzymanie lokalnej kolejki przez wszystkie procesy komunikacja między wszystkimi procesami Stosowanie tego rozwiązania jest jednak ograniczone ze względu na możliwość zbyt dużej liczby komunikatów w systemie (przy dużej liczbie procesów) i konieczność ich wymiany co powoduje powstawanie lokalnych kolejek o ogromnych rozmiarach. Algorytm Lamporta, przy założeniu, że w systemie jest N procesów, wymagawymiany 3(N-1) komunikatów. Tak więc przy 3 procesach konieczna jest wymiana 6 komunikatów

288 288 Algorytm Lamporta

289 289 Przykładowy schemat działania algorytmu Lamporta w przypadku istnienia w systemie trzech procesów zainteresowanych wejściem do zasobu dzielonego w sytuacji a) widać, że każdy z procesów wysyła zamówienie ze znacznikiem czasu do każdego z procesów w systemie, a swój znacznik ustawia w lokalnej kolejce następnie dokonywana jest klasyfikacja zamówień od wszystkich procesów i w lokalnej kolejce są ustawiane poszczególne zamówienia, a proces z najmniejszym znacznikiem uzyskuje dostęp do sekcji krytycznej po otrzymaniu odpowiedzi od innych procesów. odpowiedzi procesów są wysyłane natychmiast po otrzymaniu komunikatów zamówień i po stwierdzeniu przez proces P3, że mają one znaczniki czasu późniejsze oraz to, że jego identyfikator jest umieszczony na początku lokalnej kolejki wchodzi on do sekcji krytycznej.

290 290 ALGORYTM RICARTA I AGRAWALI algorytm oparty na rozproszonym uzgadnianiu zwany często jako algorytm z zastosowaniem zegarów logicznych każdy proces chcący wejść do sekcji krytycznej rozsyła komunikat do wszystkich procesów w systemie i może wejść do sekcji dopiero wówczas, gdy dostanie odpowiedź od pozostałych komunikatów.

291 291 ALGORYTM RICARTA I AGRAWALI Założenia tego algorytmu są następujące: - istnieje jedna sekcja krytyczna (dla ułatwienia), - wszystkie procesy znają wzajemnie swoje adresy, - wszystkie komunikaty zostaną w końcu dostarczone, - każdy proces utrzymuje zegar logiczny (znacznik czasu)

292 292 ALGORYTM RICARTA I AGRAWALI Proces, który otrzymał od innego procesu komunikat zamawiający wejście do sekcji działa następująco: 1.jeżeli sam wcześniej nie wysłał prośby (nie czeka na dostęp), to odpowiada pozytywnie 2. jeżeli sam wcześniej wysłał prośbę i jeszcze nie uzyskał wszystkich odpowiedzi, to o tym kto pierwszy wykona sekcje krytyczna decyduje czas wysłania próśb: 3.jeżeli zapytywany proces wysłał swoja prośbę później, to także odpowiada pozytywnie 4.jeżeli prośby zostały wysłane w tym samym momencie, to o kolejności decydują priorytety (np. jeżeli zapytany proces ma wyższy numer to, odpowiada pozytywnie) 5.w każdym innym przypadku zapytywany proces wstrzymuje się z odpowiedzią, aż do chwili, gdy sam skończy wykonywać swoja sekcje krytyczna - wówczas odpowiada pozytywnie wszystkim, którym jeszcze nie odpowiedział.

293 293 ALGORYTM RICARTA I AGRAWALI Wejście do sekcji krytycznej może nastąpić tylko wówczas gdy proces wysyłający żądanie otrzyma od każdego innego procesu odpowiedź. Gdy proces wykonał swoje zadania w sekcji krytycznej może ją opuścić informując jednocześnie o swym kroku procesy których żądania przetrzymuje w lokalnej kolejce.

294 294 ALGORYTM RICARTA I AGRAWALI sytuacja, w której mamy do czynienia z trzema procesami, z których współbieżne zamówienie wejścia do sekcji wysyłają procesy P1 i P2 oba zamawiające procesy mają znaczniki czasu odpowiednio P1- 41, a P2 – 34 proces P3 w przypadku otrzymania zamówienia odpowie natychmiast (nie jest zainteresowany wejściem do zasobu dzielonego w danej chwili) inaczej sytuacja przedstawia się w przypadku procesów zainteresowanych wejściem do sekcji proces P2 odbierając komunikat zamówienie od procesu P1 stwierdzi, że jego własne zamówienie ma znacznik czasu mniejszy niż zamówienie procesu P1 i z tego powodu nie udzieli odpowiedzi. proces P1 otrzymując komunikat od procesu P2 z mniejszym znacznikiem czasu odpowie natychmiast umożliwiając wejście do sekcji procesowi P2

295 295 ALGORYTM RICARTA I AGRAWALI W momencie opuszczenia sekcji krytycznej przez proces P2 wysyła on odpowiedź do procesu P1 umożliwiając mu wejście do sekcji. Jest to algorytm rozproszony, jednak awaria dowolnego procesu uniemożliwi działanie algorytmu Kolejną wadą jest to, że wszystkie procesy przetwarzają wszystkie zamówienia co osłabia wydajność systemu.

296 296 ALGORYTM MAEKAWY Mając do dyspozycji N procesów w systemie Maekawa podzielił go na podzbiory z uwzględnieniem pewnych warunków: 1.pierwszy warunek zwany "regułą równego wysiłku", mówi, że podział systemu na podzbiory odbywa się w ten sposób, że każdy podzbiór ma taki sam rozmiar 2."Reguła niepustego przejęcia" oznacza, że dla dowolnej pary podzbiorów istnieje element, który należy do każdego z nich 3."Reguła równej odpowiedzialności" oznacza, że każdy proces zawiera się dokładnie w takiej samej liczbie podzbiorów 4.Ostatni warunek oznacza, że każdy proces zawiera się we własnym podzbiorze i zwany jest "zawieraniem się we własnym podzbiorze"

297 297 ALGORYTM MAEKAWY Sposób działania algorytmu: proces, który zamierza wejść do sekcji krytycznej wysyła komunikat żądanie do wszystkich procesów z własnego podzbioru komunikat ten jest zaopatrzony w numer kolejności (lub znacznik czasu) większy niż numery kolejności odebrane wcześniej przez ten proces lub wcześniej zauważone przez proces w systemie każdy z procesów w podzbiorze otrzymujących komunikat żądanie wysyła następnie do procesu chcącego wejść do sekcji krytycznej komunikat blokada, a wcześniej zaznacza siebie jako zablokowany

298 298 ALGORYTM MAEKAWY jeżeli dojdzie do sytuacji, że proces był już wcześniej zablokowany wówczas komunikat żądanie jest umieszczany w lokalnej kolejce, a do procesu chcącego korzystać z zasobu wysyłany jest komunikat niepowodzenie wW przypadku gdy komunikat żądania ma niższy numer niż komunikat już blokujący proces w podzbiorze wówczas wysyłany jest komunikat pytanie proces otrzymujący komunikat pytanie kasuje komunikat blokowanie (jeżeli w kolejce jest komunikat niepowodzenie) i zwraca komunikat opuszczenie po odebraniu komunikatu pytanie i opuszczeniu sekcji krytycznej proces wysyła odpowiedź

299 299 ALGORYTM MAEKAWY proces, który otrzymał komunikat opuszczenie blokuje się dla komunikatu żądania z najmniejszym numerem kolejności jeżeli zaistnieje sytuacja w której wszystkie procesy z podzbioru wysłały komunikat blokowanie to proces wysyłający żądanie może wejść do sekcji krytycznej

300 300 ALGORYTM MAEKAWY

301 301 Przykładowy schemat działania algorytmu Lamporta w przypadku istnienia w systemie trzech procesów zainteresowanych wejściem do zasobu dzielonego w momencie opuszczania przez proces zasobu dzielonego wysyła komunikaty zwalniające do pozostałych procesów w celu umożliwienia im wejścia do sekcji w powyższym przykładzie widać, że kolejnym procesem, który wejdzie do sekcji będzie proces, który znajduje się najwyżej w kolejkach lokalnych tj. proces P1.

302 302 Klaster to grupa niezależnych komputerów (często wieloprocesorowych) połączona zazwyczaj szybką siecią w celu przetworzenia wspólnie tego samego problemu lub udostępniania tej samej usługi/zasobu. Klastry

303 303 Magistrala zrealizowana w postaci grafu połączeń

304 304 Schemat klastra obliczeniowego

305 305 Klastry klaster (ang. cluster) to co najmniej dwa komputery, komunikujące się ze sobą za pomocą możliwie najszybszych łączy, tworzących w rezultacie jeden logiczny system obliczeniowy do komunikacji pomiędzy węzłami służą specjalnie do tego stworzone magistrale systemowe potrafiące przekazywać duże ilości informacji w krótkim czasie

306 306 Klastry klastry są doskonałą alternatywą dla drogich rozwiązań typu mainframe czy superkomputerów, oferując ich moc obliczeniową przy nieporównywalnie niższych kosztach uruchomienia i dużo lepszej skalowalności

307 307 Rodzaje klastrów Rozróżnić można klika głównych podgrup : klastry naukowe - przetwarzanie równoległe, programowanie równoległe, cały zespół komputerów pracuje nad tym samym problemem, dużo tańsza alternatywa dla superkomputerów

308 308 Rodzaje klastrów Klastry tego typu służą do masowego przetwarzania danych jednego rodzaju (np. danych naukowych lub proces ó w wizualizacji). Wymagają specjalnie przygotowanych program ó w tworzonych przy użyciu wyspecjalizowanych bibliotek programistycznych, takich jak: Message Passing Interface (MPI) lub Parallel Virtual Machine (PVM). Przykładem takiego klastra jest Beowulf.

309 309 Rodzaje klastrów klastry balansujące zasobami serwerów - zespół serwerów, który udostępnia tę samą usługę lub zasób, w celu rozłożenia obciążenia spowodowanego dużą ilością klientów połączonych w tym samym czasie, serwery odsyłają zapytania pomiędzy siebie aby na każdym z nich było jednakowe obciążenie, w ten sposób można przyjąć bardzo duże ilości odległych klientów

310 310 Rodzaje klastrów Klastry tego typu przeznaczone są do utrzymywania bardzo obciążonych usług sieciowych (np. serwer ó w WWW) lub prostych zadań obliczeniowych. Ich gł ó wne zadania polega na r ó wnoważnym dystrybuowaniu obciążenia między poszczeg ó lne serwery-węzły klastra. MOSIX należy do tej grupy.

311 311 Rodzaje klastrów Klastry HA (High Availability - duża dostępność) Klastry tego typu nie zwiększają wydajności serwis ó w, a mają jedynie eliminować tzw. SPOF (Single Point Of Failure) - pojedynczy punkt awarii - w razie uszkodzenia jednego z serwer ó w jego zadania są w spos ó b niewidoczny dla użytkownik ó w przejmowane przez inny węzeł klastra.

312 312 Rodzaje klastrów Są to klastry wysokiej niezawodności - zespół serwerów, które przejmują zadania od siebie w przypadku awarii jednego z nich, po to aby serwis jaki udostępniają był dostępny bez przestojów Przykładem takiego klastra jest oprogramowanie Red Hat High Availability Server oraz oprogramowanie opracowywane w ramach projektu Linux HA (High Availability

313 313 Klastry każdy klaster musi posiadać co najmniej jeden serwer - węzeł (master - node), który zarządza/monitoruje całym klastrem i co najmniej jeden węzeł podległy (slave - node)

314 314 Klastry tylko serwer zarządzający musi posiadać takie urządzenia, jak: monitor, kartę wideo, klawiaturę, mysz, stacje dyskietek, CD-ROM itp. w skrajnych przypadkach slave - nodes mogą nie posiadać dysków twardych, system jest pobierany z innego serwera na którym udostępnia się przestrzeń dyskową

315 315 Klastry można również udostępnić tylko część systemu z serwera plików i oprogramowania, np. cały katalog /usr lub /usr/local co zostanie zainstalowane na serwerze plików, będzie bez rejestracji na wszystkich węzłach

316 316 Klastry można tutaj spotkać się z takim problemem jak przeciążenie sieci i serwera plików zbyt dużą liczbą klientów rozwiązaniem będzie wtedy zainstalowanie szybszej sieci (np. Gigabitowej) lub zwiększenie ilości serwerów plików

317 317 Klastry dzięki rozwojowi technologii sieciowych, coraz częstszym stało się wykorzystywanie łączy sieci komputerowych ethernet do przesyłania informacji pomiędzy węzłami

318 318 Klastry od strony programowej najistotniejszymi elementami są: mechanizm obsługi pamięci współdzielonej (w przypadku stosowania węzłów wieloprocesorowych) biblioteka, pozwalająca na wzajemną komunikację pomiędzy węzłami i udostępniająca użytkownikom mechanizmy, pomagające w zrównoleglaniu kodu

319 319 Oprogramowanie Gł ó wna strona projektu MOSIX Projekt Beowulf PVM (Parallel Virtual Machine) - narzędzia do budowy komputer ó w r ó wnoległych, kt ó re mogą wykorzystywać r ó żne systemy operacyjne, np. Linux i Windows NT

320 320 Oprogramowanie Komercyjne oprogramowanie TurboLinux EnFuzion do łączenia zwykłych komputer ó w w sieci lokalnej w klaster Projekt Linux High Availability Pakiet Message Passing Interface (MPI) labs/hpcl/projects/mpi/ labs/hpcl/projects/mpi/

321 321 Oprogramowanie PVMPovRay - specjalna wersja popularnego renderera przystosowana do pracy w klastrach linux/beowulf/tools/PVMPovray i386.rpm linux/beowulf/tools/PVMPovray i386.rpm LUI - narzędzie do automatycznego "klonowania" całego systemu operacyjnego między węzłami klastra developerworks/projects/lui developerworks/projects/lui

322 322 System klastrowy widziany jest przez użytkowników jako całość.

323 323 Niezawodność jest cechą systemu informatycznego, która określa dopuszczalny czas przestoju i jego bezawaryjnej pracy w systemach o znaczeniu krytycznym dopuszcza się średni czas awarii w ciągu roku na poziomie pięciu minut (stanowi to tysięczną część procentu czasu pracy)

324 324 Niezawodność w systemach klastrowych podnosi ją konfiguracja węzłów, gdyż są one odizolowane od siebie, zatem uszkodzenie jednego z nich eliminuje ryzyko wystąpienia awarii w innym węźle

325 325 Przezroczystość niezależnie od tego jak zbudowany jest system klastrowy, użytkownik nie jest na ogół w stanie stwierdzić czy pracuje na klastrze czy na pojedynczym komputerze często złożoność operacji przeprowadzanych w systemie jest przed użytkownikiem ukryta.

326 326 Skalowalność system skalowalny to taki, który można w szybki i sprawny sposób rozbudować w celu sprostania zwiększającym się wymaganiom użytkowników rozbudowa ta powinna przebiegać bez konieczności zmian w budowie całego systemu a jedynie na wymianie części sprzętu na nowy lub dodanie kolejnych jego elementów takich jak nowy procesor czy zwiększenie ilości pamięci operacyjnej

327 327 Skalowalność najlepiej, aby rozbudowa taka nie powodowała przerwania pracy systemu i aby wzrost wydajności był liniowo proporcjonalny do przyrostu mocy obliczeniowej wynikającej z dodania nowego węzła w systemie klastrowym

328 328 Skalowalność

329 329 Węzły każdy komputer będący elementem składowym klastra nosi miano węzła (ang. node) to właśnie zbiór węzłów zbudowanych z samodzielnych maszyn tworzy klaster

330 330 Węzły węzły są zazwyczaj odłączane bądź dodawane do klastra bez potrzeby ponownej konfiguracji i restartowania całości systemu dzięki temu jest możliwość dokonywania prac serwisowych czy też konserwacyjnych w czasie pracy systemu, którego przerwa w działaniu jest niedopuszczalna

331 331 Modele implementacji klastrów Dwa podstawowe modele implementacji klastrów to Failover cluster Boewulf cluster

332 332 Failover cluster jest to klaster budowany z myślą o zapewnieniu jak najlepszych parametrów eksploatacyjnych, takich jak odporność na uszkodzenia (ang. failover )- możliwość dalszego działania w przypadku awarii jednego z elementów czy stabilność działania

333 333 Beowulf cluster zwany inaczej Computational Cluster, przeznaczony głównie do zastosowań w środowiskach naukowych i ośrodkach badawczych

334 334 Beowulf cluster w rozwiązaniach tych największy nacisk kładzie się na moc i wydajność klastra, kosztem jego odporności na awarie dzieje się tak dlatego, że w tego typu zastosowaniach czas przestoju nie ma krytycznego znaczenia i na ogół nie powoduje ogromnych strat finansowych klastry tego typu mają znacznie większą wydajność, zwłaszcza w obliczeniach zmiennoprzecinkowych

335 335 Beowulf cluster wszystkie węzły są kontrolowane przez jeden, zwany serwerem, węzłem głównym (ang. master node) lub front-endem

336 336 Beowulf cluster Jego główne zadania to dystrybucja informacji o użytkownikach i zasobach systemu udostępnianie wspólnej przestrzeni dyskowej, a zwłaszcza katalogów domowych (/home) i danych aplikacji (np. /usr/local)

337 337 Beowulf cluster kontrola pracy klastra komunikacja ze światem zewnętrznym (dla użytkowników to on stanowi "bramę", za pomocą której logują się do systemu i zarządzają swoimi zadaniami ) rola serwera zadań - odpowiedzialność za kontrolę obciążenia klastra i dystrybucję zadań użytkowników

338 338 Beowulf cluster Na ogół jedyną maszyną podłączoną do świata zewnętrznego za pomocą drugiej karty sieciowej jest węzeł-serwer Najczęściej korzysta się z systemu poprzez bezpośredni dostęp do konsoli serwera, lub poprzez telnet czy odległe logowanie na serwer z odległej stacji roboczej Na serwerze użytkownicy mogą edytować i kompilować swój kod, a także uruchamiać procesy na wszystkich węzłach w klastrze.

339 339 Różnice między COW a Beowulf cluster W większości przypadków systemy COW są używane do obliczeń równoległych w nocy i w weekendy, gdy użytkownicy nie korzystają ze swoich stacji roboczych do pracy, wykorzystując w ten sposób z niepotrzebne cykle procesora Z kolei maszyna Beowulf jest maszyną dedykowaną do przetwarzania równoległego, i zoptymalizowaną w tym celu Beowulf zapewnia także większy współczynnik ceny do wydajności, jako że jest zbudowany z ogólnie dostępnych komponentów i korzysta na ogół z darmowego oprogramowania Beowulf ma także więcej cech pojedynczego systemu, które pomagają użytkownikom dostrzegać klaster Beowulf jako pojedynczą obliczeniową stację roboczą

340 340 Klastry w Polsce Najszybszym superkomputerem w Polsce jest (styczeń, 2005) SuperDome 878 Telekomunikacji Polskiej osiągający teoretyczną moc obliczeniową rzędu 744 gigaflopsów2005 Telekomunikacji Polskiej gigaflopsów Gdyby do superkomputerów zaliczano systemy rozproszone, to największym w Polsce byłby (styczeń, 2005) system komputerowy CLUSTERIX2005CLUSTERIX Największy klaster komputerowy to 'holk' w Centrum Informatycznym Trójmiejskiej Akademickiej Sieci KomputerowejTrójmiejskiej Akademickiej Sieci Komputerowej

341 341 CLUSTERIX Krajowy Klaster Linuksowy (CLUSTERIX – ang.National CLUSTER of LInuX Systems) - system geograficznie rozproszony dzięki zastosowaniu bitowych procesorów Intel Itanium 2, krajowej sieci optycznej nowej generacji PIONIER oraz systemu operacyjnego Linux, jest jednym najszybszych rozproszonych superkomputerów w Europie64- bitowychIntel Itanium 2PIONIERLinux superkomputerówEuropie

342 342 CLUSTERIX Uroczystość uruchomienia klastra w Pałacu Prezydenckim Jeden z serwerów klastra Uruchomienie Clusteriksa nastąpiło 15 grudnia 2004 r. o godz. 13:30 w Pałacu Prezydenckim w Warszawie15 grudnia2004Warszawie

343 343 CLUSTERIX Wydajność klastra mierzona w bilionach operacji zmiennoprzecinkowych na sekundę wynosi 4,4 tflops Clusterix wykorzystywany będzie m. in. do badań naukowych w zakresie: modelowania zjawisk, złożonych symulacji (np. przepływu krwi), wizualizacji, przewidywania struktur białek czy projektowania układów elektroniki molekularnej itd.naukowych modelowania symulacjikrwi wizualizacji białek elektroniki molekularnej

344 344 Klastry w Polsce ( ) Największy, został sklasyfikowany na 231 miejscu listy TOP500 (listopad 2003) :231 miejscu listy TOP500 (listopad 2003) nazwa: Holk 288 x Itanium 2 1.3GHz / 1.4GHz 288 x Itanium 2 1.3GHz / 1.4GHz Moc: Krótki opis: 288 x Itanium 2 1.3GHz / 1.4GHz Instytucja:Centrum Informatyczne TASKCentrum Informatyczne TASK Miasto: Gdańsk Zastosowania: obliczenia metodami chemii kwantowej, dynamiki molekularnej, metodą elementów skończonych. Chemia, biochemia, fizyka ciała stałego, inżynieria,

345 345 HOLK Klaster zbudowany jest z modułów w architekturze SMP Każdy moduł zawiera po dwa procesory Itanium2, 2 GB pamięci operacyjnej, 36 GB dysk twardy SCSI, oraz dwa porty Gigabit Ethernet Aktualnie moduły są podłączone za pomocą pojedynczego łącza do switch gigabitowych firmy D-Link.

346 346 HOLK Moduły pracują po kontrolą systemu operacyjnego Debian GNU/Linux 3.0. Do komunikacji wykorzystywana są biblioteki MPICH i LAM W sierpniu 2004 pamięć operacyjna klastra została zwiększona poprzez dołożenie do połowy nodów 4 GB pamięci

347 347 HOLK Od listopda 2004 w skład klastra holk wchodzi podklaster clusterix złożony z 16 węzłów wyposażonych w 2 procesory Itanium2 1.4 GHz oraz sieć InfiniBand Teoretyczna moc obliczeniowa klastra wynosi 1510 GFlop/s

348 348 HOLK ilość węzłów: 64+64ilość węzłów: 16 charakterystyka węzła data uruchomienia: charakterystyka węzła data uruchomienia: Płyta główna/serwer: Intel Tiger2 Procesor: 2 × Itanium2 1.3 GHz Procesor: 2 × Itanium2 1.4 GHz RAM: 2GB (6GB)RAM: 8GB dysk: 36 GB Sieć: Gigabit EhternetSieć: InfiniBand

349 349 Holk w kartonach

350 350 Montaż klastra

351 351 Dodawanie węzłów

352 352 Klaster ma też 256 kabli zasilających

353 353 HOLK

354 354 MOSIX uruchamianie klastr ó w wymagało dotąd zakupu specjalnego, kosztownego sprzętu i oprogramowania, ich budowa była zarezerwowana jedynie dla dużych ośrodk ó w naukowych, firm i administracji państwowej dzięki Linuksowi i bezpłatnemu oprogramowaniu Open Source klastry trafiają "pod strzechy"

355 355 MOSIX oprogramowanie MOSIX to bezpłatne rozszerzenie jądra Linuksa, kt ó re umożliwia budowę klastra obliczeniowego na podstawie tanich komputer ó w PC w ten spos ó b można łączyć wiele słabych maszyn, kt ó re samodzielnie nie byłyby już użyteczne w przypadku klastra MOSIX - pojęcie węzeł oznacza jeden komputer

356 356 MOSIX najpopularniejszym linuksowym oprogramowaniem do ich budowy jest MOSIX (Multi-computer Operating System for UNIX) dostępny nieodpłatnie, r ó wnież w postaci kodu źr ó dłowego oprogramowanie MOSIX powstało i jest rozwijane na Uniwersytecie Hebrajskim w Jerozolimie

357 357 MOSIX pierwotnie projekt był rozwijany w systemie BSD UNIX, ale obecnie jedyną platformą systemową jest Linux (jedynie platforma x86). idea tw ó rc ó w MOSIX : utworzyć oprogramowanie pozwalające zbudować klaster, kt ó ry zar ó wno z punktu widzenia użytkownik ó w, jak i uruchamianych program ó w będzie widoczny jako jedna maszyna

358 358 MOSIX Architektura MOSIX-a składa się z dw ó ch moduł ó w wewnętrznych: - mechanizmu migracji (przenoszenia) proces ó w z wywłaszczaniem (PPM - Preemptive Process Migration), - algorytmu odpowiadającego za mechanizm adaptacyjny (czyli reagującego na panujące w danej chwili warunki) mechanizmu wsp ó łdzielenia zasob ó w

359 359 MOSIX moduły wsp ó łdziałają przy przenoszeniu proces ó w między węzłami klastra w taki spos ó b, aby zmniejszyć średnie obciążenie węzł ó w każdy węzeł jest właścicielem procesu (programu), kt ó ry został na nim uruchomiony lokalnie, a serwerem dla proces ó w, kt ó re się przemieściły z innych węzł ó w klastra dodawanie i usuwanie węzł ó w z klastra nie wpływa na trwające procesy.

360 360 MOSIX MOSIX został zaimplementowany jako moduł jądra Linuksa, dzięki czemu jest "przezroczysty" dla działających program ó w uzupełnieniem modułu jądra jest program Mosrun, kt ó ry zastępuje większość standardowych narzędzi sieciowych Linuksa moduł jądra działa jak zarządca zadań, decydując, jakie działanie powinno być przeniesione do innego węzła cały ten proces odbywa się automatycznie i w spos ó b niewidoczny dla samego programu

361 361 MOSIX : użytkownik nie wie, jak jego procesy (programy) są przenoszone między węzłami klastra użytkownik może uruchomić program na dowolnej maszynie w klastrze i program ten będzie już automatycznie przenoszony między węzłami każdy nowy proces jest przypisywany do najlepszego (tj. takiego, kt ó ry jest najmniej obciążony w danej chwili) węzła

362 362 MOSIX nie wszystkie programy mogą korzystać z MOSIX-a - niekt ó re ze względ ó w technicznych nie będą mogły być dystrybuowane do innych węzł ó w dotyczy to na przykład program ó w, kt ó re są uzależnione od wsp ó łpracy ze sprzętem i wykonywaniem operacji wejścia-wyjścia. (aplikacje do wyświetlania grafiki 3D w czasie rzeczywistym, także gry).

363 363 MOSIX MOSIX idealnie nadaje się do program ó w wykonujących wiele zadań obliczeniowych jednocześnie - dotyczy to np. kompilacji dużych program ó w (całego pakietu KDE czy GNOME), kompresji do formatu MP3 i innych program ó w wykonujących wiele obliczeń (np. do renderingu grafiki) st.fr/~daniau/ltsp-mosix/

364 364 MOSIX klastry MOSIX są łatwe w budowie i utrzymaniu wszystko, czego będziesz potrzebował, to sieć TCP/IP i co najmniej dwa komputery co do wymagań związanych z siecią to w warunkach domowych można nawet użyć dw ó ch komputer ó w z kartami sieciowymi kablem Ethernet ogromną zaletą MOSIX-a jest to, że do pracy w klastrze można przeznaczyć zwykłe, tanie komputery PC, wymogi to procesor Pentium, twardy dysk (rozsądne minimum to MB - tyle jest wymagane przy minimalnych instalacjach Linuksa) pamięć RAM w odpowiedniej ilości (minimum 16 MB) i karta sieciowa.

365 365 MOSIX MOSIX jest znakomitym sposobem wykorzystania starych komputer ó w g ó rna granica liczby komputer ó w połączonych w klaster MOSIX to 65535, jednak bardziej realnym ograniczeniem jest wydajność sieci rozbudowane klastry wykorzystują szybkie sieci Gigabit Ethernet lub sieci specjalne, np. Myrinet

366 366 MOSIX kolejną zaletą MOSIX-a jest to, że uruchamiane w klastrze programy nie wymagają żadnego specjalnego przygotowania do pracy inne klastry wymagają rekompilacji program ó w z wykorzystaniem specjalnych bibliotek do przetwarzania r ó wnoległego ceną za zalety jest to, że klastry MOSIX nie są tak wydajne jak te, kt ó re wymagają przygotowywania specjalnych program ó w klaster MOSIX może być r ó wnież, oczywiście, budowany na silnych maszynach serwerowych lub maszynach wieloprocesorowych

367 367 Przykłady architektur klastrowych Trzy komputery działające równolegle: jeden monitoruje urządzenia do produkcji piwa, inny steruje dystrybucją towarów, a jeszcze inny jest używany do celów administracyjny ch

368 368 BROWAR System stanowi klaster, gdyż w sytuacji awarii komputery są w stanie przejąć wzajemnie swoje funkcje Jeśli popsuje się komputer nadzorujący produkcję, to jego funkcję przejmie komputer obsługujący administrację Podobnie stanie się, gdy ulegnie awarii komputer sterujący dystrybucją towarów Nie ma przetwarzania równoległego, każde zadanie wykonuje się na pojedynczym komputerze. Odpowiednie części oprogramowania są w stanie wykryć awarię i zareagować na nią przerzuceniem wykonywanych zadań na inne maszyny.

369 369 Kancelaria


Pobierz ppt "1 Programowanie współbieżne i rozproszone Instytut Informatyki dr Anna Kwiatkowska."

Podobne prezentacje


Reklamy Google