O kas nutiko? Problema buvo ne mechaninė. Ir niekas skrydžio nesabotavo. Raketą susprogdino elementari programinės įrangos klaida. Kompiuteris nesugebėjo susidoroti su matematinėmis užduotimis – jį iš proto išvarė didesnis, nei numatyta pagal apibrėžimą, skaičius, rašo BBC.

Ir, pasirodo, ši EKA raketos katastrofa – ne išimtinė. Panašios klaidos ne tik naikino raketas, bet ir pradangindavo kosminius zondus ar nukreipdavo karines raketas nuo numatyto kurso. Kas gi tai per klaidos? Ir dėl ko jos nutinka?

Įsivaizduokite, kad automobilio rida yra 168 095 kilometrai, bet pats odometras yra penkių skaitmenų, t. y., maksimali jo rodoma ridos reikšmė yra 99 999 kilometrai. Po to įvyktų skaičių persivertimas ir jūsų matoma rida būtų vos 68 095 kilometrai. Lygiai toks apribojimas ir pasmerkė „Ariane 5“ raketą su visu jos kroviniu. Jeigu konkrečiau, formaliai tai yra vadinama „integer overflow“, arba mūsų kalba – skaičiaus maksimalios reikšmės viršijimas. Viršijus šią reikšmę skaičiai tampa per dideliais, kad būtų saugomi jiems skirtoje kompiuterio sistemos vietoje, o dėl to galima susilaukti įvairiausių nemalonumų.

Nesėkmingas startas

Atlikus išsamų „Ariane“ raketos sprogimo tyrimą išaiškėjo, kad naujosios raketos kompiuteryje išliko programinės įrangos fragmentas iš senesnės kartos raketos, „Ariane 4“. Ir šiam fragmentui buvo nesuprantamas naujos, greitesnės raketos greitį registruojančių jutiklių siunčiami rodmenys. Dėl to kompiuteris, nesuprasdamas ką daryti su tokio dydžio skaičiais, inicijavo susinaikinimo funkciją. Po poros sekundžių ant žemės leidosi raketos nuolaužos.

Kaip bebūtų keista, analogiškos klaidos pasireiškia labai jau dažnai. Pavyzdžiui, įtariama, kad dėl tokios pačios klaidos JAV kosmoso agentūra NASA 2013 metais praganė savo zondą „Deep Impact“.

O praėjusią savaitę pasklido informacija, kad panašiai klaidai neatspari ir keleivinio lėktuvo „Boeing 787“ programinė įranga. Jeigu valdymo modulis, kontroliuojantis energijos tiekimą lėktuvo varikliams, nepertraukiamai veiks ilgiau nei 248 dienas, jis pereis į saugų režimą ir išjungs visus variklius. Tai reiškia, kad hipotetiškai varikliai galėtų būti išjungti net vidury skrydžio.

JAV Federalinė aviacijos administracija (FAA) šiuo klausimu išleido direktyvą, kurioje nurodoma, kad lėktuvo valdymo modulio programinėje įrangoje po tam tikro laiko (248 dienų) gali įvykti „persipildymas“. Nors išsamesnės informacijos nepateikiama – nei FAA, nei „Boeing“ šios direktyvos nekomentavo – kai kurie nepriklausomi stebėtojai nurodė, kad 248 dienos (kuomet skaičiavimas vykdomas sekundės šimtosiomis dalimis) prilygsta skaičiui 2 147 483 647, kuris programinėje įrangoje yra labai svarbus.

Kuo gi svarbus? O gi, pasirodo, 2 147 483 647 – tai maksimali teigiama reikšmė, kuri gali būti saugoma 32 bitų registre, būdingame daugeliui kompiuterių sistemų. Palyginimui, „Ariane“ raketoje buvo naudojamas 16 bitų registras, kurio maksimali saugoma reikšmė yra gerokai mažesnė – vos 32 767.

Keista riba

