Objavljeno: 26.4.2022 | Avtor: Matej Huš | Monitor Maj 2022

Merjenje časa v računalnikih - Koliko je ura?

Najpreprostejša naloga se lahko izkaže za zelo kompleksno. Medtem ko računalniki sami brez težav izvajajo milijarde izračunov na sekundo in vsebujejo kompleksna vezja za štetje ciklov ter uravnavanje frekvenc, je natančno merjenje časa dovolj težaven problem, da potrebujejo pomoč. Tudi najmodernejši računalniki štejejo sekunde nenatančno, zato morajo redno spraševati druge. Programerji pa imajo medtem druge težave, med katerimi so na prvem mestu operacije s časom, časovni pasovi in prestopne sekunde.

Ko smo konec marca kot običajno spet prešli na poletni čas, so računalniki, telefoni, tablice in ostale pametne naprave uro prestavile same. Kdor nima analognih ur, morda sploh ni ročno premaknil nobene. Navajeni smo, da računalniki ves čas vedo, koliko je ura, in morebitno prehitevanje ali zaostajanje tudi redno odpravljajo. A kot nas je naučila že zgodovina, je merjenje časa v resnici prava znanost (ali umetnost). V modernem, hiperpovezanem svetu pa je tudi nuja. Da bi razumeli, kako računalniki merijo čas, moramo najprej pogledati, kaj čas sploh je.

Definicija časa ni enoumna, saj je odvisna od vrste teorije in zahtev, ki jih imamo. V fiziki je čas intenzivna količina, ki opisuje zaporedje dogodkov in monotono teče v eno smer. Smer ali puščico časa definirajo zakoni termodinamike, ki med drugim opisujejo strogo povečevanje nereda oziroma entropije s časom. V mehanističnem svetu se zadovoljimo z odčitkom z ure. Čas je, kar pokaže ura. Ta je vsak fizikalni sistem, ki enakomerno tiktaka, torej v predvidljivih, rednih, enakomernih razmikih ponavlja neki pojav.

Merjenje časa je kompleksen problem, ki ga lahko v domačih računalnikih razkosamo na tri sestavne dele: strojno opremo za merjenje časa, programsko opremo za manipulacijo s časom in infrastrukturo za pridobivanje točnega časa z interneta. Pri tem se merjenje časa prepleta z ustrojem modernega procesorja, ki nujno potrebuje frekvenco delovanja, kako hitro spreminja svoja stanja.

Tiktakanje ugasnjenih računalnikov

Vsakokrat ko izključimo računalnik, ta izgubi vir napajanja. Volatilni pomnilnik (RAM) se izprazni, trajni spomin (disk, SSD, ROM) pa podatke obdrži, a v takem stroju ura ne bi tekla. Računalnik pač nima zapletenega sistema vzmeti in uteži kot mehanske ure, da bi mogel beležiti čas.

Računalniki imajo zato RTC (real-time clock), ki skrbi za merjenje časa, ko ni napajanja. Najdemo jih tako v osebnih računalnikih kakor tudi v večini drugih naprav, denimo v vgrajenih napravah (embedded). Prvi osebni računalnik z RTC je bil IBM PC/AT iz leta 1984, ki je uporabljal Motorolin MC146818. Imel je devet registrov, ki so zapisovali čas: sekunde, minute, ure, dan v tednu, dan v mesecu, mesec in leto. Ko je bil RTC normalno vključen, je bilo mogoče brati iz registrov in pisati vanje (ob nastavitvi časa). Kadar pa je bil računalnik izključen, je ura v RC tiktakala dalje.

V RTC je oscilator s frekvenco 32,768 kHz, poleg njega pa še manjši čip (prescaler), ki to frekvenco zniža, da lahko tiktaka z 1 Hz. Oscilator je sestavljen iz kvarčnega kristala, ki izkorišča inverzni piezoelektrični efekt. Če na kristal pritisnemo električno napetost, se kristal malenkostno deformira, čemur pravimo elektrostrikcija. Ko električno napetost odmaknemo, se kristal vrne v prvotno obliko, pri čemer pa se spet vzpostavi električno polje. Če imamo vir energije, se obnaša kot vezje RLC (upornik, tuljava, kondenzator), ki niha s stabilno frekvenco. Poleg kvarčnega kristala sta v oscilatorju, kakor imenujemo celotno vezje, še ojačevalnik in filtrirno vezje s pozitivno povratno zanko.

