Į 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.

DSKY panelė AGC buvo sukurtas MIT Ch.S Draper‘io įkurtoje prietaisų laboratorijoje, skirtoje elektronikai balistinėms raketoms – ir jai jis buvo pirmasis pilnai programuojamas kompiuteris. Inžinieriai panaudojo naują technologiją: silicio integralinę schemą. Kiekvienas Mėnulio misijos kompiuteris turėjo apie 2800 mikroschemų ant silicio, po 6 tranzistorius mikroschemoje. Atminčiai buvo panaudoti feritiniai toroidai, įmagnetinami bet kuria kryptimi (perteikiant 0 arba 1). Daugelis jų buvo skirti tik skaitymui, atminties turinys užfiksuotas pagaminimo momentu. Visa tai buvo sutalpinta į metalinį korpusą, o astronautai su juo komunikavo per DSKY, atrodantį lyg mikrobangų krosnelės valdymo panelė – su skaitmenine klaviatūra, keliais papildomais klavišais ir displėjumi, atvaizduojančiu 21 ryškiai žalius skaitmenis.

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-Smith‘as, 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 Laning’as, o interpretatorių daugiausia realizavo Charles A. Muntz’as. 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 Laning‘o, 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ą). Kodo pavyzdys

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 Watts‘o 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 MIT‘e 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:

  1. H. Blair-Smith. Left Brains for the Right Stuff: Computers, Space, and History//2015
  2. R. Burkey. Virtual AGC-AGS-LVDC-Gemini Project Overview, 2019
  3. G.W. Cherry. Exegesis of the 1201 and 1202 alarms which occurred during the Mission G lunar landing// Memorandum from MIT Instrumentation Laboratory to NASA Manned Spacecraft Center, August 4, 1969
  4. E.C. Hall. Journey to the Moon: The History of the Apollo Guidance Computer, 1996
  5. D.A. Mindell. Digital Apollo: Human and Machine in Spaceflight, 2008
  6. F. O’Brien. The Apollo Guidance Computer: Architecture and Operation, 2010

NSO.LT svetainė
Matematikos skiltis
HOT.LT svetainė
Vartiklis