Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie współbieżne i rozproszone

Podobne prezentacje


Prezentacja na temat: "Programowanie współbieżne i rozproszone"— Zapis prezentacji:

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

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 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 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 GFLOPS=10^9 operacji zmp na sek wzrost mocy obliczeniowej – ograniczeniem jest wynikająca z technologii i architektury maksymalna częstotliwość zegara, czy opłacalna wielkość krzemowego chipu, cena sprzętu oraz w wypadku stosowania unikatowych rzadkiego sprzętu – kłopoty z serwisem i oprogramowaniem. Dodatkowym bodźcem do rozwoju komputerów równoległych jest to, że większość najpoważniejszych zadań obliczeniowych opiera się na modelach wektorowych i macierzowych, a działania tego typu stosunkowo łatwo dzielić na niezależne ciągi operacji. Obliczenia na komputerach równoległych przeprowadzane w sposób współbieżny dają szerokie możliwości obliczeń w czasie rzeczywistym.

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) Ponieważ każdy proces istnieje tylko przez czas wykonywania programu, współistnienie pociąga za sobą współbieżność wykonania.

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 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 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 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 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 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 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 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 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 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 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 Realizacja procesu zajmuje się procesor.
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 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 Procesy współbieżne Dwa procesy są współbieżne, jeśli jeden z nich rozpoczyna się przed zakończeniem drugiego.

20 Rodzaje procesów skończone
nieskończone (system operacyjny, systemy czasu rzeczywistego sterujące automatami lub wskutek błędu w programie) Od systemu operacyjnego wymagamy, aby trwał nieskończenie, gotowy na każde nasze żądanie.

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 Klasyfikacja procesów współbieżnych
procesy rozłączne interakcyjne konkurencyjne (współzawodniczące) kooperujące (współpracujące)

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 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). Jest to sytuacja często spotykana w życiu: potrzeba skorzystania z łazienki, wtedy, gdy była zajęta, zadzwonić gdy ktoś korzystał z telefonu, zrobić zakupy w sklepie samoobsługowym, gdy wszystkie koszyki były w użyciu. Wiadomo, że w takiej sytuacji trzeba zaczekać a w sytuacji, gdy dwie osoby jednocześnie chcą wejść do pustej łazienki, zadzwonić z tego samego telefonu, czy wziąć ten sam koszyk trzeba zastosować zasadę dobrych obyczajów. zasób dzielony: łazienka, koszyk, telefon

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 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 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 tak, aby powstrzymać działanie procesu nadawczego lub odbiorczego do czasu, aż inny proces go uwolni Podstawowe instrukcje programowania przyjmują postać elementarnych działań wyślij i odbierz –łącznie te działania dokonują przekazania komunikatu miedzy parą procesów

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 mechanizm komunikacji – kanał lub port

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 Nie współpracują, a jedynie współzawodniczą między sobą wymagając synchronizacji przy dostępie do różnych urządzeń komputera

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 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 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) Program współbieżny może się w ogóle nie zatrzymywać

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). W przypadku problemu wzajemnego wykluczania własność bezpieczeństwa oznacza, że nigdy dwa procesy nie znajdą się jednocześnie w swoich sekcjach krytycznych Dowodzenie własności bezpieczeństwa jest trudne – przeważnie próbuje się wskazać ciąg akcji, które doprowadzają do stanu niepożądanego.

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 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. W przypadku problemu wzajemnego wykluczania oznacza, że jeśli jakiś proces czeka na wejście do swojej sekcji krytycznej, to w końcu do niej wejdzie. Dowodzenie własności żywotności jest łatwiejsze – wystarczy pokazać skończony ciąg akcji procesów, które przy każdym scenariuszu synchronizacji między nimi doprowadza w końcu do pożądanej sytuacji.

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 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ć. Np. rozwiązanie problemu wzajemnego wykluczania dwóch identycznie zachowujących się procesów, które pozwala jednemu z nich wchodzić do swej sekcji krytycznej co sekundę, a drugiemu co godzinę, ma własność żywotności, ale intuicyjnie trudno się z nim pogodzić – oczekuje się aby było uczciwe (sprawiedliwe)

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 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 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. 1 P2 1 Rys. przedstawia różnicę miedzy uczciwością mocną i słabą. Proces zgłasza żądanie przez ustawienie bitu na 1. Proces P2 (niebieski) okresowo zgłasza i wycofuje żądanie P1(czerwony) – 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. Pomimo, że proces P2 zgłasza swoje żądanie nieskończenie wiele razy, system obsługujący sprawdza, czy są niezrealizowane żądania dokładnie wtedy, gdy P2 nic nie zgłasza. Silnie uczciwy system obsłużyłby proces P2. P1 t1 t2 t3

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 1 Działanie 2