Vir energije je lahko šibak, ker tak oscilator ne porabi veliko energije. V preteklosti so se uporabljale gumbne baterije, ki smo jih zlahka prepoznali na matičnih ploščah, dandanes pa so čedalje pogostejši kar superkondenzatorji. Dokler ima RTC napajanje, bo tudi ugasnjeni računalnik vedel, koliko je ura. A to ni edina njegova naloga, saj se RTC kot stabilen vir frekvence posredno (prek sistemske ure) lahko uporabljajo tudi za sinhronizacijo vseh naprav v sistemu – v preteklosti, danes je situacija kompleksnejša.

Baterija, ki napaja RTC, tiktaka tudi v ugasnjenem računalniku.

Med delovanjem

V uvodu v programiranje se srečamo z ukazom sleep 60, ki programu naroči, naj počaka 60 sekund realnega časa. Dasiravno to sposobnost privzamemo kot nekaj najbolj običajnega, se velja na tem mestu vprašati, kako procesor ve, kdaj je minilo 60 sekund v zunanjem svetu. Navsezadnje današnji procesorji zmorejo upočasnjevati notranji takt, kadar niso zelo obremenjeni. V nekaterih večjedrnih sistemih imajo celo posamezna jedra različen takt.

Današnji operacijski sistemi so večprocesni in večnitni, da lahko poganjajo več programov hkrati. Moderni procesorji so členjeni v cevovod, ki ima več stopenj za izvajanje ukazov, s čimer se pohitritev doseže transparentno in brez poseganja v programe. Poleg cevovoda, ki omogoča paralelizem na ravni ukazov, lahko procesorji izvajajo hkrati še več niti (multithreading), vsi pa imajo dandanes tudi več jeder. A vendarle, na računalnikih danes teče več procesov, kot je jeder ali niti. Kako se lahko vsi izvajajo hkrati?

Zato vsebujejo časovni razporejevalnik (scheduler). Ta skrbi za razvrščanje procesov, ki v nekem hipu tečejo. Razporejevalnik redno preverja, kateri proces je na vrsti, da se izvede. Ko procesor začne izvajati neki drug proces ali nit od trenutnega, se to imenuje sprememba konteksta (context switch), kar je v modernih sistemih zelo pogost dogodek. A kako pogosto naj to stori? Oziroma kako razporejevalnik ve, da je čas za menjavo? Proces, ki se ne izvaja, temveč je na čakanju, namreč po definiciji ne more storiti ničesar, torej tudi ne javiti, da bi pa zdaj res rad prišel na vrsto.

Kako merimo čas

Intervale, torej časovni razpon med dvema dogodkoma, najnatančneje merimo z atomskimi urami. Te izkoriščajo dejstvo, da so energijske ravni v atomih natančno določene, skoki med njimi pa se dogajajo z zelo stabilnimi frekvencami. Takšna je tudi definicija sekunde, ki jo določa 9.192,631.770 nihajev valovanja nevzbujenega atoma cezija-133 pri absolutni ničli pri prehodu med dve ravnema hiperfinega razcepa v osnovnem stanju.

Najnatančnejši instrument za merjenje časa so atomske ure. Cezijeve ure imajo tekoči cezij, ki se segreje do plina. Atome cezija potem ohladijo skorajda do absolutne ničle. Ko preletijo mikrovalovno resonančno votlino, ob absorpciji energije valenčni elektron skoči eno raven više. Frekvenca mikrovalov v tej votlini se določi z elektronskim oscilatorjem s povratno zanko, tako da ustreza resonančni frekvenci. S tem se frekvenca elektronskega oscilatorja uskladi s frekvenco hiperfinega prehoda v ceziju. Takšen način merjenja časa je izjemno natančen.

Mednarodni atomski čas, tako imenovani TAI (temps atomique international), se še danes izračunava kot uteženo povprečje več kot 400 atomskih ur po vsem svetu, med katerimi je največ prav cezijevih.

Cezijeva atomska ura iz 60. let, s katero so preverili napovedi teorije relativnosti. Slika: Dave L. Jones, CC BY-SA-3.0

