Programowanie współbieżne i rozproszone

Slides:



Advertisements
Podobne prezentacje
Sieci komputerowe Protokół TCP/IP.
Advertisements

Podstawowe pojęcia programowania współbieżnego
Mechanizmy pracy równoległej
Architektura SAP R/3 Wybrane zagadnienia.
Sieci VLAN.
Synchronizacja w systemach rozproszonych
SYSTEMY OPERACYJNE WSTĘP
Semafory Autorzy : Michał Winciorek Łukasz Jackowicz.
Rozszerzalność systemów rozproszonych
ZŁOŻONOŚĆ OBLICZENIOWA
Urządzenia sieciowe Topologie sieci Standardy sieci Koniec.
LITERATURA M.Ben-Ari, Podstawy programowania współbieżnego i rozproszonego, WN-T, 1996 I.Foster, Designing and Building parallel programs, Cocepts and.
Wykład nr 7: Synchronizacja procesów
Wykład nr 1: Wprowadzenie. Pojęcia podstawowe
Systemy operacyjne Wykład nr 4: Procesy Piotr Bilski.
Wykład nr 2: Struktura systemu komputerowego a system operacyjny
Wykład 10 Prowadzący: dr Paweł Drozda
Synchronizacja Rozdział 5.
Systemy operacyjne.
Domeny kolizyjne i rozgłoszeniowe
Instytut Fizyki Teoretycznej
Wybrane protokoły aplikacyjne TCP/IP
ZARZĄDZANIE PROCESAMI
Problem rozbieżności czasów jednym z wielu problemów pojawiających się w systemach rozproszonych jest rozbieżność wartości zegarów na poszczególnych węzłach-maszynach.
Programowanie współbieżne
Opracował: mgr Mariusz Bruździński
Diagramy czynności.
Komputery macierzowe.
Opracowanie: Maria W ą sik. Pierwsze komputery budowano w celu rozwi ą zywania konkretnych problemów. Gdy pojawiało si ę nowe zadanie, nale ż ało przebudowa.
Protokół Komunikacyjny
Systemy operacyjne.
RODZAJE TRANSMISJI PRZESYŁANIE INFORMACJI W MODELU WARSTWOWYM
Zasada działania komputera
Wirtualne spotkania Microsoft
SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Sieci komputerowe.
Problem sekcji krytycznej
Maszyna wirtualna ang. virtual machine, VM.
Koncepcja procesu Zadanie i proces. Definicja procesu Process – to program w trakcie wykonywania; wykonanie procesu musi przebiegać w sposób sekwencyjny.
Algorytmy.
POŚREDNIK Jak reprezentowana jest informacja w komputerze? liczby – komputer został wymyślony jako zaawansowane urządzenie służące do wykonywania.
Wybrane zagadnienia relacyjnych baz danych
Modelowanie obiektowe Diagramy czynności
Jak można nauczyć korzystania z prawdopodobieństwa.
Sieci komputerowe.
Wykład 7 Synchronizacja procesów i wątków
W ą t e k (lekki proces) thread.
Systemy operacyjne i sieci komputerowe
Systemy rozproszone  Rozdzielenie obliczeń między wiele fizycznych procesorów.  Systemy luźno powiązane – każdy procesor ma lokalną pamięć; procesory.
Algorytmika.
Obliczalność czyli co da się policzyć i jak Model obliczeń maszyna licznikowa dr Kamila Barylska.
Temat 3: Integralność danych. Integralność danych, określana również mianem spójności danych, jest to funkcja SZBD, która gwarantuje, że dane nie zostaną.
Diagram aktywności (czynności)
Temat 7: Topologie sieciowe (logiczna i fizyczna)
Jednym z podstawowych celów tworzenia sieci komputerowych jest współdzielenie zasobów, takich jak pliki lub drukarki. Każdy z takich zasobów musi być udostępniony,
Procesor, pamięć, przerwania, WE/WY, …
Andrzej Majkowski 1 informatyka +. 2 Bezpieczeństwo protokołu HTTP Paweł Perekietka.
Diagram czynności Diagram czynności (activity diagram) służy do modelowania dynamicznych aspektów systemu. Diagram czynności przedstawia sekwencyjne lub.
Procesy, wątki Program a proces Proces: Przestrzeń adresowa, kod, dane, stos (część pamięci do przechowania zmiennych lokalnych i niektórych adresów) Otwarte.
Diagramy przepływu danych
Metody komunikacji i synchronizacji w obliczeniach równoległych Michał Radziszewski.
Model warstwowy ISO-OSI
WPROWADZENIE DO MIKROPROCESORÓW. Klasyfikacja mikroprocesorów SIMD – ang. Single Instruction Multiple Data SISD – ang. Single Instruction Single Data.
Wstęp do programowania Wykład 7
Algorytmy, sposoby ich zapisu.1 Algorytm to uporządkowany opis postępowania przy rozwiązywaniu problemu z uwzględnieniem opisu danych oraz opisu kolejnych.
Czym będziemy się dziś zajmować? System: ➢ wspomagający kontrolowanie ruchu kolejowego; ➢ w początkowej fazie rozwoju; ➢ złożony z dwóch konwerterów, pozwalających.
Wątki, programowanie współbieżne
materiały dla uczestników
POJĘCIE ALGORYTMU Wstęp do informatyki Pojęcie algorytmu
Zapis prezentacji:

Programowanie współbieżne i rozproszone

Programowanie równoległe i rozproszone dotyczy tworzenia współpracujących ze sobą procesów współbieżnych wykonywanych na komputerach równoległych (czyli albo na superkomputerach posiadających tysiące procesorów, albo na lokalnych czy rozległych sieciach stacji roboczych jedno i wieloprocesorowych)

Definicja komputera sekwencyjnego Komputer von Neumanna Procesor centralny (Central processor unit CPU ) wykonuje program umieszczony w załączonej pamięci, odczytując kolejne instrukcje programu (z pamięci) i zapisując dane (do pamięci)

„Wielokomputer” (multicomputer) Pewna ilość komputerów von Neumanna połączonych siecią (interconnect network) Każdy procesor wykonuje swój program Program ten ma dostęp do swojej pamięci lokalnej, oraz może wysyłać i odbierać komunikaty poprzez sieć. Operacje send/receive używane są do komunikacji z innymi komputerami lub w celu czytania i pisania z/do ich odległych pamięci.

Podział ze względu na ilość wykonywanych programów i czytanych danych MIMD = Multiple Instructions Multiple Data (Wiele programów wiele danych) - każdy procesor wykonuje swój własny program na swoich własnych danych. SIMD = Single Instructions Multiple Data (Pojedynczy program wiele danych) - każdy procesor wykonuje ten sam program na różnych danych.

Podział ze względu na ilość wykonywanych programów i czytanych danych MISD = Multiple Instruction Single Data (Wiele programów te same dane) każdy procesor wykonuje swój własny program na tych samych danych (Praktycznie nie występują) SISD = Single Instruction Single Data (Jeden program te same dane) to klasyczna architektura sekwencyjna (wiele kopii tego samego komputera sekwencyjnego)

Podział ze względu na typ pamięci Komputer o pamięci współdzielonej (shared memory computer) =każdy procesor posiada dostęp do dowolnego fragmentu pamięci, konieczne jest zastosowanie różnych mechanizmów zabezpieczających dany obszar pamięci przed jednoczesnym dostępem wielu procesów (np. semafory)

Podział ze względu na typ pamięci Komputer o pamięci rozproszonej (distributed memory computers) =każdy procesor posiada dostęp do swojego fragmentu pamięci, konieczne jest zastosowanie mechanizmów wymiany informacji pomiędzy procesorami (np. mechanizm przesyłania komunikatów)

Podział ze względu na typ pamięci Hybrydy (mieszańce) =komputery o pamięci rozproszonej, o węzłach wieloprocesorowych

na komputerze o pamięci rozproszonej na każdym węźle wykonywane są procesy (programy sekwencyjne) które komunikują się ze sobą, wymieniając dane i synchronizując prace

Na komputerze o pamięci współdzielonej wykonywane są wątki działające we wspólnym obszarze pamięci. Może być tak że każdy wątek wykonywany jest przez jeden procesor. Wtedy wszystkie wątki wykonywaną są równolegle.