Skaičių aibė yra begalinė. O tai kodėl gi mes juos bandome sutalpinti į ribotą atminties kiekį? Atsakymas – tradicinis kompiuterių reikalavimas visur ir viskame siekti efektyvumo. Kadaise atmintis būdavo gerokai brangesnė nei šiais laikais, o didesnių reikšmių apdorojimas trukdavo ilgiau. Laikantis tam tikrų apibrėžtų apribojimų programinė įranga galėdavo veikti stabiliau, greičiau. Raketų valdymo sistemos itin greitai turi įvykdyti milžiniškus skaičiavimų kiekius, taigi, būtų svarbu joms suteikti lankstumą, tačiau „Ariane 5“ katastrofa įrodė, kad ne visada galima iš anksto numatyti tokių klaidų galimybę.

„Tenka pripažinti, kad programinėje įrangoje visuomet aproksimuojame realybę. Visada tenka ieškoti inžinerinio kompromiso tarp tikslesnio realybės atvaizdavimo kainos ir efektyvumo teikiamos naudos“, – sakė Carnegie Mellon universiteto (JAV) programinės įrangos ekspertas Billas Scherlisas.

Minesotos universiteto (JAV) matematikas Douglasas Arnoldas „Ariane 5“ incidentą aprašo savo svetainėje, pavadintoje „Kai kurios katastrofos, kurių priežastis yra blogas skaičių apdorojimas“. D. Arnoldas savo svetainėje mini ir 1991 metais taip ir nepaleistą „Patriot“ karinę raketą, kuri turėjo perimti irakiečių „Scud“ raketą, Persijos karo metu paleistą į JAV kariuomenės stovyklą. Tąkart maksimalios skaitinės reikšmės viršijimas reiškė, kad priešraketinės gynybos sistema klaidingai nustatė „Scud“ raketos, skriejusios 1,7 km/s greičiu, poziciją ir jos ieškojo 500 metrų atstumu nuo tikrosios raketos vietos, o neradusi raketos numatytoje vietoje, jos sekimo ir sunaikinimo procedūrą nutraukė.

Klaida kainavo 28 karių gyvybes, dar 98 žmonės buvo sužeisti. Visas kompiuterio klaidos pasireiškimo procesas šiuo atveju labai sudėtingas, tačiau Sidnėjaus universiteto (Australija) programinės įrangos inžinierius Andrew Lumas yra publikavęs gana suprantamą aprašymą, kaip viskas įvyko.

Gangnam klaida

Laimei, ne visi maksimalios skaitinės reikšmės viršijimo klaidos rezultatai būna tokie tragiški. Kartais jie sukuria tiesiog komiškas ar nepatogias situacijas. Pavyzdžiui, kompiuteriniame žaidime „Civilization“ panašios kilmės klaida lėmė, kad įprastai labai taikus veikėjas, Indijos lyderis Gandhi žaidimo pabaigoje tampa nesuvokiamai karingu. Pasirinkus tam tikrą žaidimo režimą, link žaidimo pabaigos reikšmė, nusakanti Gandhi agresyvumą, pasiekia nulį, per jį persirita ir tampa maksimalia. Dėl to šis taikus žmogus žaidimo oponentams pradeda kiekvieno ėjimo metu grasinti branduolinėmis raketomis.

O gruodį internetą apskriejo žinia, kad visų laikų populiariausias „Youtube“ vaizdo įrašas „Gangnam Style„sulaužė“ svetainės peržiūrų skaitliuką. Pasirodo, šis skaitliukas buvo užprogramuotas taip, kad jo maksimali reikšmė buvo tie patys 2 147 483 647 – maksimali reikšmė 32 bitų registre, kuriame 1 bitas skiriamas teigiamo/neigiamo ženklo saugojimui. Bet galų gale paaiškėjo, kad tai suveikė kaip puiki „Youtube“ reklama: „Google“ programuotojai operatyviai pataisė skaitliuką, o viso pasaulio žiniasklaida negailėjo dėmesio populiariausiam pasaulyje vaizdo įrašui. Dabar nauja maksimali skaitliuko reikšmė yra gerokai didesnė už kvintilijoną.