Ko pritisnemo tipko na tipkovnici, se v urejevalniku besedila izpiše črka, četudi je procesor tisti hip polno zaseden s kakšno drugo operacijo. To omogočajo prekinitve (interrupts), ki procesor prekinejo. Če je prekinitev dovoljena, procesor prekine trenutno opravilo, stanje sistema se shrani in procesor se posveti drugemu opravilu, ki ga določi nadzornik prekinitev (interrupt handler). Prekinitve so nujne za delovanje naprav, ki sodelujejo z zunanjim svetom, saj želimo, da se računalnik odziva takoj. To so zunanje prekinitve (external interrupts), obstajajo pa tudi notranje (internal), ki jih proži procesor ali programska oprema.

Ena izmed pomembnejših prekinitev je urina prekinitev (clock interrupt), ki se proži periodično, na primer vsako milisekundo, in skrbi tudi za delovanje razporejevalnika. Te prekinitve imajo precej nižjo frekvenco od takta procesorja, ki se meri v gigahercih. Tu iščemo kompromis: prepogosto vklapljanje razporejevalnika pomeni, da imajo posamezni procesi zelo kratko časovno okno, v katerem lahko opravijo svoj kos računanja, medtem ko prenizka frekvenca poslabša odzivnost in oteži enakomerno razporejanje procesov. Procesorski cikli so namreč dragocena dobrina, za katero tekmuje vrsta programov. V najnovejših operacijskih sistemih zato ni več rednih urinih prekinitev, temveč se dogajajo le, ko so potrebne (tickless kernel).

Vrste tiktakanja

Matična plošča ima poleg že omenjenega RTC še vrsto drugih ur oziroma oscilatorjev, ki s predvidljivo frekvenco generirajo pulze. Najstarejši primer je PIT (programmable interval timer). V prvih pecejih je bil to Intelov čip 8253 s frekvenco 1,193182 MHz, ki ima tri kanale. Prvega so operacijski sistemi uporabljali kot sistemski časomer (system timer), drugega kot osveževalno frekvenco RAM (to zdaj počnejo druga vezja) in tretjega za integrirani zvočnik (PC speaker). Prvi kanal je zvezan na IRQ0 (interrupt request) in ga uporabljamo za nadzor ter proženje opravil, ki se morajo izvajati redno, kamor sodi tudi razporejevalnik.

Eden prvih PIT je Intelov čip 8253 s frekvenco 1,193182 MHz.

Tudi v procesorjih najdemo števce ciklov. Tak primer je TSC (time stamp counter), ki v vseh procesorjih od Pentiumov dalje šteje število ciklov procesorja. V časih enojedrnih procesorjev je posredoval za programe uporabno informacijo, koliko ciklov so potrošili. Če so procesorji tekli s stabilno frekvenco, smo tako lahko merili tudi časovne intervale. V večjedrnih ali večprocesorskih sistemih, ki prilagajajo frekvence delovanja, pa to ni več res. Prav tako moderni procesorji uporabljajo metode za pospešitev izvajanja kode, kamor sodi tudi izvajanje ukazov zunaj zaporedja (out-of-order-execution), zato bi se lahko ukaz za štetje ciklov zgodil prej, kot želimo.

Dandanes, nekako od leta 2005 dalje, se uporabljajo HPET (high precision event timers). To so 64-bitni števci za štetje utripov s stabilno frekvenco vsaj 10 MHz, ki imajo svoje vezje. Običajno so integrirani v vezni nabor na plošči (southbridge) in večinoma delujejo s frekvenco 14,318 MHz (12-kratnik tipičnega PIT 8254). V Windows smo podporo za HPET dobili z različico XP SP3, Linuxovo jedro pa z 2.6. HPET se lahko uporablja za merjenje časa, ker ima stabilno frekvenco.

Moderni sistemi podpirajo HPET.

Vidimo, da nobena od frekvenc, ki jih generirajo komponente na matični plošči, ni niti blizu gigaherčnim taktom procesorja. Na modernih sistemih z Intelovimi procesorji je osnovna frekvenca 100 MHz, ki jo generira oscilator na plošči (XTAL). Potem se v vezju PLL (phase-locked loop) na plošči in PLL v procesorju frekvenca ustrezno pomnoži. Razlog, da ima procesor svoj PLL, je v kakovosti signala. Če bi čip ustvaril gigaherčni signal na matični plošči, bi se do procesorja lahko okvaril. Mimogrede, zato se procesorje navija na dva načina: s spreminjanjem množilnika ali z dvigom frekvence delovanja vseh naprav v sistemu (zvišanje osnovne frekvence). Kadar je množilnik zaklenjen, preostane le druga možnost.

