Próba czasu.

Czas jest jednym z podstawowych zasobów każdego systemu informatycznego. Warto więc sprawdzić, czy nasze komputerowe zegary są dokładne, może się bowiem zdarzyć, że w pogoni za ułamkami sekund będziemy "gubić" całe dni. Także wiele pakietów programowych będzie wystawionych na poważną próbę w związku ze zbliżającym się rokiem 2000.

Czas jest jednym z podstawowych zasobów każdego systemu informatycznego. Warto więc sprawdzić, czy nasze komputerowe zegary są dokładne, może się bowiem zdarzyć, że w pogoni za ułamkami sekund będziemy "gubić" całe dni. Także wiele pakietów programowych będzie wystawionych na poważną próbę w związku ze zbliżającym się rokiem 2000.

Kiedy bankomat "połknie" nam naszą kartę uprzejmie informując, że od pół wieku mamy zablokowane konto, a w

skrzynce pocztowej czy elektronicznej znajdziemy rachunek za telefon, do zapłacenia z odsetkami za 99 lat, a także list od firmy ubezpieczeniowej gratulującej 120 lat bezwypadkowej jazdy samochodem, będziemy wiedzieć, że oto zaczęło się trzecie tysiąclecie. Czy za cztery lata w styczniu grozi nam eksplozja wielkiej, komputerowej bomby "zegarowej"?

Dwie zamiast czterech

Problem polega na tym, że znaczna część oprogramowania wciąż operuje datą, w której rok jest tylko dwucyfrowy. Komputery sterowane takimi aplikacjami, bez dodatkowych informacji, po prostu "zgłupieją" w krytycznym momencie. Wyobraźmy sobie, że mamy zapłacić określoną kwotę pieniędzy na rzecz urzędu finansowego do 1 grudnia br. Jeśli tego nie uczynimy, to rutynowy program w wiadomej instytucji 1 stycznia 1997 r. obliczy liczbę dni między datą bieżącą a 1 1996: 31. Do wyniku doda także liczbę lat przeliczoną na dni, w tym przypadku: 97-96-1=0.

A jak zadziała powyższa procedura 3 lata później? 00-96-1=-97! Wynik będzie dokładnie przemnożony przez 365, a później wystarczy dodać pozostałych 31 dni. Aha, nasz program jest "inteligentny" i uwzględnił także lata przestępne, co daje niebagatelny efekt: minus 35397 dni. Oczywiście, czas nie może biec do tyłu, więc komputer "nie zauważa" minusa, w bazie danych zostają skasowane odpowiednie rekordy, a my otrzymamy automatycznie wydrukowaną laurkę z przeprosinami, że sprawę umorzono z opóźnieniem kilkudziesięciu lat.

Wyobraźnia dostarczy z łatwością podobnych przykładów i to nie tylko tym, którym zdarzyło się otrzymać maszynowo wystawiony rachunek na okrągłą kwotę: 00,00 zł. Przy czym skala oprogramowania zależnego od czasu kalendarzowego jest ogromna:

- oprogramowanie bankowe i księgowe

- pakiety planistyczne i sterowania produkcją

- procedury systemowe, zabezpieczające

- statystyki, pakiety analityczne

- aplikacje sterujące zaopatrzeniem i transportem.

Cobol 2000

Producenci narzędzi software'owych jeszcze stosunkowo niedawno epatowali nas formatem daty YYMMDD, nie

uwzględniając, że w następnym stuleciu też będą komputery i korzystający z nich użytkownicy. To prawda, że współczesne wersje kompilatorów pozbawione są tego niedociągnięcia, ale nie ma powodu, by rezygnować ze stabilnie działającej aplikacji tylko dlatego, że była tworzona kilka lat wcześniej. Dla przykładu, przyjrzyjmy się najbardziej na świecie rozpowszechnionemu językowi programowania dla zastosowań gospodarczych - Cobolowi.

Powiedzmy, że pominiemy milczeniem tak zasłużoną dla informatyki wersję jak Cobol-68, z jego listingami

przypominającymi bardziej asembler niż język wyższego poziomu. Trochę młodszy Cobol-74 jest stale używany, a

niejeden program napisany w Cobolu-85 przetrwa zapewne przełom tysiącleci. W tym standardzie (ANSI) rozkaz ACCEPT FROM DATE odnosi się do zmiennej deklarowanej w postaci PIC 9(6). Łatwo domyśleć się, że ta sześciocyfrowa liczba całkowita bez znaku jest interpretowana jako: rok w obrębie stulecia/miesiąc w roku/dzień miesiąca.

Dla porządku podajmy jeszcze pozostałe warianty "czasowe" komendy ACCEPT charakterystyczne dla tego kompilatora - ich mutacje można spotkać w wielu innych produktach software'owych.