B. Scherlisas pabrėžė, kad ankstesnis maksimumas atskleidžia, jog pirmieji „Youtube“ programuotojai nesitikėjo pasiekti tokio populiarumo. „Be jokios abejonės, kai buvo pradedama kurti „Youtube“ programinė įranga, manau, bet kokiam programuotojui buvo sunku įsivaizduoti, kad bus viršytas toks skaičius“, – sakė B. Scherlisas.

Kartais būtent toks trumparegiškas mąstymas, kuris tuo metu atrodo protingas, ilgainiui sukelia problemų. Pavyzdžiui, daugiausiai apkalbinėta kompiuterinė klaida istorijoje, kurią ir iki šiol tikriausiai prisimena daugelis, buvo kelis metus visoje pasaulio žiniasklaidoje linksniuojama „Tūkstantmečio klaida“ (arba, jei trumpai, Y2K). Ir nors visas pasaulio kompiuterines sistemas sugadinti grasinusi klaida atėjus lemtingai akimirkai pasirodė visiškai nepavojinga ir bedantė, galvos skausmo ji sukėlė tikrai nemažai.

Y2K klaidos esmė labai paprasta. Kas nutinka, kai metus skaičiuoji vertindamas tik du paskutinius skaitmenis? 2000 metais tampa identiškais 1900 metams. Daug žmonių laiku suvokė, kad tai bet kokiai kompiuterinei sistemai, operuojančiai tokio tipo duomenimis, prasidėjus naujam tūkstantmečiui gali kilti nemenkų problemų. Dėl to dar iki šio svarbiojo datos virsmo buvo publikuota gausybė patarimų programuotojams, kurie galėtų iki 2000 metų sausio 1 dienos pakoreguoti savo sistemose veikiančias programas.

Išmušus dvyliktai valandai lėktuvai iš dangaus kristi nepradėjo, bet būta keleto smulkių incidentų. Pavyzdžiui, Japonijos Išikavos prefektūroje liovėsi veikti radiacijos stebėjimo įranga, JAV Delavero valstijoje sutriko 150 lošimų aparatų, o keliose svetainėse pirmą 2000 metų dieną buvo rodoma data „19100 metų Sausio 1“.

Praėjus dvylikai metų programuotojai šią klaidą visiškai pamiršo, todėl ji ir vėl parodė, kas nutinka, kai programuotojams stinga atidumo: Švedijoje gyvenanti 105 metų moteris Anna Eriksson sulaukė laiško, raginančio atvykti į ikimokyklinę grupę. Mat laiškų siuntinėjimą valdanti programinė įranga kvietė visus žmonės, gimusius „07“ metais. Bet niekas nesuko galvos, kad kvietimą gaus ne tik tie, kurie gimė 2007 metais, bet ir gimusieji dar 1907 metais. Dėl metų teisingo atpažinimo klaidos 2010 metais iškart po naujųjų metų milijonai Vokietijos kreditinių ir debitinių kortelių naudotojai buvo nustebinti – kompiuterio klaida iš jų atėmė galimybę atsiskaityti kortele.

Kita svarbi data – 2038 metai

Maždaug prieš 15 metų programuotojas Williamas Porquetas toliaregiškai numatė ir dar vieną svarbią datą – 2038 metų sausio 19, 3:14:07 Grinvičo laiku, tą akimirką sekundžių, prabėgusių nuo 1970 metų sausio 1 dienos pradžios, kiekis viršys maksimalią daugelio šiandienių kompiuterių sistemose saugomo datos ir laiko registro vertę. Jei šiai klaidai nebus pasiruošta taip, kaip Y2K, galime sulaukti nemenkų nemalonumų ir kompiuterio veikimo bėdų.

