Problem synchronizacji zegarów

Transkrypt

Problem synchronizacji zegarów
Uniwersytet Gdański
Mateusz Grzenkowicz
231806
Aleksander Polnik
236241
SYSTEMY ROZPROSZONE
Problem synchronizacji zegarów
Gdańsk, 2015
Wprowadzenie
Referat ten będzie dotyczył zagadnienia synchronizacji zegarów w systemach
rozproszonych.
Każdy system składa się z komponentów, które w jakimś stopniu są od siebie zależne,
dlatego istotny staje się problem ich organizacji i synchronizacji.
Pierwszym etapem będzie wyjaśnienie samej definicji problemu synchronizacji zegarów w
systemach rozproszonych. Następnie poruszone zostanie zagadnienie synchronizacji
zegarów logicznych i fizycznych. Na koniec przedstawione zostaną podstawowe algorytmy
mające na celu rozwiązanie problemu synchronizacji.
Definicja
Istnieje wiele zagadnień, które w bardziej lub mniej bezpośredni sposób stykają się z
problem synchronizacji. Za przykład mogą posłużyć dwie zupełnie odrębne i
niezsynchronizowane maszyny, które generują komunikat o różnych porach. Zakładając
sytuację w której, że maszyna M1 wysyła komunikat o godz. 00:30:00 swojego czasu, zaś
maszyna M2 wysyła taki komunikat o godz. 00:30:30 możliwe jest, że mimo 30
sekundowej różnicy, wiadomość z maszyny M2 zostanie wygenerowana przed maszyną
M1, co jest efektem desynchronizacji tych zegarów.
Synchronizacja zegara (ang. clock synchronization) – problem z zakresu informatyki i
inżynierii opierający się na założeniu, iż występują pewne przesunięcia czasowe pomiędzy
zegarami w różnych komputerach. Efektem ruchów zegarów jest ich desynchronizacja.
Zegary fizyczne
Zegary dzieli się na fizyczne oraz logiczne. Zegar fizyczny (kwarcowy lub atomowy) to
zegar współpracujący z układami komputera przeznaczony do mierzenia czasu
astronomicznego. Stan rejestrów tego zegara w komputerze, może być regulowany przez
użytkownika za pomocą polecenia systemu operacyjnego (np. time). W przypadku zegara
kwarcowego, którego działanie opiera się na zliczaniu precyjnych drgań kryształu kwarcu,
wykorzystywane są dwa rejestry: rejestr licznika (counter) oraz rejestr podtrzymujący
(holding register). Każdy wybijany takt przez czasomierz systemowy zmniejsza wartość
rejestru licznika. Gdy wartość dojdzie do zera wówczas wywoływane jest przerwanie i
zostaje załadowana do niego wartość z rejestru podtrzymującego. W ten sposób, w
zależności od wartości rejestru podtrzymującego czasomierz może wytwarzać przerwania
w okresach milisekundowych – wykorzystywane do sterowania działaniami
asynchronicznymi. Zmieniając wartość rejestru podtrzymującego możemy sterować
częstotliwością wywoływania przerwań, a tym samym częstotliwością tzw. impulsów
zegara (clock tick).
Do pomiaru upływu rzeczywistego czasu stosuje się obecnie system UTC.
UTC (Uniwersal Coordinated Time) czyli Uniwersalny Czas Koordynowany jest to
ulepszony system TAI (International Atomic Time) czyli międzynarodowy czas atomowy,
który poprzez wprowadzenie tz.w sekund przestępnych wyeliminował błędy swojego
poprzednika.
2
Mimo dużej lokalnej dokładności, wskazania zegarów fizycznych zamontowanych w
różnych komputerach z upływem czasu rozbiegają się. Proces ten, nazywany odchyleniem
wskazań zegara powoduje kłopoty z uzgadnianiem czasu zegara fizycznego w
komputerach działających w sieciach i konieczności stosowania algorytmów
synchronizacji. Celem takiej synchronizacji może być np. potrzeba zsynchronizowania
pewnej grupy maszyn względem dedykowanej stacji.
Rys.1. Przesunięcia czasowe względem zegara "doskonałego".
Na powyższym rysunku zakłada się istnienie pewnego zegara idealnego oznaczanego
jako t. Każda z tych maszyn, posiada zegar wyznaczający czas o wartości C.
W przypadku, kiedy dla pewnej maszyny czas C(t) = t, mamy do czynienia z sytuacją, w
której zegar w tej maszynie jest zegarem doskonałym (dC/dt = 1). W praktyce jednak,
zegary te są szybsze lub wolniejsze w stosunku do zegara
doskonałego t (dC/dt > 1 lub dC/dt > 1 )
Algorytm Cristiana
Jednym z rozwiązań problemu synchronizacji zegarów w maszynach jest Algorytm
Cristiana. Algorytm ten jest przeznaczony głównie dla środowisk rozproszonych, w których
zakłada się, że przynajmniej jedna z maszy pełni funkcję serwera czasu.Musi być więc
wyposażona w odbiornik radiowy lub satelitarny który umożliwia pobranie dokładnego
czasu np. za pomocą sygnału GPS. Działanie tego algorytmu opiera się na wysyłaniu
komunikatu do serwera z zapytaniem o podanie aktualnego czasu. Po otrzymaniu
zapytania, serwer możliwie szybko przesyła informacje o aktualnym czasie UTC.
Stosowanie jednak takiej metody nie jest pozbawione wad. Biorąc pod uwagę scenariusz,
3
w którym zegar nadawcy wymierza czas zbyt szybko, zwykle jego przypisanie mogłoby
spowodować sytuację, w której płynie on wstecz, dlatego każda maszyna co /2p wysyła
komunikat do serwera czasu z pytaniem o bieżący czas. Serwer czasu podaje w
odpowiedzi czas CUTC a każda z maszyn koryguje czas stopniowo.
p - stała
 - odchylenie czasu między dwoma maszynami wymaga korekty czasu co najmniej co