Zegar wewnętrzny

Podstawowym źródłem zaopatrującym oprogramowanie w dane czasowe jest wewnętrzny zegar komputera, przy czym precyzyjniej trzeba by mówić o systemie zarządzania czasem, zarówno sprzętowo jak i programowo stosowane są bowiem różne metody generowania i przetwarzania informacji z tego zakresu. Wiąże się to także z różnorodnością funkcji realizowanych przez komputerowe czasomierze (timery):

- podział czasu (time sharing)

- wyznaczanie czasu rzeczywistego (realtime)

- limitowanie czasu wykonywania się programów

- określanie obciążeń czasowych procesorów i innych urządzeń

- obsługa sygnałów czasowych wysyłanych przez software

- prowadzenie statystyk systemowych i użytkowych (accounting).

Funkcje te w znacznej mierze realizują się automatycznie, lecz widać, że rola administratora systemu jest tu bardzo

istotna. Rzecz jasna, iż odebranie przez zegar sygnału synchronizującego czas w dobie telewizji satelitarnej jest

równie proste jak regulowanie zegarka pod hejnał z Krakowa ("piąty, ostatni, krótki sygnał oznacza punktualnie godzinę 12.00"). Cena typowego zegara sterowanego sygnałem radiowym nie różni się na rynku światowym od żądanej za podobne urządzenia, ustawiane ręcznie i wynosi 20-40 USD.

Zdalnie ustawiany czasomierz jest wygodny, a powszechne stosowanie takich urządzeń (zegarki na rękę są droższe) stworzyłoby nowe możliwości zarządzania czasem dla całej cywilizacji. Wyobrażalne byłoby wprowadzenie czasu zmienianego płynnie każdego dnia, a nie tylko dwa razu do roku (letni i zimowy). Można by pomyśleć o likwidacji skokowych różnic między strefami czasowymi, a nawet o jednostkach czasu o zmiennej długości. Wróćmy jednak do rzeczywistości.

Zdarza się, że komputery "pobierają" czas od innych systemów informatycznych, z którymi się komunikują (sieci). W

ostateczności jednak to człowiek musi zerknąć do kalendarza i wyjrzeć przez okno, by przekonać się, że nasz komputer w Warszawie nie pracuje z jakimś lodowato-gorącym Alaska-Hawaii Standard Time (HST - jedna z opcji dla baz danych Oracle).

Rachuba czasu

"Znak czasu" w postaci systemowego datownika (time stamp) odciskany jest na wszystkich zbiorach danych - administrator powinien dbać, aby funkcja ta była realizowana prawidłowo, także ze względów prawnych. Zgodnie z zasadą "ufaj i kontroluj" nie powinniśmy bez reszty wierzyć systemom operacyjnym, tutaj też zdarzają się błędy, zresztą sprawa dokładnej rachuby czasu od początku była dla ludzkości problemem. Ile więc dni będzie miał luty roku 2000?

Samo pojęcie "rok" bez dodatkowych objaśnień jest nieprecyzyjne. Potocznie utożsamiamy z tym określeniem

okres obiegu Ziemi dookoła Słońca. Ale to za mało, aby na tej podstawie posługiwać się dokładnym kalendarzem. Rok

gwiezdny (syderyczny) jest czasem, jaki upływa między dwoma kolejnymi przejściami Słońca przez ten sam punkt ekliptyki. W praktyce odpowiada to pojawianiu się Słońca na tle tych samych gwiazd. Rok ten ma długość 365 dni 6 godz. 9 min 10 sek i wydłuża się o 0,00000011 dnia co sto lat.

Podstawę naszego kalendarza stanowi jednak rok zwrotnikowy oparty na momencie przechodzenia Słońca przez punkt równonocy wiosennej. Rok ten skraca się o 0,0000062 dnia co sto lat i obecnie jest krótszy od gwiezdnego o 20 min i 24 sek. Te ułamki dni, jak się zaraz okaże, nie są bez znaczenia. Już 2300 lat temu Egipcjanie wprowadzili rok

przestępny uwzględniając, że rok nie składa się z całkowitej liczby dni. Metodę tę przejął Juliusz Cezar, tak więc rok

juliański miał średnią długość 365 dni i 6 godzin - błąd, który w XVI wieku doszedł do 10 dni!

Wówczas to, w roku 1582, na mocy reformy wprowadzonej przez papieża Grzegorza XIII, po 4 października nastąpił 15. Jednocześnie wprowadzono dodatkową regułę dla lat przestępnych: lata pełnych stuleci są przestępne tylko

