05.Mechanizmy pracy rownoleglej

Download Report

Transcript 05.Mechanizmy pracy rownoleglej

Jarosław Kuchta
Mechanizmy pracy
równoległej
Zagadnienia

Algorytmy wzajemnego wykluczania


Mechanizmy niskopoziomowe




algorytm Dekkera
przerwania
mechanizmy ochrony pamięci
instrukcje specjalne
Mechanizmy wysokopoziomowe

mechanizmy synchronizacji


mechanizmy komunikacji


semafory, monitory
sygnały, komunikaty, zdarzenia, potoki, gniazda, zdalne wywołania procedur,
usługi sieciowe
Rodzaje komunikacji i synchronizacji
Algorytmy wzajemnego
wykluczania
Algorytmy wzajemnego
wykluczania (1)
2
P1
P2
P1
=1?
Czyja kolej
{1/2}
=2?
1
P2
Kod algorytmu 1
void P1()
{
do
{
while (czyja_kolej ==2) do ;
sekcja_krytyczna_1();
czyja_kolej = 2;
sekcja_lokalna_1();
} while (true);
}
void P2()
{
do
{
while (czyja_kolej ==1) do ;
sekcja_krytyczna_2();
czyja_kolej = 1;
sekcja_lokalna_2();
} while (true);
}
Wady algorytmu 1


Częstotliwość pracy P1 i P2 muszą być równe.
Jeśli P1 zawiesi się w swojej sekcji krytycznej (albo poza
nią), to P2 nie będzie już mógł działać.
Algorytmy wzajemnego
wykluczania (2)
P2
=N?
P1
P1 w sekcji krytycznej
N
{T/N}
T
P2
T
P2 w sekcji krytycznej N
{T/N}
=N?
P1
Kod algorytmu 2
void P1()
{
do
{
while (c2) do ;
c1 = true;
sekcja_krytyczna_1();
c1 = false;
sekcja_lokalna_1();
} while (true);
}
void P2()
{
do
{
while (c1) do ;
c2 = true;
sekcja_krytyczna_2();
c2 = false;
sekcja_lokalna_2();
} while (true);
}
Wada algorytmu 2

Nie zabezpiecza przed blokadą
P1 w sekcji krytycznej?
(c1)
P2 w sekcji krytycznej?
(c2)
Stan początkowy
N
N
P1 sprawdza c2
N
N
P2 sprawdza c1
N
N
P1 ustawia c1
T
N
P2 ustawia c2
T
T
P1 wchodzi do sekcji
krytycznej
T
T
P2 wchodzi do sekcji
krytycznej
T
T
Algorytm 3 – ustawianie c1 i c2
przed oczekiwaniem
void P1()
{
do
{
c1 = true;
while (c2) do ;
sekcja_krytyczna_1();
c1 = false;
sekcja_lokalna_1();
} while (true);
}
void P2()
{
do
{
c2 = true;
while (c1) do ;
sekcja_krytyczna_2();
c2 = false;
sekcja_lokalna_2();
} while (true);
}
Wada algorytmu 3

Również nie zabezpiecza przed blokadą
P1 w sekcji krytycznej?
(c1)
P2 w sekcji krytycznej?
(c2)
Stan początkowy
N
N
P1 ustawia c1
T
N
P2 ustawia c2
T
T
P1 sprawdza c2
T
T
P2 sprawdza c1
T
T
…
T
T
T
T
Algorytm 4 – wydłużone
oczekiwanie
void P1()
{
do
{
c1 = true;
while (c2) do
{
c1 = false;
wait_for_some_time(delay);
c1 = true;
}
sekcja_krytyczna_1();
c1 = false;
sekcja_lokalna_1();
} while (true);
}
void P2()
{
do
{
c2 = true;
while (c1) do
{
c2 = false;
wait_for_some_time(delay);
c2 = true;
}
sekcja_krytyczna_2();
c2 = false;
sekcja_lokalna_2();
} while (true);
}
Wada algorytmu 4

W specyficznej sytuacji nie zabezpiecza przed blokadą
P1 w sekcji krytycznej? (c1)
P2 w sekcji krytycznej? (c2)
Stan początkowy
N
N
P1 ustawia c1
T
N
P2 ustawia c2
T
T
P1 sprawdza c2
T
T
P2 sprawdza c1
T
T
P1 kasuje c1
N
T
P2 kasuje c2
N
N
P1 ustawia c1
T
N
P2 ustawia c2
T
T
Algorytm Dekkera
– połączenie algorytmu 1. i 4.
void P1()
{
do
{
c1 = true;
while (c2) do
{
if (czyja_kolej == 2)
{
c1 = false;
while (czyja_kolej == 2) do;
c1 = true;
}
}
sekcja_krytyczna_1();
czyja_kolej = 2;
c1 = false;
sekcja_lokalna_1();
} while (true);
}
void P2()
{
do
{
c2 = true;
while (c2) do
{
if (czyja_kolej == 1)
{
c2 = false;
while (czyja_kolej == 1) do;
c2 = true;
}
}
sekcja_krytyczna_2();
czyja_kolej = 1;
c2 = false;
sekcja_lokalna_2();
} while (true);
}
Mechanizmy
niskopoziomowe
Przerwania
wątek podstawowy
przerwanie o niższym priorytecie
przerwanie o wyższym priorytecie
Przerwania maskowalne
wątek podstawowy
czas maskowania przerwań
obsługa przerwań
zgłoszenia przerwań
Przerwania niemaskowalne
wątek podstawowy
czas maskowania przerwań
obsługa przerwań
zgłoszenia przerwań
Przerwania w systemie
równoległym