Zakaj eUprava ni znala računati časa

Računanje s časom je ravno zaradi vseh časovnih pasov in premikov ure kompleksen problem, kjer so napake in hrošči podobni, zato velja zlato pravilo, da pri programiranju ne izumljamo tople vode, temveč uporabljamo obstoječe zbire (tz) in kodo, ki so jo že napisali ter večkrat preverili drugi. Pomembno pa je tudi, da se problemov lotimo na pravilen način.

V praksi smo težavo videli letos, ko se na spletnih straneh eUprave zadnji dan pred iztekom roka za prijavo na volilno glasovanje iz tujine po 23. uri ni dalo več prijaviti. Vzrok je bil premik ure, ki se je zgodil nekaj dni pozneje.

Volitve bodo 24. 4. 2022, kar so v kodi zapisali kot 24.04.2022 ob 00:00:00 po lokalnem času (Unixov čas 1.650.751.200), ki je tedaj poletni, torej GMT+2. Očitno so 30 dni izračunali tako, da so enostavno odšteli dve točki v času in preverili, ali sta oddaljeni za več kot 30 dni (kar ustreza 2.592.000 sekundam). Na tak način izračunani rok (Unixov čas 1.648.159.200) se je iztekel 24. 3. 2022 ob 24:00:00 po istem časovnem pasu GMT+2. A ker je tedaj Slovenija uporabljala še zimski čas, torej GMT+1, je bila ura v resnici 23:00:00 dne 24. 3. 2022.

To je robni primer, ki ga je med testiranjem zelo težko opaziti, če ne pomislimo na premik ure, zgodi pa se zaradi neprimernega pristopa k reševanju problema. Rokov, ki so definirani v dneh, ne smemo računati v (mili)sekundah.

Če strnemo, ko je procesor računalnik, tiktaka RTC. Ko deluje, imamo vrsto generatorjev frekvence in periodičnih signal, ki skrbijo, da različne komponente tiktakajo v ustaljenem ritmu. Ne glede na implementacijo in število virov časa v računalniku je osnovna ideja venomer enaka. Potrebujemo predvidljiv vir frekvence, ki je največkrat kristalni, elektromehanski ali elektronski oscilator. To frekvenco lahko zmanjšamo za poljuben celoštevilski faktor z uporabo števcev, ki jih lahko tudi gnezdimo. Kadar pa potrebujemo večkratnike frekvence, uporabimo PLL. Od tod v preteklosti pogosto 65.536-kratno zmanjšanje (256^2) frekvence procesorja za proženje prekinitev. Vse to so tudi razlogi, da ukaz usleep (20) ne bo nikoli zmogel počakati točno 20 milisekund. Rezultat bo med 10 in 20 milisekundami s povprečjem 15 milisekund (če ima razporejevalnik frekvenco 100 Hz).

Kristalni oscilator (levo) in PLL (desno) na matični plošči

NTP

Vsi navedeni viri so bodisi lokalni in lahko počasi odtavajo od resničnega časa (temperatura se spreminja) bodisi interni in jih zanimajo le usklajeni cikli in takti, ne pa ura (procesorju je vseeno, koliko kažejo človeške ure). Včasih smo na računalnikih res morali redno nastavljati uro, medtem ko se danes na videz čudežno pravega časa drži kar sama. Čudež je v resnici protokol NTP (network time protocol), ki omogoča sinhronizacijo lokalnega časa prek omrežij s spremenljivimi zakasnitvami. Prek interneta omogoča nastavitev ur z natančnostjo nekaj deset milisekund, v lokalnem omrežju pa celo na milisekunde.

