Prečo Windows 95 a 98 nemohli bežať dlhšie ako 49 dní?

  • Chyby v operačných systémoch nie sú ničím ojedinelým.
  • Veď ide o sofistikovaný program, ktorý toho musí zvládať veľa.
  • Niektoré chyby sú vážne, iné sú poriadne bizarné.

Chyby v operačných systémoch nie sú ničím výnimočným. Veď ide o extrémne sofistikovaný program, na ktorom pracujú celé tímy a pravidelne ho upravujú. Na pridávanie nových funkcií sme dnes vďaka verziám Windows 10 a Windows 11 zvyknutí viac než kedykoľvek predtým. K tomu sa ešte pridáva každomesačné opravovanie nedostatkov, optimalizovanie, plátanie bezpečnostných dier či neustály posun v oblasti dostupného hardvéru, ale aj používaných aplikácií.

Úpravy v kóde operačného systému sa dnes dejú rýchlejšie a na omnoho väčšej škále než pred jednou či dvoma dekádami. A hoci sa vývojári a testovacie tímy vo všeobecnosti snažia všetko poriadne vyskúšať, realita je taká, že úplne sa chybám vyhnúť nedá. Sme ľudia, mýlime sa. Túto skutočnosť sa potom snažia využiť pochybné živly, ktoré sú schopné nájsť aj tú najmenšiu dieru a pretlačiť cez ňu škodlivé kódy alebo ju iným spôsobom využiť vo svoj prospech.

Chyby v softvéroch tu boli, sú a vždy budú. Niekedy ide o drobnosti, inokedy majú vážny charakter. A niekedy sú pomerne úsmevné. Práve do tejto kategórie by som zaradil aj bizanú a dnes už dávno opravenú chybu z čias operačných systémov Windows 95 a Windows 98. Tá bola vo svojej podstate veľmi nenápadná, no postarala sa o to, že táto dvojica systémov nemohla bežať dlhšie ako 49 dní. Presnejšie dlhšie ako 49,7 dní.

Systémy po uplynutí tejto doby zdanlivo bez príčiny prestali reagovať. Microsoft na túto skutočnosť upozornil v roku 1999, kedy čiastočne prezradil aj príčinu tejto neobvyklej situácie. Konkrétne spomínal problém s časovým algoritmom v súbore Vtdapi.vxd. O čo presne išlo?

Windows používal funkciu GetTickTime, ktorá ako hodnotu v milisekundách vracala čas, ktorý uplynul od spustenia systému. Táto hodnota bola uchovávaná v 32-bitovom dátovom type DWORD, ktorý môže obsahovať maximálne číslo 2^32, teda 4 294 967 296. No, a práve to bola príčina problému. Extrémne dlhý beh systémov Windows 95 a Windows 98 spôsobil to, že maximálna hodnota bola presiahnutá a na svete bol problém.

Ak do toho zapojíme trochu matematiky, tak to bude hneď jasné. 1 sekunda má 1000 milisekúnd, jedna minúta má 60 sekúnd, jedna hodina 60 minút a jeden deň má 24 hodín. Deň má potom 1000 * 60 * 60 * 24 = 86 400 000 milisekúnd. Potom mám už len stačí vydeliť dostupnú kapacitu DWORDU počtom milisekúnd v jednom dni: 4 294 967 296/86 400 000 a dostávame sa k číslu 49,71. Takže po 49,71 dňoch bol dostupných rozsah DWORDu vyčerpaný a bolo to…

Historická podoba stránky technickej podpory Microsoftu, ktorá upozornila na problém.
Pridaj komentár

Vaša e-mailová adresa nebude zverejnená.

Mohlo by zaujať