Wykorzystanie maskowania do ochrony sekcji
krytycznej
W systemie wieloprocesorowym brak gwarancji
ochrony sekcji krytycznej
Mechanizmy ochrony pamięci


Arbitraż dostępu do pamięci
Nieznana kolejność dostępu
Instrukcje specjalne

Na poziomie procesora




BTC – Bit Test and Complement
BTS – Bit Test and Set
BTR – Bit Test and Reset
Na poziomie języka (C#)

lock(object) { … }
Mechanizmy
wysokopoziomowe
Semafor

Zmienna całkowita


podnoszenie
opuszczanie

Wada:

programowanie
niestrukturalne
Monitor


Nadzoruje dostęp do wspólnego zasobu.
Tylko jeden proces ma dostęp w danej chwili.
Sygnał




Zmienna systemowa do komunikacji między procesami.
Proces 1. czeka na sygnał.
Proces 2. ustawia sygnał.
Ustawienie sygnału powoduje wznowienie procesu 1. i
jednoczesne skasowanie sygnału.
Komunikat




Informacja przekazywana od procesu 1. do procesu 2.
Komunikat trafia do kolejki komunikatów procesu 2.
Proces 2. co pewien czas sprawdza, czy ma jakieś
komunikaty w kolejce.
Odbiera komunikat z kolejki i obsługuje go.
Zdarzenie



Proces 1. definiuje zdarzenie jako procedurę obsługi.
Proces 2. wywołuje procedurę obsługi zdarzenia w
procesie 1.
Procedura obsługi jest wykonywana w wątku procesu 2,
ale ma dostęp do danych procesu 1.
Potok (pipe)



umożliwia wymianę danych między dwoma procesami
potok nienazwany łączy standardowe wyjście jednego
procesu ze standardowym wejściem drugiego procesu
potok nazwany – plik do którego jeden proces pisze, a
drugi proces czyta
Gniazdo (socket)



dwukierunkowy punkt końcowy połączenia
umożliwia wysyłanie i przyjmowanie danych
wykorzystywane przez aplikacje do komunikacji
międzyprocesowej przez sieć (Internet)
Zdalne wywołanie procedur
(RPC)



Remote Procedure Call
Standard RFC 1057
Protokół:





Serwer nasłuchuje na wybranym porcie.
Klient nawiązuje łączność z serwerem przez sieć komputerową i wysyła
żądanie usługi (dane)
Serwer wykonuje usługę i zwraca potwierdzenie lub kod błędu.
Protokoły (RPC, CORBA, DCOM, czy XML-RPC) ukrywają
mechanizm wywołania usługi.
Dla programisty zdalne wywołanie procedury ma taką samą
postać jak wywołanie każdej innej lokalnej procedury.
Usługa sieciowa (WebService)




Niezależna od platformy sprzętowo-programowej i
sposobu implementacji.
Opisywana przez język opisu usług WSDL (Web
Services Description Language)
Opublikowana i wyszukiwana w rejestrze usług za
pomocą standardowego mechanizmu (UDDI)
Wywołana zdalnie przez zdefiniowany interfejs.
Rodzaje usług sieciowych


Synchroniczne (jak RPC)
Asynchroniczne (np. RIA)


Po stronie serwera usługa jak zwykła funkcja.
Po stronie klienta:




zdefiniowanie operacji,
określenie danych wejściowych i procedury zwrotnej (callback),
asynchroniczne wywołanie – wysłanie żądania wykonania do serwera,
asynchroniczne wywołanie procedury zwrotnej przez serwer –
potwierdzenie wykonania, przekazanie żądanych danych, stwierdzenie
błędu wykonania.
Rodzaje komunikacji i
synchronizacji

Komunikacja synchroniczna – nadawca wysyła
komunikat i czeka na odpowiedź od odbiorcy.



wywołanie procedury zdarzenia
zdalne wywołanie procedur
Komunikacja asynchroniczna – nadawca wysyła
komunikat i kontynuuje działanie. Odbiorca odbiera i
obsługuje komunikat, po czym wysyła komunikat
potwierdzenia.


kolejki komunikatów
niektóre usługi sieciowe