Viri časa v NTP so razvrščeni hierarhično. Na ravni 0 so atomske ure, sistemi za globalno pozicioniranje (GPS, Galileo) in podobno. Z njimi so na milisekunde sinhronizirani strežniki na ravni 1. Zadnje sprašujejo strežniki z druge ravni itd. Zadnja mogoča raven je 15. NTP čas zapisuje v 64-bitnih številih s fiksno decimalno vejico (32 bitov za sekunde in 32 bitov za decimalni del). Ker je epoha 1. januar 1900, se bo števec prvikrat obrnil 7. februarja 2036. To ni težava, ker bo NTP uro vedno nastavil pravilno, dokler kaže napak za manj kot 68 let (torej polovica ere). NTP ne ve nič o časovnih pasovih in poletnem času. Vedno vrne informacijo o univerzalnem koordiniranem času (UTC), ki jo mora odjemalec glede na lastne podatke ustrezno prilagoditi.

Prestopne sekunde in vrste časa

Čeprav se je definicija sekunde nekajkrat modernizirala, mora Sončev dan v povprečju še vedno imeti 86.400 sekund. Osrednji standard, po katerem svet določa čas, se imenuje univerzalni koordinirani čas (UTC), ki od Sončevega časa na 0. poldnevniku ne sme odstopati za več kot sekundo (dejansko je naslednik greenwiškega časa). Vsi časovni pasi so definirani z odmikom od UTC, večinoma za celo število ur.

Ker pa je Sončev dan v resnici 2 milisekundi daljši od 86400 sekund, se razlike počasi nabere za celo sekundo. Kadar se to zgodi, se 30. junija ali 31. decembra doda prestopna sekunda in tisti dan vsebuje dodatno sekundo (23:59:60 po UTC). Teoretično bi lahko bile prestopne sekunde tudi negativne, a se to še ni nikoli zgodilo.

Medtem ko UTC pozna prestopne sekunde, jih mednarodni atomski čas (TAI) ne in samo monotono tiktaka dalje. Za preračunavanje med njima zato potrebujemo tabelo (lookup table). Z vsako prestopno sekundo se razlika med njima povečuje in trenutno znaša 37 sekund. Ker so prestopne sekunde lahko problem za računalnike, jih Google na svojih strežnikih ne uporablja. Namesto tega v 24-urnem intervalu okoli prestopne sekunde malenkostno upočasni tiktakanje svojih ur (za 11,6 milijonink) in tako v enem dnevu pridela ponovljeno sekundo.

Prestopne sekunde skrbijo, da je čas poravnan z vrtenjem Zemlje.

Ko odjemalec po NTP vpraša strežnik, koliko je ta ura, mu ta resda odgovori, a ta čas ni (več) pravi. Strežnik potrebuje nekaj časa za odgovor, potem pa se odziv še nekaj časa prenaša po omrežju do cilja. Izračunati je zato treba zamik (offset) in omrežno zakasnitev (network delay). Zamik je razlika med časom, ki ga kažeta uri odjemalca in strežnika, zakasnitev pa trajanje prenosa paketka po omrežju.

Standard NTP, kot ga opisuje RFC 5905, je še precej kompleksnejši in vsebuje tudi algoritme, kako izbrati strežnike za poizvedovanje o točnem času, kako ti komunicirajo med seboj (sanity check), kako se usklajujejo podatki z več strežnikovi itd. A osnovni princip je enostaven. Če poznamo razliko med dvema urama in čas potovanja signala, kar lahko tudi izračunamo, ju lahko umerimo. Danes imajo vsi operacijski sistemi vgrajeno podporo za NTP, ni pa to edini način.

Naprave, ki niso povezane z internetom, lahko dobijo točen čas s signala GPS. Za ugotavljanje lokacije prek GPS je ključno merjenje zakasnitev signala, zato imajo vsi sateliti GPS natančne atomske ure, katerih točen čas venomer oddajajo v svojem signalu. Tudi v pilotski kabini potniških letal uro krmili signal GPS. Mobilni telefoni pa lahko točen čas (in tudi časovni čas) dobijo kar od omrežja operaterja.

Princip delovanja protokola NTP

Programska predstavitev časa

Leta 1999 je nekaj časa vladala prava panika, kaj se bo zgodilo 1. januarja. Stari računalniški sistemi iz 70. in 80. let prejšnjega stoletja so zaradi varčevanja s pomnilnikom, ki je bil tiste dni drag kot žafran, letnice zapisovali le z dvema ciframa. Praksa se je nadaljevala in tako smo še v 90. letih imeli programe, ki so 1999 interno zapisovali kot 99. Naslednje leto bi bilo potem 00 ali 100, kar bi programi lahko razumeli kot 1900 ali, redkeje, 19100. Pričakovali smo pravo malo apokalipso, a so večino sistemov pravočasno zakrpali, tako da se 1. januarja 2000 ni zgodilo nič presenetljivega. Tu in tam je kakšen zaslon izpisal 1900, sicer pa se jedrske elektrarne niso ustavile, letala niso padla z neba in banke so še vedno znale pravilno izračunati obroke kredita.

