Cila është epoka Unix dhe si funksionon Unix Time?


Unix e ruan kohën si numrin e sekondave që nga 1 janari 1970. Dhe kjo do të thotë se Linux e ruan gjithashtu. Ne e shpjegojmë këtë sistem në dukje të çuditshëm dhe pse Dita e Kijametit ishte planifikuar për vitin 2038.

Epoka e Parë Unix

Goethe (1749-1832) deklaroi Çdo sekondë ka vlerë të pafund. Kjo është e vërtetë, secili prej nesh ka vetëm kaq shumë sekonda këtu në planetin Tokë dhe nuk e dimë se kur do të jetë sekonda jonë e fundit. Por ne e dimë ditëlindjen tonë dhe kur filloi numërimi mbrapsht.

Unix - si Mbretëresha Britanike - ka dy ditëlindje. Ose, më saktë, ka pasur dy raste të veçanta në të cilat ajo filloi të numëronte sekondat e ekzistencës së saj. Hera e parë që Unix filloi të numëronte ishte mesnata e 1 janarit 1971.

Ne mund ta shohim këtë mjaft qartë duke shqyrtuar një seksion të edicionit të parë të Manualit të Programuesit të Unix, datë 3 nëntor 1971. Lëvizni poshtë në faqen 13 të atij seksioni dhe do të shihni një përshkrim të kodit (tani i zhdukur) < komanda >time. Na është thënë se time kthen kohën që nga ora 00:00:00, 1 janar 1971, e matur në të gjashtëdhjetat e sekondës.

Kalendarët dhe sistemet kohore matin kohën duke filluar nga një pikë e rëndësishme në të kaluarën, si një ngjarje kozmologjike, themelimi i një perandorie ose suksesi i një revolucioni. Në sistemet operative, një orë dhe datë arbitrare zgjidhet si pika nga e cila fillon numërimi. Kjo është epoka për atë sistem operativ.

Unix përdori një numër të plotë 32-bit të panënshkruar për të mbajtur numërimin e 60 të sekondës që nga epoka. Kjo është një variabël numerike e aftë të mbajë vlera në rangun nga 0 deri në 4,294,967,295 (232−1). Kjo tingëllon si shumë. Por numëruesi u rrit me 60 herë në sekondë dhe, siç thekson Manuali i Programuesit, Përdoruesi me mendje kronologjike do të vërejë se 2**32 të gjashtëdhjetat e sekondës janë vetëm rreth 2,5 vjet.

Me një normë konsumi prej 60 numrash në sekondë, numëruesi do të kishte arritur vlerën e tij maksimale më 8 prill 1973, pak më pak se 829 ditë më vonë.

Epoka e Dytë Unix

Eshtë e panevojshme të thuhet se kjo u veprua me shpejtësi. Numri i plotë i panënshkruar u zëvendësua me një numër të plotë signed 32-bit. Mund të duket një zgjedhje befasuese sepse një numër i plotë i nënshkruar është në gjendje të mbajë një numër më të vogël vlerash pozitive—2,147,483,647 (231)—se sa një numër i plotë i panënshkruar. Megjithatë, shpejtësia e konsumit u ul gjithashtu nga 60 të sekondës në sekonda të plota.

Duhet më shumë kohë për të numëruar nga 0 në 2,147,483,647 duke numëruar një numër në sekondë sesa për të numëruar nga 0 në 4,294,967,295 me 60 numërime në sekondë. Dhe me mjaft diferencë. Skema e re nuk do të arrinte vlerën e saj maksimale për pak më shumë se 68 vjet. Kjo dukej aq larg në të ardhmen, saqë epoka madje u rivendos në një moment më të hershëm në kohë. Epoka e re u vendos në mesnatën e 1 janarit 1970, UTC.

Ajo pikë e 68 viteve në të ardhmen tani është jashtëzakonisht afër. Për të qenë të saktë, do ta arrijmë në orën 03:14:07 UTC më 19 janar 2038.