42 Wątek jest podstawową jednostką wykorzystującą procesor
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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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

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 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(); public void mouseMoved(MouseEvent e){} public void paint(Graphics g) g.drawString("wynik:"+licznik,10,20); g.drawString("pociagnij",x1,y1);

61

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 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 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. Zajmujemy się takimi procesami współbieżnymi, które są ze sobą powiązane ze sobą przez to, że wymagają wzajemnej synchronizacji lub komunikacji Zjawisko blokady może wystąpić tylko w niepoprawnym programie

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. Jeśli komunikat lub sygnał synchronizacyjny może być odebrany tylko przez jeden z czekających nań procesów, powstaje problem, który z procesów wybrać.

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 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 Potrzebny jest mechanizm umożliwiający wzajemne wykluczanie procesów - każdy współczesny procesor jest wyposażony w mechanizm przerwań a każda pamięć w arbiter pamięci.

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 Do realizacji wzajemnego wykluczania można stosować przerwania powodowane wykonaniem specjalnej instrukcji i mechanizm ich maskowania.

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 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. Jeśli jeden procesor chce odczytać wartość komórki, a drugi ja zmienić, to procesor czytający odczyta albo starą wartość albo nową, zmieniona przez drugi procesor, ale nigdy nie będzie to np. połowa komórki stara, a druga połowa nowa.

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 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 Mechanizmy wysokopoziomowe
Mechanizmy synchronizacji: semafory - zadaniem jest przepuszczanie i zatrzymywanie procesów monitory - jego głównym przeznaczeniem jest zarządzanie wybranym zasobem komputera

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 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 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 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 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 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. sekcje krytyczne: mycie się, telefonowanie, zakupy)

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) Na podstawie tych dwóch mechanizmów można już rozwiązać problem wzajemnego wykluczania w systemie jednoprocesorowym w następujący sposób:

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 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 Programowanie przerwań wiąże się z ingerencją w obszar systemu operacyjnego.

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 Problem wzajemnego wykluczania można rozwiązać czyniąc pewne założenia:... a zwłaszcza nie może się on wewnątrz niej zapętlić lub zakończyć w wyniku jakiegoś błędu – np. nikt nie zasłabnie w łazience, czy przy telefonie ani nie wyniesie koszyka ze sklepu

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 Fazy równoległości Możliwa jest również wymiana wyników pomiędzy wątkami i kontynuacja pracy wielowątkowej. Konieczność synchronizacji wątków sprawia, że jest bardzo pożądane , by wszystkie z nich wymagały takiego samego obliczeń. Duże zróżnicowanie długości poszczególnych wątków powodowałyby dla wielu procesorów znaczną stratę czasu w oczekiwaniu na proces synchronizacji wątków. Potrzeba wymiany informacji między procesorami powodują,że obliczenia na N procesorach nie wykonują się zwykle N razy szybciej.

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 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 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ą. Metoda Monte Carlo - zrównoleglenie

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 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 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 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 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; Faza synchronizacji polega na łączeniu w rezultat końcowy wyników pracy poszczególnych wątków. x4:=x1/x2; x5:=x3-x4;

94 Są to akcje potencjalnie równoległe.
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 Przykład(c.d.) Algorytm obliczenia wartości wyrażenia: A*B-(C+D)/(E-F) z elementami równoległymi x1:=C+D x4:=x1/x2 x2:=E-F x5:=x3-x4 x3:=A*B

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 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(log2N) Notacja O(N) oznacza,że czas wykonania rośnie liniowo z N