Może być tak że na komputerze o pamięci współdzielonej mamy więcej wątków niż procesorów i wtedy jeden procesor wykonuje wiele wątków. Wtedy wszystkie wątki przypisane do jednego procesora nie są wykonywane równolegle ale są wykonywane współbieżnie.

Może być tak że na komputerze o pamięci rozproszonej mamy wiele programów wykonywanych przez jeden procesor i wtedy mamy do czynienia z wieloma wątkami pracującymi na jednym węźle, w obrębie obszaru pamięci jednego procesora. Wątki te wtedy wykonywane są współbieżnie ale nie równolegle.

Może być tak że na maszynie hybrydowej mamy wiele wątków wykonywanych na każdym węźle przez wiele procesorów. Jeśli do każdego procesora przypisany jest jeden wątek wówczas mamy do czynienia z równoległym wykonaniem wielu wątków.

Modele programowania Task (zadanie) = program sekwencyjny + pamięć lokalna + interface do komunikacji z innymi taskami (kanały komunkacyjne wejścia i wyjścia). Chanel – połączenie wyjściowego portu komunikacyjnego jednego taska z wejściowym portem komunikacyjnym drugiego taska

Tasks and Channels (Foster „D&BPP”) (zadania i kanały komunikacyjne) Obliczenia równoległe składają się z jednego lub więcej tasków. Taski wykonują się współbieżnie Ilość tasków może się zmieniać w trakcie wykonania.

Kanały komunikacyjne channels mogą być tworzone dynamicznie.

Tasks and Channels (Foster „D&BPP”) (zadania i kanały komunikacyjne) Akcje wykonywane przez task: read / write (operacja odczytu i zapisu na pamięci lokalnej)

Tasks and Channels (Foster „D&BPP”) (zadania i kanały komunikacyjne) send (wysłanie komunikatu do innego task’a) operacja send odbywa się poprzez kanał komunikacyjny, od wyjścia portu komunikacyjnego jednego tasku do wejścia portu komunikacyjnego drugiego tasku zakładamy że operacja send jest asynchronicza – kończy się natychmiast – proces nie czeka na potwierdzenie odbioru przesłanej wiadomości

Tasks and Channels (Foster „D&BPP”) (zadania i kanały komunikacyjne)

Tasks and Channels (Foster „D&BPP”) (zadania i kanały komunikacyjne) receive (odebranie komunikatu od innego task’a)

Tasks and Channels (Foster „D&BPP”) (zadania i kanały komunikacyjne) create (stworzenie nowego task’a)

Modele programowania terminate (zakończenie swojego działania)

Modele programowania taski mogą być mapowane na fizyczne procesory w różny sposób nie wpływa to na semantykę programu na przykład każdy task może zostać przypisany do oddzielnego procesora, lub wiele tasków może zostać przypisanych do wielu procesorów zakładamy że jeden task nie może być przypisany do wielu procesorów

Modele programowania Message Passing Tym się różni od modelu Tasks and Channels że nie pozwala na tworzenie i usuwanie nowych tasków. Przykład: standard MPI (Message Passing Interface) najbardziej powszechne implementacje standardu: mpich, lam standard PVM (Parallel Virtual Machine)

Modele programowania Data parallelism Te same operacje wykonywane są na wielu strukturach danych Przykład: High Performance Fortran

Modele programowania Shared memory programming model Taski pracują na współdzielonej pamięci konieczne są mechanizmy takie jak semafory w celu zapewnienia synchronizacji dostępu wielu tasków do tego samego obszaru pamięci

Wzajemne wykluczanie Założenia modelowe: System rozproszony składa się z N węzłów (1..N). Jeden węzeł odpowiada jednemu procesowi. Komunikaty wysyłane od jednego procesu do innego dochodzą w tym samym porządku. Każdy komunikat dochodzi w skończonym czasie. Sieć jest w pełni połączona, każdy proces może wysłać bezpośrednio komunikat do każdego innego.

