2038. gada problēma — 32 bitu Unix laika pārplūde un risinājumi

2038. gada problēma: kā 32 bitu Unix laika pārplūde apdraud sistēmas un praktiski 64 bitu risinājumi, kas nodrošina drošu un ilgtermiņa laika uzskaiti.

Autors: Leandro Alegsa

2038. gada problēma (angļu: Year 2038 problem) rodas sistēmās, kurās laiks tiek glabāts kā 32 bitu vesels skaitlis — parasti kā skaitītājs sekundēs no Unix epohas, t.i., kopš 1970. gada 1. janvāra 00:00:00 UTC. Tā kā 32 bitu signed (parakstītā) vesela skaitļa maksimālā vērtība ir 2 147 483 647, pēdējā derīgā laika zīme pēc šī skaitļa sekundēm sakrīt ar 2038. gada 19. janvāri 03:14:07 UTC. Sekundi vēlāk int32 pārplūst un rezultāts tiek interpretēts kā negatīvs skaitlis (wraparound), ko sistēmas var attēlot kā laiku 1901. gada decembrī vai izraisīt citas neparedzētas darbības.

Kā tas ietekmē sistēmas

  • Operētājsistēmas un lietojumprogrammas, kas izmanto 32 bitu time_t vai līdzīgu laika formātu, var nepareizi rēķināt laikus, plānot uzdevumus, žurnālus un sertifikātu beigu derīguma termiņus.
  • Ietekmē var tikt novecojušas 32 bitu iekārtas un ieprogrammētas ierīces (ieskaitot rūpnieciskos kontrolierus, maršrutētājus, IoT ierīces), kurām nav viegli pieejamu atjauninājumu.
  • Datubāzes, failu sistēmas, reģistri un tīkla protokoli, kas glabā laika zīmes 32 bitos, var kļūt nekonsistenti vai neizpildīt vaicājumus, kas balstās uz laika salīdzinājumiem.

Tehniskie skaitļi — ko nozīmē pārplūde

  • Signed 32-bit maksimums: 2 147 483 647 sekundes → 2038-01-19 03:14:07 UTC.
  • Pārplūdes rezultāts (int32 wrap) tālāk tiks interpretēts kā negatīvs skaitlis — tas atbilst datumam 1901-12-13 20:45:52 UTC (int32 minimums: −2 147 483 648).
  • Unsigned 32-bit laika izmantošana pagarinātu datumu līdz 2106. gada 7. februārim (maksimums 4 294 967 295), taču tas nenodrošina risinājumu ilgtermiņā un var radīt citas saderības problēmas.

Risinājumi un pasākumi

  • Pāreja uz 64 bitu laiku (time_t 64): ilgtermiņa un vislabākā pieeja — laiku glabāt 64 bitu signed integer, kas nodrošina derīgumu miljardiem gadu. 64 bitu laiks ir plaši pieņemts mūsdienu 64 bitu operētājsistēmās.
  • Sistēmu atjaunināšana: atjaunināt OS kodolu, standardbibliotēkas (piem., glibc), lietojumprogrammas un firmware, lai tās lietotu 64 bitu laiku vai atbalstītu TIME64 sistēzvanus.
  • Programmatūras pielāgošana: pārkompilēt lietotnes ar jaunām bibliotēkām, pārbaudīt datu struktūras un saskarnes (ABI), lai izvairītos no neparedzētām kļūdām pēc time_t maiņas.
  • Alternatīvas laika reprezentācijas: ja nav iespējams pāriet uz 64 bitiem, apsveriet laika glabāšanu kā ISO 8601 teksta virkni vai kā strukturētu laiku (piem., struct timespec64), bet ņemiet vērā veiktspējas un vietas izmaksas.
  • Uzraudzība un tests: veikt inventarizāciju, identificēt kritiskās 32 bitu sistēmas (īpaši iestrādātās ierīces), izstrādāt testus un scenārijus, lai pārbaudītu uzvedību pēc laika maiņas.
  • Īstermiņa pagaidu risinājumi: ja pārslēgšanās nav iespējama, var izmantot firmware/OS patch, kas, piemēram, pārveido laika aprēķinus vai izmanto papildu laika lauku, taču tas parasti ir pagaidu un riskants risinājums.
  • Datubāzes un uzglabāšana: migrēt datu laukus, kas satur laika vērtības, uz 64 bitu tipu vai datetime formātu, nodrošināt migrācijas skriptus un atjaunot datus pēc pārbaužu plāna.

Praktiski ieteikumi administratoriem un attīstītājiem

  • Sastādiet sarakstu ar visām iekārtām un programmatūru, kas lieto 32 bitu laiku (OS, ierīču firmware, datubāzes, bibliotēkas).
  • Prioritizējiet kritiskās sistēmas (banku termināļi, rūpnieciskie kontrolieri, tīkli), kurus jāatjaunina vai jāaizvieto pirms 2038. gada.
  • Testējiet atjauninājumus drošā vidi (staging), imitējot datuma maiņu pāri 2038. gada robežai.
  • Sazinieties ar aparatūras un programmatūras piegādātājiem, lai uzzinātu par laika atbalsta atjauninājumiem vai ieteiktajiem risinājumiem.
  • Dokumentējiet visus veiktos labojumus un izstrādājiet atjaunināšanas plānu ilgtermiņā.

Vai tas skar mūsdienu datorus?

Daudzi mūsdienu 64 bitu datori un serveri jau izmanto 64 bitu laiku, tāpēc tie nav tieši ietekmēti. Tomēr liela daļa iekārtu (īpaši iestrādātas ierīces un vecākas 32 bitu sistēmas) joprojām var būt neaizsargātas. Tādēļ risinājuma ieviešana un sistēmu audits joprojām ir nepieciešami.

Kopsavilkums: 2038. gada problēma ir reāls datuma/veida ierobežojums 32 bitu laika glabāšanā. Lielākajai daļai mūsdienu 64 bitu sistēmu tas nav problēma, taču vecākas vai iestrādātas sistēmas prasa inventarizāciju, atjaunināšanu vai nomaiņu. Ilgtermiņa un drošākais risinājums ir pāreja uz 64 bitu laika reprezentāciju un rūpīga testēšana pirms 2038. gada.

Animācija, kurā redzams, kā tiks atiestatīts datums, kas attēlots kā parakstīts 32 bitu vesels skaitlis (2038. gada 19. janvārī 03:14:08 UTC).Zoom
Animācija, kurā redzams, kā tiks atiestatīts datums, kas attēlots kā parakstīts 32 bitu vesels skaitlis (2038. gada 19. janvārī 03:14:08 UTC).



Meklēt
AlegsaOnline.com - 2020 / 2025 - License CC3