wtedy, gdy bez reszty dzielą się przez 400. Tak więc, w przeciwieństwie do lat 1900 czy 2100, rok 2000 będzie rokiem przestępnym. Trzeba przyznać, że koncepcja ta wytrzymała próbę czasu - rok gregoriański jest dłuższy od zwrotnikowego o 25 sek, pełny dzień zbierze się z tego za jakieś 3000 lat.

Co na to wszystko systemy operacyjne? Historia traktowana jest tutaj dość indywidualnie. I tak pod OSF/1 komenda "cal 9 1752" dostarcza następujący wynik:

September 1752

Sun Mon Tue Wed Thu Fri Sat

1 2 14 15 16

17 18 19 20 21 22 23

24 25 26 27 28 29 30

Zapewne uwzględniono przy tym fakt wprowadzenia kalendarza gregoriańskiego w Anglii z opóźnieniem 170 lat (Rosja zrobiła to w roku 1923). Skoncentrujmy się wszakże na przyszłości. Dla Lotusa (4.0, Windows) kończy się ona

31.12.2099 r., gdyż zmienna licząca dni od 1 stycznia 1900 przyjmuje wtedy maksymalną wartość - 73050. Mnogość

oprogramowania powoduje, że najlepiej samemu przekonać się w tym kontekście o własnościach używanego softwaru, od poczciwego DOS-a poczynając.

Kłopoty z kodami

Trzeba również pamiętać, że dostarczycielem czasu jest nie tylko sprzęt i system operacyjny. Mogą to być informacje

sterujące dla przetwarzania typu batch czy dane od innych aplikacji. Informacjami czasowymi naszpikowane są też bazy danych. Zbadanie tych zależności może być utrudnione, bo przecież daty są zapamiętywane jako liczby całkowite, binarnie czy "otwartym tekstem": np. "WTOREK 07.05.1996". Z pomocą przychodzą więc nowo powstające firmy oferujące oprogramowanie specjalnie przygotowane w tym celu.

Proces ten nasuwa skojarzenia z tym, co działo się w świecie informatycznym naszych zachodnich sąsiadów trzy lata temu. "Stara" RFN operowała czterocyfrowymi kodami pocztowymi, podobnie jak w NRD. Te same kody oznaczały więc zupełnie różne miejscowości, np. Weimar i Bonn - 5300. Po zjednoczeniu stało się to uciążliwe, a dokładanie literek "W" i "O" było rozwiązaniem mało eleganckim i to nie tylko ze względów psychologicznych. Przejście na nowe

pięciocyfrowe kody oznaczało już małą rewolucję software'ową zaplanowaną na 1 lipca 1993 r.

Obok kwestii przestawienia własnych kartotek adresowych i związanych z nimi aplikacji na obowiązujące kody trzeba było uwzględnić, że zrywano również z logiką starego systemu, bardziej przejrzystego dla użytkowników: jedna miejscowość, jeden kod, im więcej zer na końcu, tym większa miejscowość. Duże miasta dostały nagle po kilkadziesiąt kodów zamiast jednego, przy czym co dłuższe ulice obsłużono kilkoma kodami jednocześnie. Oczywiście, było to wygodniejsze dla poczty, ale nie np. dla oprogramowania dokonującego regionalnych analiz statystycznych.

Tropiciele czasu

Informatyczny odpór trzeciemu tysiącleciu można dać specjalnymi programami o tak wdzięcznych nazwach, jak HOUR-

GLASS 2000 (klepsydra), oferowanymi przez odpowiednie firmy typu Transcentury Data Systems. Rzecz nie jest banalna, bo wskazać miejsca w aplikacjach zależne od kalendarza to jedna sprawa, dokonać modyfikacji - druga, a przetestować - trzecia. Pomocny będzie tu właściwy pakiet software'owy, przy czym w ostatnim problemie jest on najbardziej pożądany.

Pakiet taki pozwala na zmianę czasu systemowego konfiguracji w taki sposób, aby nie wpłynęło to na codzienny tryb pracy maszyny cyfrowej: normalne oprogramowanie korzysta z normalnego czasu, oprogramowanie testowane "widzi" czas testowy. Pamiętajmy jednak, że sami musimy znaleźć odpowiedzi na kilka pytań:

- Czy znamy specyfikę rozkazów, operujących czasem stosowanych narzędzi software'owych (języki programowania, bazy danych, systemy operacyjne i sieciowe, pakiety specjalne i użytkowe)?

- Czy konfiguracje komputerowe gwarantują operowanie dokładnym czasem kalendarzowym (czas letni, zimowy, lata

przestępne)?

- Czy uwzględniamy różnice czasowe między komputerami pracującymi w sieci globalnej (strefy czasowe)?

- Czy posiadamy listę aplikacji zależnych od czasu kalendarzowego, wraz z formatami dat i logiką ich

przetwarzania (np. znajdowanie wieku na podstawie dwucyfrowego roku)?