Wzajemne wykluczanie Niech Si oznacza zbiór procesów udzielających pozwolenia procesowi i. Wymagane własności algorytmów wzajemnego wykluczania: dla każdej pary indeksów i, j zbiory Si oraz Sj mają elementy wspólne.

Wzajemne wykluczanie Pożądane własności algorytmów wzajemnego wykluczania: Zbiory Si, ..., SN są równoliczne. Każdy proces j należy do takiej samej liczby zbiorów Si. Każdy proces i należy do Si.

Algorytm scentralizowany W systemie istnieje jeden koordynator, tylko on może wyrazić zgodę na wejście procesu do sekcji krytycznej Proces wysyła do koordynatora komunikat z żądaniem Kiedy otrzyma od niego komunikat z odpowiedzią, wtedy może wejść do sekcji Po wyjściu wysyła do koordynatora komunikat zwalniający.

Algorytm scentralizowany Koordynator po otrzymaniu żądania sprawdza stan sekcji Jeśli sekcja jest wolna, to wysyła zgodę, np. wstawia żądanie do kolejki Po otrzymaniu komunikatu zwalniającego usuwa z kolejki jeden z komunikatów i wysyła zgodę do czekającego procesu. Jeśli koordynator ulegnie awarii, to jego miejsce musi zająć inny proces.

Proces 1 prosi koordynatora o pozwolenie na wejście do sekcji krytycznej. Uzyskuje pozwolenie.

Proces 2 prosi o pozwolenie na wejście do tej samej sekcji krytycznej Proces 2 prosi o pozwolenie na wejście do tej samej sekcji krytycznej. Koordynator nie odpowiada

Kiedy proces 1 opuszcza sekcję krytyczną, zawiadamia o tym koordynatora, a ten wówczas wysyła procesowi 2 pozwolenie na wejście do sekcji.

Algorytmy wzajemnego wykluczania W przypadku krążącego żetonu, jeśli każdy proces stale chce wejść do sekcji krytycznej, to każde przesunięcie żetonu skutkuje jednym wejściem do sekcji i jednym wyjściem W przypadku odwrotnym - żaden proces nie chce wejść - żeton może krążyć w pierścieniu bardzo długo nim ktokolwiek wejdzie (liczba komunikatów przypadających na jedno wejście jest nieograniczona)

opóźnienie pomiędzy we/wy problemy algorytm komunikaty we/wy opóźnienie pomiędzy we/wy problemy zcentralizowany 3 2 Możliwa awaria koordynatora rozproszony 2(n-1) Możliwa awaria każdego procesu przekazywanie żetonu 1 do  O do (n-1) Możliwe duże opóźnienie

Zegary logiczne jednym z wielu problemów pojawiających się w systemach rozproszonych jest rozbieżność wartości zegarów na poszczególnych węzłach-maszynach każda maszyna może posiadać zegar chodzący z inną prędkością, zegary mogą się śpieszyć bądź spóźniać

Zegary logiczne wiele algorytmów i aplikacji w systemach liczących posługuje się pojęciem czasu i zegarem (np. make) w systemie scentralizowanym nie ma problemów z porządkowaniem zdarzeń w czasie w systemie rozproszonym utrzymywanie pojęcia globalnego czasu jest zadaniem niebanalnym, gdyż każdy procesor posługuje się własnym lokalnym zegarem.

Zegary logiczne W wielu zastosowaniach wystarczy wzajemna spójność różnych zegarów, ich zgodność z czasem rzeczywistych jest nieistotna Procesy nie muszą się zgodzić co do dokładnej wartości zegara, wystarczy im możliwość porządkowania zdarzeń w czasie

Zegary logiczne W systemie rozproszonym utrzymywanie pojęcia globalnego czasu jest zadaniem niebanalnym, gdyż każdy procesor posługuje się własnym lokalnym zegarem W ogólności, czas wirtualny zależy tylko od zdarzeń zachodzących w systemie, a nie od wartości zegarów fizycznych

Zegary logiczne istnieje bardzo dużo propozycji zmierzających do synchronizacji zegarów algorytm Cristiana algorytm synchronizacji zegarów Berkeley, protokoły NTP (ang. Network Time Protocol) DTS (ang. Distributed Time Service)

