W pętli czasu, czyli dlaczego czas jest wyzwaniem dla komputerów

Bartosz Walter
B. Walter
02.01.2023
Przewidywany czas: 6 min

Właśnie rozpoczęliśmy nowy rok – nasze kalendarze się „wyzerowały” i zaczęły od nowa odmierzać dni i miesiące. W codziennym życiu nie stanowi to dla nikogo problemu. Okazuje się jednak, że problemy związane z cyklicznością rachuby czasu kilkukrotnie już okazały się sporym wyzwaniem dla… komputerów.

Dlaczego komputery mają problem z czasem?

W znanym filmie pt. „Dzień Świstaka” bohater wpada w pętlę czasu, każdego ranka zaczynając ten sam dzień, o którym z góry wiadomo, jak się zakończy i co się wydarzy nazajutrz. W rzeczywistości powszechnie stosowana rachuba czasu rzeczywiście jest cykliczna i w naturalny sposób naśladuje okresowe zmiany w przyrodzie, cykle ruchu ciał niebieskich lub zliczania innych, powtarzających się zjawisk. Co z tego wynika i dlaczego komputery mają problem z liczeniem czasu?

Przyczyna tkwi w sposobie, w jaki komputery zapisują i przetwarzają informacje. Zwykle do zapamiętania pojedynczej danej służy komórka pamięci o z góry określonej pojemności. Może ona przechowywać wartości z pewnego przedziału. W przypadku liczb (a czas to przecież pewna liczba jednostek) są to wartości całkowite, ujemne i dodatnie.

Dodawanie do tak zapamiętanej liczby kolejnych wartości powoduje, że wewnątrz naszej komórki pamięci kolejne bity (czyli najmniejsze kawałki informacji o wartości 0 lub 1) stopniowo stają wartość jedynek. Gdy liczba w komórce osiągnie wartość maksymalną, jaką może przyjąć, a wszystkie jej bity staną się jedynkami, wówczas próba kolejnego zwiększenia jej o 1 spowoduje taki sam efekt jak w przypadku dodawania w słupku: nastąpi tzw. przepełnienie, wszystkie bity zostaną one wyzerowane, a na początek liczby zostanie przeniesiona nowa jedynka.

Niestety, na tę dodatkową, „nadmiarową” jedynkę w komórce zabraknie już miejsca, co spowoduje jej „pominięcie”, a wówczas jedyne, co wewnątrz komórki pozostanie, to same zera, od których liczenie rozpocznie się na nowo. Jeżeli zatem projektant systemu kiedyś nie przewidział odpowiednio dużej komórki pamięci uwzględniającej długi okres czasu, wówczas komputer w momencie przepełnienia nieoczekiwanie przenosi się w czasie, w jednym kroku skacząc od wartości największej do najmniejszej. I właśnie w ten sposób powstają komputerowe pętle w czasie.

Liczenie upływu czasu w astronomii

Problem cykliczności kalendarzy stwarza zresztą sporo niedogodności również w nauce. Na przykład prowadzenie obserwacji zjawisk astronomicznych wymaga precyzyjnej, jednorodnie rosnącej miary czasu, która pozwoli np. na łatwe obliczanie różnic pomiędzy dowolnymi momentami. W typowym kalendarzu, opartym na miesiącach i zmiennej liczbie dni, jest to utrudnione. Aby zatem uniknąć rozmaitych pułapek związanych ze zmianą typów kalendarzy, latami przestępnymi i innymi nieregularnościami, w XVI wieku, gdy wprowadzano kalendarz gregoriański, francuski uczony Joseph Scaliger zaproponował jednocześnie pojęcie daty juliańskiej. Jest to liczba dni, które upłynęły od pewnej umownej daty – początku roku 4713 p.n.e. Czas wówczas nie uwzględnia miesięcy i dat, a jedynie samą, nieustannie rosnącą liczbę dni. Na przykład, dzień 1 stycznia 2023 roku będzie miał wartość 2459946.

Dlaczego wybrano właśnie ten dzień jako początek „ery juliańskiej”? Przyczyną była pragmatyka: z jednej strony zbiegały się w nim dwa kluczowe cykle astronomiczne: cykl Metona i cykl słoneczny, wyznaczane przez ruch ciał niebieskich, a z drugiej – data ta znajduje się w tak odległej przeszłości w historii ludzkości, że astronomowie rzadko muszą cofać się poza nią, jeżeli chcą wyznaczyć jakiś moment bardzo dokładnie. Jednym słowem – początek ery juliańskiej był efektem kompromisu, który okazał się na tyle skuteczny, że przetrwał aż do naszych czasów.

Przeczytaj też: Najciekawsze przypadkowe odkrycia naukowe!

Co ciekawe, dni juliańskie rozpoczynają się zawsze w południe (czasu europejskiego, czyli uniwersalnego), co pozwala uniknąć zmiany daty w środku nocy, gdy astronomowie są najbardziej zajęci. I choć czas Scaligera z dzisiejszej perspektywy jest bardzo europocentryczny i nie brał pod uwagę m.in. stref czasowych czy obrotu Ziemi, to jednak przyjął się i do dzisiaj wyznaczone parametry orbit ciał niebieskich zawierają informacje o czasie wyrażone właśnie w dniach juliańskich.