98 Sumowanie w czasie logarytmicznym
Pierwszy krok (n/2 procesorów) Drugi krok (n/4 procesorów) Krok log2N (1 procesor) a1 a1+ a2 a2 a1+ a2 +a3+ a4 a3 Suma ciągu a3+ a4 .... .... a4 1000 liczb można zsumować w czasie , jaki zajmuje wykonanie dziesięciu dodawań (500 procesorów), a milion w czasie 20 dodawań, ale potrzeba ... ... a n-3+ a n-2+an-1+an an-1 a1+ a2 an

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 Jest to stosunek czasu przebiegu programu na 1 procesorze do czasu przebiegu tego samego programu na P procesorach Podana formuła przedstawia prostą miarę prędkości programu nie daje jednak charakterystyki efektywności wykorzystania procesorów.

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 Jest to stosunek osiągniętego przyspieszenia do liczby procesorów wykonujących dane obliczenia.

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 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 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 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ół końcowy Sekcja krytyczna Protokół wstępny

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 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 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 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 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 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. Jest to bardzo silna własność, gdyż wymaga, żeby żaden możliwy ciąg wykonań instrukcji programu, nawet najmniej prawdopodobny nie może doprowadzić do zagłodzenia.

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 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 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 Schemat synchronizacji przy pomocy semafora
Proces A Proces B signal(S) wait(S) S=0 ktoś czeka S:=S-1 S:=S+1

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 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 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 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 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 Przejście procesu przez monitor
Monitor M Proces A procedure P(x:real); begin …. wait(C); …… signal(C); end; M.P(y) procesy oczekujące na wejście procesy oczekujące na C procesy wstrzymane po signal

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 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 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 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 Spotkania symetryczne
Proces A Proces B WY(5) WE(y)

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 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 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 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 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 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 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 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 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 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 Przestrzeń krotek Przestrzeń krotek Proces A Proces B (6, 1.3) (‘A’)
OUTPUT(‘A’) INPUT(5,x:real) (5,’c’) (5,2.71)

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 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 Potoki wyniki jednego programu są danymi do drugiego
system operacyjny DOS zawiera mechanizm przetwarzania potokowego: p1|p2|p3|...|pn zapis ten oznacza, że standardowe wyjście programu p1 będzie potraktowane jako standardowe wejście programu p2 itd..

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 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 Komunikacja przez potok
Proces A Proces B otop tsej ot write(‘k’) read(z)

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 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 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 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 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 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 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 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 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 Synchronizacja Synchronizowane mogą być: Metody
Synchronized void metoda(){…} Sekcje kodu – ryglowanie obiektu Synchronized(lock) {….} gdzie lock – referencja do zablokowanego obiektu

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 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 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 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 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 Przykład synchronizacja metod synchronized int sumArray(int nums[]) {
for(int i=0; i<nums.length; i++) sum+=nums[i]; System.out.println("wynik dla" + Thread.currentThread().getName()+"jest"+sum); try{Thread.sleep(10);} catch(InterruptedException exc) System.out.println("Glowny watek przerwany"); } return sum;}

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 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 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 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 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 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 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 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 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 metoda notifyAll() odblokowuje wszystkie czekajace na danym obiekcie wątki
wywołanie notify() lub notifyAll() musi być także zawarte w sekcji krytycznej

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 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 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 Stany wątków Wątek może znajdować się w czterech stanach: New Thread
Runnable NotRunnable Dead

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 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 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 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 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 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 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 priorytet wątku można zmienić wywołując metodę
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 final int getPriority()
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 Architektury równoległe
Jeden system operacyjny W architekturze SMP dzięki temu,że wszystkie procesory mają dostęp do całej pamięci, napisanie programu równoległego jest stosunkowo proste, nie ma bowiem problemu z dostępem do danych znajdujących się w pamięci wspólnej dla wszystkich procesorów.Jednak wspólna pamięć może powodować kłopoty – w sytuacji, gdy procesory będą próbowały zapisywać do tego samego adresu pamięci, lub gdy jeden zmieni wartość zmiennej mimo, że drugi będzie potrzebował starej wartości. Zaletą architektury o pamięci wspólnej jest to,że kompilatory mogą w sposób automatyczny dokonywać podziału na równoległe wątki. Systemy o pamięci rozproszonej składają się z komputerów (nazywanych węzłami obliczeniowymi) połączonych siecią o dużej przepustowości. W związku z tym, że każdy z węzłów obliczeniowych dysponuje własną pamięcią operacyjną, wymiana danych w fazie synchronizacji odbywa się przez sieć, którą węzły są połączone. Część obliczeniowa jest podzielona na zadania, ale każdy z komputerów ma w pamięci własne dane. W przeciwieństwie do komputerów o pamięci wspólnej, żadne dane nie są współdzielone pomiędzy węzłami, wymiana danych pomiędzy nimi musi być w sposób jawny zakodowana w programie Każdy węzeł ma własny system Przełącznik sieciowy

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 kopanie rowów x:=1;y:=2;

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) 2. 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 Architektury SMP i DMP można ze sobą łączyć – w wyniku otrzymuje się komputer równoległy z pamięcią rozproszoną, w którym poszczególne węzły są komputerami SMP 3. w niej każdy obszar pamięci ma inny czas dostępu

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) występuje wtedy, gdy oddzielne procesory wykonują ten sam program na różnych segmentach danych oddzielne procesory wykonują ten sam program, lecz każdy ma inny przypisany sobie ciąg obliczeń oddzielne procesory wykonują ten sam program, lecz każdy procesor ma przydzieloną sobie inną część tego programu do wykonania

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 Własności decydujące o użyteczności systemu rozproszonego
dzielenie (wspólne użytkowanie) zasobów otwartość współbieżność skalowalność tolerowanie uszkodzeń przezroczystość

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 Model klient - serwer proces klienta proces serwera S S S S K K K K K
Kiedykolwiek procesy klientów potrzebują dostępu do któregoś z zasobów, zwracają się z zamówieniem do opiekującego się nim serwera, jeśli zamówienie jest poprawne, to serwer wykonuje żądaną czynność i wysyła odpowiedź do procesu klienta, Proces serwera może korzystać z usług innego serwera stając się klientem wobec tego drugiego. Ze względu na wydajność działania niektóre rodzaje zasobów muszą być utrzymywane lokalnie na każdym komputerze. Za minimalny zbiór takich zasobów uważa się na ogół pamięć o swobodnym dostępie, procesory centralne oraz lokalny interfejs sieciowy. Te kluczowe zasoby są zarządzane przez system operacyjny każdego komputera z osobna. K proces klienta S proces serwera

