loader
bg-category
Kaj je leto 2038 Problem v Linuxu? Ali se Unix Clocks Fail odpove 19. januarja 2038?

Delite S Svojimi Prijatelji

Avtorjev Članki: Kenneth Douglas

Kratki bajti: Če pozorno spremljate razvoj Linuxa, morate poznati napako leta 2038. t Ta težava obstaja, ker je zadnji čas, ki je lahko predstavljen v Unixovem podpisanem 32-bitnem celoštevilčnem formatu časa, 03:14:07 UTC 19. januarja 2038. Potem bodo programi C, ki uporabljajo standardno časovno knjižnico, začeli imeti težave z datumi.

Problem leta 2000, znan tudi kot Bug Millenium ali problem Y2K, je bila računalniška napaka, povezana z oblikovanjem in shranjevanjem koledarskega datuma. Ta težava se je začela, ker je bilo shranjevanje v prvih računalnikih drago. Torej, da bi zmanjšali prostor za shranjevanje, so programerji uporabili šestmestni format MMDDYY. Ker so lahko programi dodali 19 na leto YY, je prihranil denar, vendar je zmanjšal velikost datotek in podatkovnih baz. Vendar pa je bilo takim programom težko razlikovati med letoma 2000, 1900 in 19100.

Za reševanje tega vprašanja so vlade ustanovile posebne odbore, da bi zagotovile, da je kritična infrastruktura odpravila ta problem. Zdaj, podobno temu, je problem leta 2038 še eno vprašanje za računalništvo.

Problem leta 2038 imenujemo tudi Unix Millenium Bug ali Y2K38 bug. Ta napaka lahko povzroči težave v situacijah shranjevanja podatkov, v katerih so časovne vrednosti shranjene ali izračunane kot podpisano 32-bitno celo število.

Najnovejši čas, ki je v Unixovem podpisanem 32-bitnem časovnem formatu časa lahko predstavljen, je 03:14:07 UTC 19. januarja 2038, kar je 2,147,483,647 sekund po 1. januarju 1970. Po tem času, zaradi prekoračitve celega števila, časovne vrednosti bodo shranjene kot negativno število, sistemi pa bodo prebrali datum kot 13. december 1901 in ne 19. januar 2038.

V preprostem jeziku bodo Unixovi stroji sčasoma zmanjkali bitov, da odkljukajo sekunde. Tako bodo na ta dan programi C, ki uporabljajo standardno knjižnico časa, začeli imeti težave z datumi. Več o tem lahko preberete na Wikipediji.

Tukaj je animacija, ki prikazuje, kako bi napaka v letu 2038 ponastavila datum:

Trenutno ni univerzalne rešitve za napako leta 2038. t Če bi se spremenila definicija podatkovnega tipa time_t, ki se uporablja za shranjevanje časovnih vrednosti, bi bil v programih, ki so odvisni od narave podpisanega 32-bitnega integer števila time_t, nekaj težav z združljivostjo kode. Recimo, da je vrsta time_t spremenjena v nepodpisano 32-bitno celo število, kar bi povečalo zadnjo časovno omejitev. Vendar pa bi se zmešalo z datumi pred letom 1970, ki jih predstavljajo negativna cela števila.

Operacijski sistemi in programi, ki uporabljajo 64-bitno arhitekturo, uporabljajo 64-bitna cela števila time_t. Uporaba podpisane 64-bitne vrednosti uvaja datume do 292 milijard let od zdaj naprej.

Na voljo je bilo veliko predlogov, vključno s shranjevanjem milisekund / mikrosekund od obdobja (1. januar 1970 ali 1. januar 2000) v podpisanem 64-bitnem int, da bi dobili minimalno območje 300.000 let. Drugi predlogi se nanašajo na preračunavanje programov z novo knjižnico itd. Delo poteka in po mnenju strokovnjakov problem leta 2038 ni težko popraviti.

Ali je bila ta zgodba o problemu leta 2038 v Linuxu zanimiva? Delite svoje poglede z nami.

Delite S Svojimi Prijatelji

Vaši Komentarji