Današnji sistemi čas zapisujejo drugače. V Unixovskih sistemih, kamor sodi tudi Linux, se uporablja Unixov čas (Unix time). Ta neprekinjeno tiktaka od 1. januarja 1970, ko je ob polnoči po univerzalnem koordiniranem času znašal 0, kar imenujemo epoha. Odtlej se vsak dan poveča za 86.400 sekund, četudi se je vmes morda primerila prestopna sekunda (glej okvir). V takem primeru se sekunda ponovi, da ima dan spet 86.400 sekund. Zaradi tega je nujna tabela preteklih prestopnih sekund, ki omogoča pravilno izračunavanje razmika med različnimi točkami v času, če so se vmes zgodile prestopne sekunde.

Spočetka je bil Unixov čas zapisan kot predznačeno 32-bitno celo število, torej je največja mogoča vrednost 2^31 – 1, kar ustreza 2.147,483.647 sekund po epohi, torej 19. januar 2038 ob 3:14:07. Naslednja sekunda bi števec obrnila (roll over) na –2^31 oziroma 13. december 1901 ob 20:45:52. Enostavna rešitev je spremeniti tip spremenljivke v 64-bitno celo število, kar podre združljivost za nazaj. Večina novih programskih jezikov ter operacijskih sistemov je to že storila in ti so varni za naslednjih 292 milijard let.

V Windows je epoha 1. januar 1601, čas pa šteje v 100-nanosekundnih intervalih. Razlog je matematičen, saj ima gregorijanski koledar periodo 400 let. V Windows lahko zapišemo datume do leta 30828.

Časovni pasovi

Ker smo ljudje navajeni, da je ob poldnevu sonce visoko na nebu, je svet razdeljen na časovne pasove. Ko je v Sloveniji ura 14, je v Lizboni 13 in v New Yorku 8. V teoriji bi planet razkosali na 24 časovnih pasov, ki si z zamikom ene ure sledijo vsakih 15° po poldnevnikih. V praksi je to res le na odprtem morju, na kopnem in v teritorialnih vodah pa vsaka država časovni pas določa sama. To prinaša vrsto neidealnosti, ker države pač ne marajo, da bi meje med časovnimi pasovi tekle skoznje, če to ni nujno potrebno zaradi velikosti. Ker ljudje zjutraj radi malce poležimo, so časovni pasovi v povprečju premaknjeni proti zahodu (sredina svetlega dela dneva ni ob 12. uri, temveč kasneje).

To pripelje do naslednje velike težave pri računanju časa. Države v zmernih geografskih širinah – torej večinoma Evropa in Severna Amerika, deli Avstralije, Nova Zelandija – v svojem poletju urine kazalce premaknejo za eno uro. Kot vsaka država sama določi, v katerem časovnem pasu bo, tudi sama izbere datum za premik ure.

Starejši bralci se bodo spomnili, da Windows 95 brez popravka ni znal pravilno premikati ure. Do leta 1996 je poletni čas v EU trajal do zadnje nedelje v septembru, odtlej pa do zadnje nedelje v oktobru. Računalniki tedaj niso bili množično povezani z internetom, zato tega sami niso mogli ugotoviti. Še ena posledica je bilo zanimivo priporočilo, naj v primeru dveh nameščenih operacijskih sistemov (dual boot) premik ure dovolimo le enemu, da se ne bo ura prestavila dvakrat. V tistih časih virtualnih strojev (virtual machine) še ni bilo, zato smo uporabljali dvojne namestitve. Novejši primer so ZDA, kjer so premik ure leta 2007 prestavili s prve nedelje v aprilu na drugo nedeljo v marcu, jeseni pa z zadnje nedelje v oktobru na prvo novembrsko nedeljo.