/2p sekund
Oprócz tego istnieje pewien koszt w postaci czasu komunikacji, który powoduje, że
wartość czasu UTC wysyłana przez serwer jest nieaktualna po nadejściu komunikatu do
nadawcy. Problem ten rozwiązuje się za pomocą prostej metody, która polega na
zapamiętaniu przedziału czasowego zawartego pomiędzy momentem T0, w którym
wysłano zapytanie do serwera a momentem T1, czyli odpowiedzią. Przyjmuje się, że
połowa tego przedziału jest czasem komunikacji od serwera do klienta.
Odejmując dodatkowo od tej wartości czas przetwarzania zapytania przez serwer, można
zwiększyć precyzję oszacowania czasu przez nadawcę.
W celu poprawienia dokładności można wykonać serię takich pomiarów. Pomiary, w
których różnica pomiędzy wysłaniem zapytania a otrzymaniem odpowiedzi przekroczy
pewną wartość progową, są pomijane, jako ofiary zagęszczeń w sieci a oszacowania
dokonane na podstawie pozostałych prób można uśrednić, otrzymując lepszą wartość.
Można też uznać, że komunikat, który wrócił najszybciej, jest najdokładniejszy, gdyż
przypuszczalnie napotkał najmniejszy ruch po drodze, więc najlepiej reprezentuje czysty
czas przenoszenia.
4
Rys.2. Iustracja algorytmu Cristiana
Powyższy rysunek jest przykładem, w którym maszyna próbuje zsynchronizować swój
lokalny zegar z zegarem serwera czasu. Aby tego dokonać, generuje komunikat z
zapytaniem o czas do serwera a ten odsyła do maszyny informację o swoim lokalnym
czasie. Po odebraniu informacji, maszyna oblicza nowy czas i ustawia według niego swój
zegar.
Algorytm Berkeley
Algorytm Berkeley został opracowany przez Gusella i Zatti w 1989 roku i zakładał, że
żadna maszyna nie posiada dokładnego źródła czasu, z którym jest w stanie się
zsynchronizować. W przeciwieństwie więc do założeń przyjętych w poprzednim
algorytmie, tutaj serwer czasu jest aktywny i odpytuje okresowo każdą maszynę o jej
aktualny czas. Na podstawie tych odpowiedzi oblicza ona średni czas i nakazuje innym
maszynom ustawić zegar na nowy lub zwolnić jego takt, aż do osiągnięcia określonej
redukcji.
Rys.3. Ilustracja algorytmu Berkeley
Relacja uprzedniości zdarzeń
Analizując problem synchronizacji należałoby wspomnieć o relacji uprzedniości zdarzeń.
Jest to relacja, która określa kiedy pewne zdarzenie a poprzedza zdarzenie b. Jeśli
pomiędzy zdarzeniami ona zachodzi, to jest prawdziwa dla wszystkich procesów.
Załóżmy: niech zdarzenie a poprzedza zdarzenie b.
Relacja zachodzi w następujących przypadkach:
- zdarzenie a i b działają wewnątrz tego samego procesu gdzie a występuje przed b,
- a jest zdarzeniem wysłania komunikatu, b jest zdarzeniem odebrania tego komunikatu
(przez inny proces),
- zdarzenie a poprzedza zdarzenie b, gdy istnieje sekwencja zdarzeń rozpoczynająca się
od zdarzenia a i kończąca zdarzeniem b, taka że dla każdej pary kolejnych zdarzeń
zachodzi jedna z dwóch wcześniej opisanych sytuacji.
Jeżeli pomiędzy dwoma zdarzeniami nie zachodzi relacja uprzedniości, są to zdarzenia
współbieżne.
5
Eik oznacza zdarzenie, które było k-tym zdarzeniem procesu Pi
Zegary logiczne
Synchronizacja zegarów nie musi wcale być bezwzględna i można to wykazać.
W przypadku dwóch procesów, które się nie komunikują ze sobą w żaden sposób, nie ma
takiej potrzeby, aby ich zegary były zsynchronizowane. Brak synchronizacji w tym
przypadku będzie niezauważalny, czyli nie spowoduje żadnych problemów. Dla pewnej
klasy algorytmów liczy się tylko spójność wnętrza zegarów, a niekoniecznie to, że
odzwierciedlają czas rzeczywisty. Przykładem może być przypadek, gdy istotna jest
kolejność występowania zdarzeń, a nie dokładny czas ich występowania.
Znaczniki czasu Lamporta
Zostały one opracowane jako sposób pomiaru czasu logicznego. Każde zdarzenie
a ma przypisaną pewną wartość czasu C(a). Jeśli weźmiemy dwa zdarzenia a i b,
gdzie zdarzenie a poprzedza zdarzenie b, to powinna zachodzić nierówność
C(a) < C(b). Uwzględniono tutaj wspomnianą wcześniej koncepcję uprzedniości
zdarzeń. Każdy wysłany komunikat zawiera czas swojego nadania. Odbiorca, który
odbiera wiadomość porównuje czas własny z czasem nadania. Jeżeli zegar
odbiorcy jest mniejszy od czasu nadania komunikatu, przesuwa swój zegar w przód
do wartości równej czasowi nadania powiększonej o pewną wartość d. Dodanie d w
tym przypadku wymusza postęp pomiędzy każdą parą zdarzeń.
E i k → E j l ⟹ C ( E i k )<C ( Ei j )
Podsumowanie
Reasumując problem synchronizacji jest problemem powszechnym. Spotykamy się z nim
na co dzień jako informatycy i nie tylko. Powyższe zagadnienia przedstawiają solidne
podstawy wyjaśniające problem oraz przedstawiają popularne rozwiązania, jednocześnie
zachęcamy do większego zagłębienia się w tematy dotyczące problemów synchronizacji,
ponieważ wydaje się on ciekawy i jest ciągle aktualny.
6

Podobne dokumenty