190 Model oparty na obiektach
U U U U U O Z O Z O Z O Z schemat przedstawia czysty model obiektowy . Przypomina on tradycyjny model programowania obiektowego, w którym każda jednostka jest rozpatrywana jako obiekt wyposażony w interfejs komunikacyjny umożliwiający dostęp do jego funkcji. W opartym na obiektach modelu za obiekt uważa się każdy zasób dzielony (wspólnie wykorzystywany). Obiekty są jednoznacznie identyfikowane i mogą być dowolnie przemieszczane w obrębie sieci bez zmiany ich identyfikacji. Jeśli program posługujący się zasobem zażąda do niego dostępu to wysyła komunikat do odpowiedniego obiektu zawierający zamówienie. komunikat jest przekazywany odpowiedniemu procesowi, który wykonuje wymaganą operację i odsyła (jeśli to konieczne) komunikat z odpowiedzią do zamawiającego procesu. W modelu klient-serwer schemat nazewniczy stosowany do zasobów zmienia się w zależności od zarządzającego nim usługodawcy, natomiast w modelu obiektowym użytkownicy zasobów mogą odwoływać się do wszystkich zasobów w sposób jednolity. obiekt i zarządca U użytkownik obiektu

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 System może być otwarty lub zamknięty ze względu na rozszerzenia sprzętowe, np. dodawanie urządzeń zewnętrznych, pamięci lub interfejsów komunikacyjnych, czy też ze względu na rozszerzanie oprogramowania, czyli dodawanie nowych właściwości do systemu operacyjnego i usług dzielenia zasobów.

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 Dostępność komunikacji międzyprocesorowej w systemach operacyjnych oraz standardowe protokoły komunikacyjne powiększyły możliwość uzyskiwania otwartości systemów Procesy usługowe działające na dowolnym komputerze i pod dowolnym systemem operacyjnym mogą oferować dostęp do ich zasobów innym procesom działającym na komputerach w tej samej sieci

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 zachodzi wtedy, gdy na zamówienie każdego z aktywnych użytkowników działa jeden lub więcej procesów aplikacji, w większości architektur systemów procesy aplikacji działają na stacjach roboczych użytkowników, gdy ona ma tylko jeden procesor, to procesy wykonywane są na przemian, jeśli kilka, to umożliwia równoległe przeprowadzanie kilku obliczeń ten przypadek wynika z istnienia jednego lub więcej procesów usługowych dla każdego typu zasobu

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. Odrębność tych działań umożliwia równoległe przetwarzanie w osobnych komputerach Współbieżny dostęp do wspólnie wykorzystywanych zasobów i ich aktualizacje muszą być synchronizowane.

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ć. np. można założyć, że częstotliwość kontaktu z plikami będzie rosnąć ze wzrostem liczby użytkowników i stacji roboczych w systemie rozproszonym.

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ń skuteczniej realizowane w systemach rozproszonych niż w systemach o bardziej scentralizowanych architekturach w scentralizowanych stosuje się komputer dodatkowy jako maszynę rezerwową – podwojony koszt , w systemach rozproszonych zwielokrotnianie może dotyczyć poszczególnych serwerów, które mogą być tak oprogramowane, aby wykrywały uszkodzenia w innych serwerach. Gdy nastąpi wykrycie uszkodzenia klientów kieruje się do pozostałych serwerów wymaga zaprojektowania oprogramowania do odtwarzania (czy przywracania) stanu trwałych danych po wystąpieniu awarii

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 (system jest postrzegany jako całość)