„Pirmąkart apie tai parašiau 1999 metais. Įsigijau domeno pavadinimą 2038.org ir iš pradžių maniau, kad iš to gali gautis neblogas pokštas. Tai buvo tarsi satyra, papokštavimas, skirtas kitiems kompiuterių moksliukams, kurie sakytų „be problemų, 2037 metais ištaisysime...“ O paskui susipratau, kad ši klaida ir iš tiesų gali sukelti nemenkų bėdų“, – pasakojo programuotojas.

W. Porquetas labiausiai nerimauja dėl senų programinės įrangos elementų, veikiančių kompiuteriuose, kurie jau seniai niekam nebeįdomūs – senuose, sustabarėjusiuose tinkluose arba šiaip senuose kai kuriose pasaulio vietose naudojamuose kompiuteriuose. Kiek jų bus vis dar naudojami po 23 metų ir kokios gali būti šios datos pasekmės – galima tik spėlioti.

„Daugelį kompiuterinių sistemų galima „nulaužti“ prognozuojamai. Bet ši klaida galėtų suveikti neprognozuojamai“, – įspėjo programuotojas.

Laiko klaidos

Kembridžo universiteto (Jungtinė Karalystė) kompiuterių mokslininkas Markusas Kuhnas aiškino, kad su laiku susijusios klaidos visuomenę domina iš dalies dėl to, kad jų pasekmės yra neprognozuojamos, bet taip pat iš dalies dėl to, kad jos „nėra netikėtos“ ir kad žmonės turi progą dar iki klaidos pasireiškimo galimybės paspėlioti, kas galėtų nutikti atėjus lemtingai akimirkai.

M. Kuhnas mano, kad 2038 metų problema bus kur kas mažiau reikšminga, nei Y2K, nes tūkstantmečio klaida jau išmokė kompiuterių pramonę parengti reikiamas pataisas.

Tuo tarpu pačiam M. Kuhnui už 2038 metų įvykius kur kas įdomiau, kas nutiks šių metų birželį. 2015 metai bus viena sekunde ilgesni nei 2014 metai – taip vykdoma astronominio laiko (skaičiuojamo pagal mūsų planetos sukimąsi) bei atominio laiko (paties tiksliausio dabar žinomo laiko skaičiavimo sekundėmis būdo) neatitikimo korekcija. Nors atominis laikas, kuris šiemet bus koreguojamas keliamąja sekunde, yra beveik nesuvokiamai tikslus, jis šiek tiek nedera su astronominiu laiku dėl to, kad Žemės sukimasis labai pamažu lėtėja.

Planetos sukimosi greičiui įtakos turi geologiniai reiškiniai, tokie kaip Žemės drebėjimai, todėl iš anksto numatyti, kada prireiks keliamosios sekundės, iš esmės neįmanoma. Paskutinė tokia sekundė į metus buvo įterpta 2012 metais – dėl to sutriko daugybės kompiuterių veikla. Belieka tikėtis, kad prieš trejus metus programuotojai pasisėmė patirties ir šiemet bus labiau pasirengę.

Panašu, kad ką bedarytume, kai kurie mūsų pageidaujami skaičiai ir skaičiavimai visuomet peržengs kompiuterių galimybes ir sukels menkus arba labai netgi nemenkus gedimus. „Iš Y2K ir kitų panašių atvejų įgijome labai daug patirties. Tačiau realybė, kurioje mes nepaliaujamai kuriame aproksimacijas ir turime laviruoti tarp tikslumo ir efektyvumo? Ji su mumis bus visą laiką“, – sakė B. Scherlisas.

Šaltinis
Temos
Griežtai draudžiama Delfi paskelbtą informaciją panaudoti kitose interneto svetainėse, žiniasklaidos priemonėse ar kitur arba platinti mūsų medžiagą kuriuo nors pavidalu be sutikimo, o jei sutikimas gautas, būtina nurodyti Delfi kaip šaltinį.
www.DELFI.lt
Prisijungti prie diskusijos Rodyti diskusiją (60)