Algorytm Cristiana Algorytm ten jest przeznaczenie głównie dla środowisk rozproszonych w których jeden z węzłów jest serwerm czasu (ang. time server ) W algorytmie tym zakłada się, że każda maszyna co pewien określony czas wysyła do serwera czasu zapytanie o podanie aktualnego czasu Po otrzymaniu tego zapytania, serwer odpowiada prędko jak tylko może i przesyła aktualny czas UTC

Algorytm Cristiana nadawca z kolei, po otrzymaniu informacji o czasie od serwera, zanim ustawi wartość swojego zegara, musi uwzględnić parę kwestii zwykłe przepisanie czasu nadesłanego z serwera mogłoby spowodować, że czas płynie wstecz

Algorytm Cristiana Może się tak zdarzyć jeżeli zegar nadawcy wymierza czas zbyt szybko istnieje pewien koszt w postaci czasu komunikacji. aby rozwiązać ten problem nadawca może np. zapamiętać przedział czasowy zawarty pomiędzy momentem T0 , w którym wysłano zapytanie do serwera i momentem T1 , kiedy przyszła odpowiedź z serwera

Algorytm Cristiana W najprostszym przypadku przyjmuje się, że połowa tego przedziału jest czasem komunikacji od serwera do klienta (( T1 – T0 ) / 2 ) Jeśli dodatkowo znamy czas (T2 ) przetwarzania zapytania przez serwer, możemy poprawić oszacowanie czasu przez nadawcę i jako czas przesyłania komunikatu bierzemy wtedy połowę wartości ( T1 - T0 - T2 )

Zegary logiczne istotą zegarów logicznych jest żądanie zapewnienia, by każde zdarzenie w systemie posiadało własną, unikalną etykietę czasową w szczególności by zdarzenie wysłania wiadomości miało zawsze etykietę czasową mniejszą niż zdarzenie odebrania wiadomości (by nie można było odbierać wiadomości „z przyszłości”) spełnienie tych wymagań jest warunkiem koniecznym poprawności niektórych algorytmów (na przykład wielu algorytmów wzajemnego wykluczania

Zegary logiczne Pojęcie zegarów logicznych pochodzi od Lamporta Podczas synchronizowania zegarów korzysta się z relacji uprzedniości (ang. happened-before), która może zachodzić dla dwóch zdarzeń Zapisuje się ją jako: a->b.

Relacja Lamporta Relację tę można zaobserwować w dwóch sytuacjach: Jeśli a i b są zdarzeniami, które zaszły w ramach tego samego procesu i a wystąpiło przed b, to a->b. Jeśli a jest zdarzeniem wysłania komunikatu przez jeden proces, a b zdarzeniem odebrania tego komunikatu przez inny proces, to a->b.

Relacja ta jest relacją przechodnią. Jeśli nie zachodzi a->b ani nie zachodzi b->a, to mówimy, że zdarzenia a i b są współbieżne nic nie można powiedzieć o ich wzajemnym uporządkowaniu w czasie

Jest nam potrzebny taki mechanizm mierzenia czasu, że dla każdego zdarzenia a możemy przypisać mu czas zajścia C(a), co do którego zgodzą się wszystkie procesy (można go implementować jako licznik) Musi zachodzić:     a->b, to C(a)->C(b)

Implementacja: W każdym procesie Pi definiujemy zegar logiczny Ti. Zegar można zaimplementować w postaci prostego licznika, zwiększanego między wystąpieniami każdych dwóch kolejnych zdarzeń w procesie. Jeśli a i b zaszły w procesie Pi i a->b, to Ci(a)->Ci(b).     Jeśli a jest zdarzeniem wysłania komunikatu m przez proces Pi, to m niesie stempel Tm = Ci(a).   Pj po odebraniu m w chwili Cj uaktualnia swój czas: Cj' = max(Cj,Tm) + 1.

Relacja całkowitego porządku: 1.      Ci(a) < Cj(b) lub 2.      Ci(a) = Cj(b) i Pi < Pj

(a) zegary bez synchronizacji, (b) synchronizacja zegarów wg Lamporta