198 użycie adresu poczty elektronicznej, np. Flinstone@stoneit.co
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 adres składa się z nazwy użytkownika i nazwy domeny, domeny są definiowane i zaopatrywane w nazwy według struktury organizacyjnej, nazwy kont przydziela się użytkownikom w ramach domeny

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ć. Rozproszone systemy i aplikacje są tworzone z oddzielnych składowych oprogramowania, współpracujących przy wykonywaniu zadań. Wszystkie składowe, które w systemach rozproszonych wymagają dostępu do zasobów lub go umożliwiają, są realizowane w postaci procesów. W systemach klient-serwer proces klienta musi współdziałać z procesem serwera, ilekroć potrzebuje dostępu do zasobu, którym sam nie zarządza – sprzętowego, programowego lub danych.

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 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 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 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 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 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 Komunikacja między procesami
komunikacja synchroniczna: w dowolnym momencie w kanale jest co najwyżej jeden komunikat, zatem buforowanie jest zbędne

207 Różnica między systemem telefonicznym a pocztowym.
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 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 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 Komunikacja klient - serwer
(zablokowany) SERWER 2.przetwarzanie 1. zamówienie 3. odpowiedź Nastawiony jest na dostarczanie usług, można w nim wyróżnić następujące etapy: przesłanie zamówienia od procesu klienta do procesu serwera wykonanie zamówienia przez serwer przesłanie odpowiedzi do klienta Ten schemat komunikacji zawiera przesłanie dwu komunikatów oraz specyficzną formę synchronizacji klienta i serwera. Proces serwera musi spostrzec komunikat z zamówieniem w kroku 1 możliwie jak najszybciej po jego nadejściu, a działania powodujące w procesie klienta wydanie zamówienia należy zawiesić (zablokować), wskutek czego proces czeka po wykonaniu kroku1, aż otrzyma odpowiedź w kroku3. Zauważmy, że proces staje się klientem lub serwerem tylko ze względu na konkretną wymianę informacji lub ciąg takich wymian, i podobnie klient może być serwerem dla innych procesów.