Pluskwa milenijna i inne wpadki komputerów związane z czasem

Wracając do komputerów, warto przypomnieć kilku ich popularnych wpadek związanych z pomiarem czasu. Jeden z najbardziej znanych była tzw. pluskwa milenijna. W wielu mikrokomputerach rok w dacie był zapamiętywany jedynie w postaci dwóch ostatnich cyfr, na przykład zamiast pełnego roku 1996 zapisywano 96, żeby zaoszczędzić kilka bitów pamięci na przechowanie nieistotnej (jak się wówczas wydawało) informacji.

Ta banalna i w sumie dość naiwna próba poczynienia oszczędności spowodowała spore zamieszanie, gdy mniej więcej w połowie ostatniej dekady XX wieku okazało się, że wiele kluczowych urządzeń infrastrukturalnych (np. sterujących elektrowniami) działa właśnie w ten sposób i zaraz po północy nowego roku 2000 będzie mieć spory problem z określeniem upływu czasu. Dlatego już kilka lat wcześniej rozpoczęła się ogólnoświatowa akcja weryfikacji tych urządzeń i ich wymiany, aby zwiększyć dokładność zapisu do czterech cyfr.

Szczęśliwie nic poważnego się wówczas nie stało, jednak data 1 stycznia 2000 roku stała się symbolem pokazującym, jak bardzo jesteśmy uzależnieni od technologii i jej drobnych niedoskonałości.

To też Cię zainteresuje: Misja Artemis 1: Ostatni rozdział, czyli powrót do domu

Natomiast dużo poważniejszym wyzwaniem może okazać się inna data: 19 stycznia 2038 roku. Tego dnia może dojść do przepełnienia licznika czasu w starszych, ale znacznie popularniejszych systemach pracujących pod kontrolą systemu operacyjnego Unix. W systemach tych czas mierzony jest jako liczba milisekund, jakie upłynęły od umownej daty: początku pierwszego dnia stycznia 1970 roku.

Problemem okazał się wspomniany wcześniej rozmiar zmiennej, w której przechowywana jest ta wartość. W wielu starszych systemach miała ona rozmiar jedynie 32 bitów. Wartość ta jest interpretowana jako liczba ze znakiem (plusem lub minusem), i właśnie tego dnia ulegnie ona przepełnieniu. W efekcie tuż po godzinie 3:14 czasu uniwersalnego nastąpi… 13 grudnia roku 1901 roku.

Problem tym razem jest o tyle istotniejszy, że w odróżnieniu od systemów narażonych na pluskwę milenijną, Unixy są bardzo długowieczne i jest prawdopodobne, że wiele z nich za kilkanaście lat nadal będzie w użytku. W związku z tym prawdopodobnie akcja przeglądu, weryfikacji i aktualizacji, z jaką mieliśmy do czynienia pod koniec ubiegłego stulecia, zostanie powtórzona na jeszcze większą skalę.

Do tej podobnej kategorii błędów należy problem zliczania tygodni w protokole NAV, wykorzystywanym w systemie GPS. Satelity wysyłają do odbiorników informacje zawierające m.in. dokładny pomiar czasu, zawierający także liczbę tygodni, jakie upłynęły od startu systemi. Starsza, ale ciągle wykorzystywana wersja protokołu NAV posiadała taki licznik tygodni o długości 10 bitów, który pozwalał na zapamiętanie wartości do 1023, co zapewniało bezproblemową pracę przez ponad 19 lat. A ponieważ era GPS zaczęła się w roku 1980, dotychczas licznik uległ przepełnieniu dwukrotnie: 1999 i 2019 roku.

O ile za pierwszym razem sytuacja nie była groźna (liczba odbiorników GPS na świecie była wówczas niewielka), to za drugim razem doszło do zakłócenia systemów nawigacyjnych w niektórych samolotach i na niektórych lotniskach, ale również m.in. w praskim systemie transportu publicznego, urządzeń meteorologicznych, a nawet sieci bezprzewodowej w Nowym Jorku. To spowodowało już całkiem spore zamieszanie, dlatego, aby uniknąć podobnych niespodzianek w przyszłości, nowsza, wdrażana wersja protokołu o nazwie CNAV, korzysta już z 13 bitów, co wydłuża cykl do 157 lat, dzięki czemu niebezpieczeństwo zostało na jakiś czas odsunięte.

Okazuje się zatem, że pozornie trywialny problem nieodłącznie związany z kalendarzem jest sporym problemem nie tyle dla ludzi, co właśnie dla… komputerów.

Bartosz Walter
Autor

Bartosz Walter

Jestem informatykiem specjalizującym się w procesach ewolucji i starzenia się programów komputerowych, ale interesuje mnie również szeroko rozumiana technologia, inżynieria i astronomia. Słowem - pasjonuje mnie cały świat i jego tajemnice. Uwielbiam też opowiadać o moich pasjach.
Zobacz również
Kiedy nie warto myśleć za dużo?

Kiedy nie warto myśleć za dużo?

04.04.2024 00:09:13

Podcasty NTL