![]() |
| |||
![]() | ||||
|
Į Mėnulį skridę kompiuteriai Prieš 50 m. trys astronautai ir du kompiuteriai (vienas pagrindiniame laive ir kitas nusileidimo į Mėnulį modulyje) nuskrido link Mėnulio (skaitykite Žmonės Mėnulyje). Astronautai iškart tapo įžymybėmis, o kompiuteriai, padėję valdyti laivą ir valdyti juos, žinomi tik siaurame technofilų rate. Sunku įvertinti NASA drąsą panaudoti kompiuterį Apollo misijoje. Tuo metu kompiuteriai buvo gremėzdiški, nerangūs ir reiklūs energijai. Tuo tarpu Apollo valdymo kompiuteris (AGC) turėjo tilpti prietaisų skyriuje mažesniame už rankinį bagažą ir naudoti ne daugiau energijos nei elektros lemputė ir kartu būti visiškai patikimas, nes jo gedimas galėjo kainuoti astronautų gyvybes. Entuziastai iššifravo kelias AGC programinės įrangos versijas ir jas paskelbė Internete. Tiesa, nelengva skaityti kodą, parašytą ezoterine ir pasenusia programavimo kalba. Norint suprasti ką kompiuteriai turėjo vykdyti, panagrinėkim Mėnulio modulio darbinę apkrovą kritiniu momentu automatinio nusileidimo metu. Pirmąja užduotimi buvo navigacija: padėties, greičio ir laivo orientacijos nustatymas, o tada trajektorijos į nusileidimą tašką sudarymas. Duomenys ateidavo iš giroskopų, greičio daviklių, inercinės orientavimosi sistemos, vėliau papildytos radariniu aukštimačiu. Ją paskaičiavus, pasukti variklio žiotis, kad kapsulė išlaikytų kursą. Tuo pat metu jis privalėjo reguliuoti traukos jėgą, kad palaikytų teisingą žemėjimo greitį. Šios užduotys buvo ypač sudėtingos, nes naudojant kurą keitėsi modulio masė ir svorio centras, o išmetamų dujų čiurkšlė buvo labai nestabili tad Mėnulio modulis buvo tarsi šluota, kurią reikia išlaikyti vertikaliai ant delno.
Svarbiu sprendimu buvo žodį sudarančių bitų kiekis buvo pasirinkta 16 bitų, iš kurių 1 bitas rezervuotas klaidų tikrinimui, tad duomenims, adresavimui ir komandoms buvo naudojama tik 15 bitų, kas reiškė skaitines reikšmes iki 32K, tačiau buvo galima žodžius grupuoti užtikrinant didesnes reikšmes. Pradiniame variante pirmi 3 komandos žodžio bitai reiškė operacijos kodą, o likę 12 buvo adresas. 3 bitai reiškė, kad galimos tik 8 komandos, o 12 bitų leido adresuoti 4096 žodžius. Inžinieriai rado būdus apeiti tuos apribojimus atmintį suskirstydami į kelias rėvas ir į Mėnulį skridusi versija buvo su 36.864 pastovios atminties žodžiais ir 2948-iais leidžiančiais užrašymą taigi apie 70 KB. Kas dėl greičio, - AGC galėjo vykdyti apie 40 tūkst. instrukcijų į sekundę. Minimalistinis aparatūrinis dizainas reikalavo ypatingų priemonių programinei įrangai. Esminis elementas buvo asemblerio kalbos naudojimas. AGC asemblerį sukūrė Hugh Blair-Smithas, inžinierius su gerais programavimo įgūdžiais didelėms ESM. Asembliuojama buvo meinfreime, ne pačiame AGC (tai vadinama kros-asembleriu). Meinfreime vyko ir programų vykdymo simuliacijos. Kita priemone buvo aukštesnio lygio kalbos interpretatorius, - kalbą sukūrė J. Halcombe Laningas, o interpretatorių daugiausia realizavo Charles A. Muntzas. Jis numatė matematinių koncepcijų panaudojimą be aritmetinių veiksmų ir matricas bei trigonometrines funkcijas. Tiek asemblerio, tiek interpretatoriaus komandos galėjo būti naudojamos kartu, tačiau to kaina buvo vykdymo sulėtėjimas. Executive programa, irgi suprojektuota Laningo, buvo tarsi miniatiūrinė OS. Ji tvarkė vykdymo laukiančių programų sąrašą atsižvelgdama į jų prioritetus. Smulkios tačiau svarbios užduotys galėjo įsiterpti kitoms programoms to net nepastebint jos buvo naudojamos signalams iš orientavimosi sistemos ir radarų apdorojimui. Bendrai paėmus, programinės įrangos kūrimas jam neatitiko dabartinių normų
(dabartiniu jų supratimu), nes buvo sunkokai suprantamas ir palaikomas, tačiau kodas, parašytas pagal dabartinį
supratimą, būtų netilpęs į 70 KB. Tarkim, TC instrukcija iškviečia paprogramę ir ne tik perduoda jai valdymą, bet ir į Q
registrą įsimena sekančios po TC instrukcijos adresą, kad paprogramė žinotų, kur gražinti valdymą. Tai suprantama!
Tačiau pakankamai dažnai paprogramė vykdymo metu pati pakeičia Q registro reikšmę ir taip iš jos grįžtama visai į kitą
vietą (tiesą sakant, prisipažinsiu, tokiu triuku ir aš kartais papiktnaudžiaudavau ankstyvosiose rašybos tikrinimo lietuvių
kalbai versijose siekdamas efektyvumo kai priklausomai nuo situacijos buvo dinamiškai paskaičiuojamas adresas
valdymo perdavimui netgi modifikuojant patį programos atmintyje kodą).
Komentarai, palydintys kodą, aiškūs ir netgi patrauklūs ar šmaikštūs (pvz., viena konstantų lentelė turi imperatyvią antraštę Noli Se Tangere, kas Biblijos įkvėpta lotynų kalba reiškia Neliesk!, o kita konstanta palydima su Numero mysterioso; atminties trūkumo atvejis palydimas su Viešbutyje neliko laisvų kambarių. Vienoje vietoje skatinama: Astronaute: paleisk tą kvailą dalyką, o tikrinant, ar astronautas laikėsi reikalavimų, priduriama: Pažiūrėk, ar jis nemeluoja). Užuominos į užgaidas sutinkamos ir paprogramių varduose bei žymėse (pvz., įjungianti variklius programa pavadinta BURNBABY, su aliuzija į Burn, baby, burn! šūkį, susijusį su 1965-ųjų juodaodžių maištu Los Andželo Wattso priemiestyje). Dauguma programuotojų buvo jauni ir aiškiai labai protingi, jie suformavo sutelktą grupę, kurioje aiškiai plito savi pokštai, nepriklausomai nuo to, kokia svarbi buvo užduotis. Be to, jie dirbo MIT, kuriame hakeriška kultūra turėjo ilgą kvailiojimo tradiciją. Vis tik projektą prižiūrėjo NASA ir kiekviena programinės įrangos iteracija buvo peržiūrima ir aprobuojama įvairiuose federalinės biurokratijos lygiose. Tad labiausiai stebina ne tai, kad šmaikštumai buvo įrašyti kode, o tai, kad jų nepanaikino koks nors humoro nesuprantantis funkcionierius Margarita Hamilton, prie grupės prisijungusi 1963-iais ir vėliau tapusi laboratorijos direktore, pasakė, kad Apollo projektas suteikia galimybę padaryti visas praktiškai įmanomas klaidas. Pvz., AGC turėjo du formatus neigiamiems skaičiams ir jų supainiojimas sukeltų klaidą; be to padėtis ir greitis buvo skaičiuojami metrinėje sistemoje, o astronautams pateikiami pėdomis pamiršus konvertuoti galėjo kilti daug nemalonumų. Be to nuolat pavojų kėlė skaičiaus reikšmės perpildymas skaičius galėjo iš teigiamo staiga virsti neigiamu. Atrodo, kad tokie dalykai negali prasmukti pro griežtas kontroles, tačiau jiems laikas nuo laiko tai pavyksta štai 1996 m. overflow klaida sunaikino Ariane 5 su 4-iais jos nešamais palydovais, o 1999 m. per matavimo vienetų klaidą (panaudojus paundalą vietoje niutono) buvo prarastas Mars Climate Orbiter. Ji dar pridūrė, kad NASA vetavo kai kuriuos jų įžūlius išradimus. Nesunku sudaryti ilgą sąrašą to, kas galėjo vykti kitaip, tačiau nevyko. Teisingas pertraukimų apdorojimas ir daugiagijiškumas ir šiandien išlieka problema. Labiausiai erzinančios, pastoviai atsirandančios, sunkiai atgaminamos klaidos gali dažnai būti susijusios su kokiu nors nenumatytu konfliktu tarp konkuruojančių procesų. Nė vienas AGC skrydžio metu neišėjo iš rikiuotės, tačiau buvo jaudinimosi akimirkų. Kai leidosi nusileidimo modulis, DSKY displėjus nelauktai pranešė apie programinį pavojaus signalą su 1202 kodu (apie nusileidimą Mėnulyje ir šio pavojaus gavimą skaitykite Aklas nusileidimas). Armstrongas su Oldrinu nežinojo, ar tęsti nusileidimą ar grįžti į pagrindinį laivą. Hjustono valdymo centre sprendimą priėmė Steve Bales, pasirinkdamas Tęsti! Tuo metu MITe buvo ieškoma, kas galėjo iššaukti tą signalą. Atitinkamoje programų sąrašo eilutėje paaiškinantis komentaras skelbė: Bazinių rinkinių daugiau nėra. Kaskart, kai Executive startuodavo naują užduotį, jis naujam procesui išskirdavo 11 žodžių. Tam buvo numatyta atmintis tik 8 iškvietimams. Jei Executive užprašydavo daugiau nei 8-is duomenų rinkinius, buvo užprogramuotas klaidos kodas 1202. Tačiau kaip tai galėjo būti, jei nusileidimo metu niekad nebuvo daugiau 8-ių galimų vykdymui užduočių? Viena tų užduočių buvo stambi: SERVICER vykdė visus navigacijos, valdymo ir kontrolės paskaičiavimus. Ji buvo numatyta vykdyti kas 2 sekundės ir turėjo per tą laiką baigtis. Dėl kažkokios priežasties skaičiavimai truko ilgiau nei reikėjo. Viena SERVICER kopija vis dar tebeveikė, kai buvo paleista nauja, sukurdama neužbaigtų užduočių sąrašą. Vis tik situacija nebuvo didele paslaptimi ir buvo pastebėta per testinius bandymus. Du išsisinchronizavę maitinimo šaltiniai vertė radarą siųsti netikrų signalų srautą, kurį AGC tvarkingai apdorodavo. Kiekvienas impulsas užimdavo vieną kompiuterio atminties ciklą, trunkantį apie 12 ms. Radaras gali siųsti iki 12800 impulsų į sekundę, kurie galėjo suryti iki 15% kompiuterio pajėgumo. Projektuotojai buvo numatę 10% atsargą. Apie šios anomalijos priežastis buvo daug rašyta, tačiau nuomonės išsiskyrė dėl to, kas dėl to buvo kaltas ir kaip to buvo galima išvengti. Daugelyje kompiuterinių sistemų kritinio resurso išnaudojimas iššaukia fatalią klaidą ir sistema liaunasi dirbusi. Vis tik AGC sureagavo kitaip jis visaip bandė susitvarkyti su kilusia padėtimi ir tebedirbo. Po kiekvieno avarinio signalo BAILOUT procedūra pašalindavo visas Executive vykdomas užduotis, o tada restartuodavo svarbiausias jų. Tai kažkas panašaus į kompiuterio restartą... Neabejotinai AGC buvo svarbiu skrydžio į Mėnulį komponentu ir todėl keista, kad stambiausi muziejai ir archyvai tiek mažai dėmesio parodė AGC programinei įrangai, suteikę mėgėjams galimybę išsaugoti, aiškintis ir platinti tą medžiagą. 2003 m. Ronald Burkey stebėjo filmą apie Apollo 13 misiją, pasibaigusią sprogimu skrendant link Mėnulio. Jame kelis kartus šmėkštelėjo DSKY vaizdas ir R. Burkey, dirbęs su Įterptinėmis (embedded) kompiuterinėmis sistemomis, nusprendė išsiaiškinti AGC. Jis sutarė su MIT muziejumi, kad jam leis nuskenuoti kodą, o tada daugelis savanorių padėjo atgaminti kodą iš 3500 puslapių skanuotų vaizdų. Galiausiai jis ne tik sukūrė virtualų AGC, bet ir naują asemblerį (originalus vis tik būtų neveikęs šiuolaikiniuose kompiuteriuose). Vėliau gauti skenai ir kitoms Apollo misijoms. Jie prieinami virtualaus AGC svetainėje. Papildomi šaltiniai:
NSO.LT svetainė |