211 Rozsyłanie grupowe P3 P2 P1 P4 odbierz odbierz odbierz odbierz
W schemacie komunikacji rozsyłania grupowego procesy współdziałają, przekazując komunikaty. W tym przypadku adresatem komunikatu nie jest jeden proces, lecz grupa procesów. Jednej operacji grupowego wyślij odpowiada operacja odbierz, wykonana przez każdego członka grupy procesów. Wysyłanie do grupy

212 Rozsyłanie grupowe Komunikację w trybie rozsyłania grupowego można uzasadnić następującymi przykładami: Odnajdywanie obiektu Tolerowanie uszkodzeń Zwielokrotnione aktualizacje klient rozsyła komunikat z nazwą katalogu plików do grupy procesów serwerów plików. Na zamówienie odpowiada tylko ten, który przechowuje potrzebny katalog. klient rozsyła zmówienia do grupy procesów usługowych, z których każdy przetwarza je identycznie, po czym jeden lub więcej wysyła odpowiedź. Grupa dwu lub więcej serwerów może zapewnić ciągłą obsługę, nawet w wypadku awarii jednego lub większej ich liczby zdarzenie w rodzaju „jest godzina 18:01” można rozsyłać do grupy zainteresowanych procesów

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) Rozważmy prosty system kantoru kupieckiego, który ma za zadanie umożliwić kupcom używającym stacji roboczych orientowanie się w cenach rynkowych towarów, którymi obracają. Informacja do kantoru kupieckiego dociera z wielu różnych zewnętrznych źródeł i jest gromadzona przez procesy, które nazywamy dostawcami informacji. Kupcy są z reguły zainteresowani tylko swoimi specjalistycznymi towarami

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) Dostawca informacji musi wysyłać informacje do wszystkich procesów kupieckich, które zgłosiły zainteresowanie towarem. Aby zachować uczciwość wobec kupców zainteresowanych danym towarem wszyscy zainteresowani muszą otrzymać te same informacje i w tej samej kolejności.