Një skemë e thjeshtë por efektive

Përdorimi i një numri të vetëm të plotë për të numëruar numrin e hapave kohorë nga një pikë e caktuar në kohë është një mënyrë efikase për të ruajtur kohën. Ju nuk keni nevojë të ruani struktura të ndërlikuara të viteve, muajve, ditëve dhe kohërave. dhe është i pavarur nga shteti, vendndodhja dhe zona kohore.

Shumëzimi i numrit në numër të plotë me madhësinë e hapit kohor - në këtë rast, një sekondë - ju jep kohë që nga epoka, dhe konvertimi nga ai në formate specifike të zonës me rregullime të zonës kohore është relativisht i parëndësishëm.

Megjithatë, ju jep një kufi të sipërm të integruar. Herët a vonë do të arrini vlerën maksimale që mund të mbani në llojin e variablit tuaj të zgjedhur. Në kohën e shkrimit të këtij artikulli, viti 2038 është vetëm 17 vjet larg.

Është i ngjashëm, por paksa i ndryshëm me problemin me sistemet e hershme kompjuterike të shekullit të kaluar duke përdorur dy shifra për të ruajtur vitet. Kur kalendari kaloi në vitin e ri dhe shekullin e ri të 2000-ës, a do të interpretohej një vlerë vjetore e ruajtur si 00 si 2000, apo 1900?

Korrigjimi i të ashtuquajturit Bug i Mijëvjeçarit vlerësohet t'i ketë kushtuar vetëm SHBA-së mbi 100 miliardë dollarë dhe u janë dashur mijëra vjet njerëz për t'u trajtuar në nivel global. Kishte disa probleme në ditët e para të janarit 2000, por asgjë si fatkeqësitë që do të kishin ndodhur nëse defekti do të shpërfillej.

Dita e Kijametit shtyhet

Për shkak se Linux dhe të gjitha sistemet operative të ngjashme me Unix-in ndajnë të njëjtin problem, çështja e vitit 2038 është marrë seriozisht për ca kohë, me rregullime që janë shtuar në kernel që nga viti 2014. Kjo po vazhdon me rregullime që po shtohen në kernel deri në janar . 2020 për të adresuar problemin e numrit të plotë 32-bit.

Sigurisht, një kompjuter Linux që funksionon përmban shumë më tepër se një kernel. Të gjitha shërbimet operative dhe aplikacionet e tokës së përdoruesit që përdorin kohën e sistemit përmes API-ve dhe ndërfaqeve të ndryshme duhet të modifikohen për të pritur vlera 64-bit. Edhe sistemet e skedarëve duhet të përditësohen për të pranuar vulat kohore 64-bit për skedarët dhe drejtoritë.

Linux është kudo. Një dështim katastrofik në Linux do të nënkuptonte dështime në të gjitha llojet e sistemeve të bazuara në kompjuter. Linux drejton pjesën më të madhe të uebit, pjesën më të madhe të resë publike dhe madje edhe anijen kozmike. Ajo drejton shtëpi të zgjuara dhe makina vetë-drejtuese. Telefonat inteligjentë kanë një kernel të rrjedhur nga Unix në zemrën e tyre. Praktikisht çdo gjë – si muret e zjarrit të rrjetit, ruterat dhe modemet me brez të gjerë – që ka ngulitur sisteme operative brenda funksionimit në Linux.

Është mirë që Linux është në rrugën e duhur për t'u rregulluar. Ne do të instalojmë përmirësimet dhe kjo do të jetë. Por cilat janë shanset që të gjitha ato pajisje të korrigjohen dhe përditësohen? Shumë prej tyre as nuk do të jenë në shërbim deri atëherë, kështu që do të jetë një pikë e diskutueshme, por disa do të jenë ende në prizë. Mbytur në gropa të errëta dhe me pluhur në dhomat e serverëve dhe kabinetet e rafteve ndoshta, por ata do të jenë aty, duke punuar në heshtje, ndërkohë që sekondat do të kalojnë deri në rreth tre e një çerek të mëngjesit të 19 janarit 2038.