Podobnih primerov je več in praktično ni leta, v katerem ne bi popolnoma nobena država spremenila nobenega časovnega pasu. Odprtokodna skupnost je zato pripravila zbir tz (znan tudi kot TZDB), ki se redno posodablja in vsebuje vse informacije o časovnih pasovih na svetu po letu 1970 in tudi nekaj izvorne kode. Danes jo vzdržuje IANA. V njem so zapisane tudi vse spremembe časovnih pasov in uporaba poletnega časa. V zbiru ima vsako področje svoj vnos, pri čemer kot področje štejejo države ali manjše enote, če so države prevelike. Za Slovenijo je v njem značka Europe/Ljubljana, ki je bližnjica do Europe/Belgrade. Razlogi so zgodovinski, saj smo imeli doslej enak časovni pas. Mesta namesto držav pa se uporabljajo zato, ker so imena mest precej bolj trajna od poimenovanj držav in premikanja mej.

Zbir tz se uporablja v številnih operacijskih sistemih (Linux, Android, BSD, Unix), programskih jezikih in programih. Windows seveda uporablja lastni zbir (ogledamo si ga lahko z ukazom tzutil /l v ukaznem pozivu). Pisanje programov, ki se ukvarjajo s kakršnimkoli časovnim načrtovanjem, si brez tz težko predstavljamo. Kot je letos pokazala naša eUprava, so manipulacije s časom delikatne in hitro vodijo do najrazličnejših hroščev, zato je vedno bolje vzeti pripravljeno kodo in baze kot pa izumljati toplo vodo.

Časovni pasovi segajo od UTC+14 do UTC–12, zato vsak dan dve uri na Zemlji obstajajo trije različni dnevi.

Na Mars

Merjenje časa je (bilo), razumljivo, prilagojeno Zemlji. Medtem ko bo Unixov 64-bitni čas do konca vesolja mirno tiktakal dalje, ne oziraje se na prestopne sekunde in dogajanje na Zemlji, bo človeku prijazna predstavitev vendarle odvisna od lokacije. Na Marsu namesto dni uporabljajo sole oziroma marsovske dni, ki merijo 88.775 (Zemeljskih) sekund.

Trenutno je stanje na Marsu podobno, kot je bilo na Zemlji pred uvedbo enotnih časovnih pasov. Vsak rover uporablja svoj lokalni čas, ki je čim bolj podoben Sončevemu, da ima Sonce opoldne v nadglavišču. Če pa bodo Mars kdaj poselili ljudje, se bo hitro pojavila potreba po koordiniranem času. Bodisi bodo ure na Marsu tekle dva odstotka počasneje, da bo imel tamkajšnji sol še vedno 86.400 marsovskih sekund, bodisi bodo čas merili kako drugače – na primer s 25 urami, ki imajo 67 minut, te pa 53 sekund. In temu se bodo morali prilagoditi tudi računalniki.

Da merjenje časa ni enostaven problem, so vedele že stare civilizacije, in tudi najzmogljivejši računalniki imajo zelo kompleksne mehanizme za spopadanje s časom – najsi gre za gigaherčne frekvence v procesorju ali merjenje človeškega časa.

Zakaj je »umrla« sonda Deep Impact

Sonda Deep Impact, ki so jo 12. januarja 2005 izstrelili proti kometu Tempel 1, je med 11. in 14. avgustom 2013 mrknila in se ni več oglasila. Analiza je razkrila, da je najverjetneje onemela 11. avgusta 2013 ob 00:39:49,6. Glavni znanstvenik za misijo Mike A'Hearn je dejal, da je šlo za podoben problem kot Y2K, ko je zmanjkalo prostora za zapis datuma.

Napaka se je zgodila natanko 2^32 desetink sekunde po 1. januarju 2000. To kaže, da je Deep Impact datum beležil z epoho 1. 1. 2000 v desetinkah sekunde kot nepredznačeno 32-bitno celo število. Ko je prostora zmanjkalo in je začelo ponovno od ničle, se je sonda znašla v neskončnem nizu ponovnih zagonov.

Sonda Deep Impact je prenehala delovati, ko je pretekel števec za merjenje časa. Slika: Nasa

Naroči se na redna tedenska ali mesečna obvestila o novih prispevkih na naši spletni strani!

Komentirajo lahko le prijavljeni uporabniki

 
  • Polja označena z * je potrebno obvezno izpolniti
  • Pošlji