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