Por pajisjet si kjo duhet të jenë një pakicë e vogël. Shumica dërrmuese e sistemeve do të shohin që koha e krizës të vijë dhe të shkojë pa incidente. Edhe një herë, ne do të jemi në gjendje të relaksohemi. Të paktën, derisa të afrohet viti 2486, duke sjellë me vete të njëjtin problem për sistemet që përdorin numra të plotë të bazuar në 64-bit për të numëruar kohën që nga epoka.

Komanda e datës

Ne mund të përdorim komandën date për të verifikuar që Linux dhe derivatet e tjerë të Unix ende përdorin skemën origjinale, të thjeshtë të ruajtjes së vlerës së kohës si numër sekondash që nga epoka.

Përdorimi i komandës date pa asnjë parametër printon datën dhe kohën aktuale në dritaren e terminalit. Ju shfaqet gjithashtu zona kohore për të cilën është rregulluar ora. EDT është Ora Ditore Lindore, që do të thotë se kompjuteri ynë i testimit është në Zonën e Kohës Lindore dhe kursimi i ditës është në fuqi. Kur ora e ditës nuk është në fuqi, Zona Orare Lindore përdor Orën Standarde Lindore.

Për të parë vlerën bazë të numrit të plotë, mund të përdorim një varg të formatit të ekranit. Vargjet e formatit kanë një shenjë plus + si karakterin e tyre të parë. Shenja e formatit %s do të thotë tregoni sekondat që nga epoka.

Nëse marrim vlerën e sekondave të kthyer nga date dhe e kthejmë atë në komandën date me -d (koha e shfaqjes së përshkruar nga një varg) opsion, do ta kthejë atë në një datë dhe orë të rregullt.

date
date +%s
date -d @1633183955

Mund të tregojmë se vlera e plotë përfaqëson vërtet kohën duke shfaqur numrin e sekondave, duke fjetur për 10 sekonda dhe duke treguar numrin e ri të sekondave. Dy vlerat e plota do të jenë të ndryshme me saktësisht 10.

date +%s && sleep 10 && date +%s

Kemi parë që mund t'i kalojmë një numër sekondash komandës date dhe ajo konvertohet në një orë dhe datë për ne. Nëse e bëjmë vetëm këtë duke përdorur zero sekonda si vlerë hyrëse, date duhet të printojë datën dhe kohën e epokës Unix.

TZ='UTC' date -d @0 +'%x %R'

Komanda ndahet si kjo:

  • TZ='UTC': Epoka u caktua duke përdorur Kohën Universale të Koordinuar (UTC, kështu që ne duhet t'i themi date për të përdorur UTC. Konstruksioni TZ= cakton zonën kohore efektive vetëm për komandën aktuale.
  • data: Komanda date.
  • -d @0: Ne i themi date që të përdorë një varg si hyrje, jo kohën për momentin. Vargu në të cilin kalojmë mban zero sekonda.
  • +'%x %R': Vargu i formatit të daljes. Shenja e formatit %x i tregon datës të shfaqë vitin, muajin dhe ditën. Shenja e formatit %R udhëzon date të përdorë formatin 24-orësh për orët dhe minutat. Për shkak se ka hapësira në vargun e formatit, ne e mbështjellim të gjithë vargun me thonjëza të vetme në mënyrë që vargu të trajtohet si një artikull i vetëm.

Siç pritej, prodhimi është mesnata e 1 janarit 1970.

Deri herën tjetër

E thjeshta është shpesh më e mira. Numërimi i sekondave nga një bazë fikse është mënyra më e thjeshtë për të shënuar kalimin e kohës. Por kalimi i kohës sjell sfida të reja. Me korrigjimet që janë vendosur, duket se kemi kaluar deri në vitin 2486.

Mendoj se është e sigurt të thuhet se do të shqetësohemi për këtë pak më afër kohës.