215 Komunikacja grupowa stacja robocza źródło zewnętrzne stacja robocza K
dostawca informacji 1 K stacja robocza stacja robocza K Jeśli założymy, że źródła zewnętrzne dotyczą różnych towarów, to wystarczy, aby komunikaty od dostawców informacji docierały do wszystkich kupców w porządku ich wysyłania – uporządkowanie FIFO. Gdy informacja dostawca informacji 2 K K K K źródło zewnętrzne źródło komunikatu

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 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 Komunikacja miedzy procesami
Rozgłaszanie to rozsyłanie tego samego komunikatu do wszystkich procesów

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 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 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 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 Problem pięciu filozofów
Stół, wokół którego osadzono 5 filozofów.Pośrodku stoi talerz z nieograniczoną ilością spaghetti. W połowie odległości między każdymi dwoma filozofami leży jeden widelec – i tu jest problem, ponieważ nikt nie może jeść spaghetii jednym widelcem. Zakładany cykl życia filozofa składa się z: wykonywania czynności własnych (myślenia i zapisywania wyników w celu publikacji) zgłodnienia próba jedzenia jedzenie powrót do czynności własnych Używanie widelców, będących poza zasięgiem filozofa jest zabronione. Jedzenie można potraktować jako rodzaj sekcji krytycznej, gdyż dwóch siedzących obok filozofów nie może jeść jednocześnie. Widelce są zasobami krytycznymi, ponieważ nie mogą być użyte jednocześnie przez dwóch filozofów. Inna wersja: ryż i pałeczki. W 3 F 5 F 4 W 4

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

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. Może być nim np. lokaj, który będzie dbał o to, aby w każdej chwili co najwyżej czterech filozofów konkurowało o widelce. Rozwiązanie wyklucza blokadę (przynajmniej jeden z nich będzie mógł podnieść oba widelce i jeść) oraz zagłodzenie ( lokaj powstrzyma jednego z nich do czasu, aż któryś z pozostałych czterech skończy jeść)

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 Problem pięciu filozofów
Proces Filozof(i); begin j:=(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 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 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 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 Problem pięciu filozofów
Wartości początkowe: For i:=0 to 4 do begin Wolne[i]:=2; Filozof[i]:=0; end;

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 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 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 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 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 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 Schemat synchronizacji przy pomocy semafora
Proces A Proces B signal(S) wait(S) S=0 ktoś czeka S:=S-1 S:=S+1

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 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 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 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 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 Przejście procesu przez monitor
Monitor M Proces A procedure P(x:real); begin …. wait(C); …… signal(C); end; M.P(y) procesy oczekujące na wejście procesy oczekujące na C procesy wstrzymane po signal

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 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 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 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 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 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 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 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 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 Linie papilarne dla uproszczenia założono, że grubość linii papilarnych wynosi 1 piksel

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 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 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 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 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 Przykładowy wynik działania aplikacji: punkty niebieskie- rozwidlenia, zielone- punkty końcowe

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 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 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 Uzyskane wyniki przedstawia następujący wykres

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 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 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 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 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 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 Vi.

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

275 Algorytm 1. Główny procesor przesyła macierze A i B do p procesorów
2. for k←1 to parallel-do for i←k to n step p do if (otrzymałem „exit”) then return false C←Ai, D←Bi 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 Algorytm 3. If (wszystkie procesory skończyły pomyślnie) then return true Funkcja test(C,D) zwraca: true - kiedy istnieje taka funkcja f:C→D false - w przeciwnym przypadku

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

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 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 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 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 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 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 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 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 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 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 Algorytm Lamporta

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 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 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 ALGORYTM RICARTA I AGRAWALI
Proces, który otrzymał od innego procesu komunikat zamawiający wejście do sekcji działa następująco: jeżeli sam wcześniej nie wysłał prośby (nie czeka na dostęp), to odpowiada pozytywnie 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: jeżeli zapytywany proces wysłał swoja prośbę później, to także odpowiada pozytywnie 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) 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 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 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 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 ALGORYTM MAEKAWY Mając do dyspozycji N procesów w systemie Maekawa podzielił go na podzbiory z uwzględnieniem pewnych warunków: 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 "Reguła niepustego przejęcia" oznacza, że dla dowolnej pary podzbiorów istnieje element, który należy do każdego z nich "Reguła równej odpowiedzialności" oznacza, że każdy proces zawiera się dokładnie w takiej samej liczbie podzbiorów Ostatni warunek oznacza, że każdy proces zawiera się we własnym podzbiorze i zwany jest "zawieraniem się we własnym podzbiorze"

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 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 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 ALGORYTM MAEKAWY

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 Klastry 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.

303 Magistrala zrealizowana w postaci grafu połączeń

304 Schemat klastra obliczeniowego

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 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 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 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 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 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 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 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 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 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 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 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 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 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 Oprogramowanie Główna strona projektu MOSIX www.mosix.org
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 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/

321 Oprogramowanie PVMPovRay - specjalna wersja popularnego renderera przystosowana do pracy w klastrach 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

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

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 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 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 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 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 Skalowalność

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 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 Modele implementacji klastrów
Dwa podstawowe modele implementacji klastrów to Failover cluster Boewulf cluster

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 Beowulf cluster zwany inaczej Computational Cluster, przeznaczony głównie do zastosowań w środowiskach naukowych i ośrodkach badawczych

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 Beowulf cluster wszystkie węzły są kontrolowane przez jeden, zwany serwerem, węzłem głównym (ang. master node) lub front-endem

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

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 Europie

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 Warszawie

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.

344 Klastry w Polsce ( ) Największy, został sklasyfikowany na 231 miejscu listy TOP500 (listopad 2003) : nazwa: Holk 288 x Itanium 2 1.3GHz / 1.4GHz Moc: Krótki opis: 288 x Itanium 2 1.3GHz / 1.4GHz Instytucja:Centrum 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 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 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 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 HOLK ilość węzłów: 64+64 ilość 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 Ehternet Sieć: InfiniBand

349 Holk w kartonach

350 Montaż klastra

351 Dodawanie węzłów

352 Klaster ma też 256 kabli zasilających

353 HOLK

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 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 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 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 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 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 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 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 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 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)

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 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 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 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 administracyjnych

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 Kancelaria


Pobierz ppt "Programowanie współbieżne i rozproszone"

Podobne prezentacje


Reklamy Google