Į Mėnulį skridę kompiuteriai

Taip pat skaitykite  NASA gyvosios kaluliatorės

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į Kodo pavyzdys 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 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

Tuo metu programavimas atrodė kitaip. Jie programos kodą rašė ant „kodavimo popieriaus“, kurį perduodavo perforatoriams, kurie jį išperforuodavo perfokortose (kursiokai, tikriausiai, pamena mane, besinešiojantį pilną „diplomatą“ kortų – skirtumas tik tas, kad jas perforuodavau pats: MaF’e irgi stovėjo perforatoriai). Jos nakčiai buvo atiduodamos vykdyti „meinfreimams“, o ryte gaudavo listingus, kuriuos segdavo į segtuvus. O kadangi kodas buvo rašomas asemblerio kalba, ir perfokortų buvo daug, ir listngai sudarė ištisas kauges.

Vis dėlto dar ir tai nebuvo istorijos pabaiga. Kai kodas būdavo pripažintas patikimu, patyrusios „siuvėjos“, vadinamosios „senutės“, vėrė varinius laidus per magnetinius žiedelius (laidas, einantis per šerdį, reiškė 1, o einantis aplink ją – 0). Taip buvo sukuriama vadinamoji „virvinė atmintis“, kuri buvo įmontuojama į erdvėlaivio navigacinį kompiuterį (kadangi dalyvavau projekte su tarybine kosmonautika, teko matyti, kaip 9-me dešimtm. buvo ruošiamos kompiuterinės plokštė „Kosmos“ palydovams – padengiamos storu apsauginiu sluoksniu, kad būtų atsparios išoriniams poveikiams – mikrometeorams, radiacijai ir pan.). Savaime suprantama, tai reikalavo didelių pastangų ir kėlė įtampą.

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 „Erelis“ (Eagle), 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ą...

Margarita Hamilton prie kodo 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.


*) Margarita Hamilton (Margaret Elaine Hamilton, 1936-2026) – amerikiečių informatikė, verslininkė. Vadovavo MIT matavimo sistemų laboratorijos programinės įrangos kūrimo skyriui, kuris rengė borto PĮ „Apollo“ misijoms. Nutraukus „Apollo“ programą, Draperio laboratorija tapo nepriklausoma nuo MIT ir M. Hamilton 1976 m. įsteigė „Higher Order Software“ (klaidų išvengimo ir darbo sutiko PĮ srityje; vienas produktų - USE.IT), o 1986 m. - „Hamilton Technologies“ (susijusi su USL kalba ir ja paremta automatizacijos aplinka). 1986 m. gavo Ada Lovelace premiją, įsteigtą Moterų kompiuterijoje asociacijos, 2003 m. gavo Išskirtinę NASA premiją, o už darbą su NASA 2016 m. B. Obama jai įteikė Prezidentinį laisvės medalį.
MIT pradėjo dirbti 1959 m. (pradžioje meteorologijos skyriuje, dalyvaudama PĮ oro prognozėms kūrime) ir prisidėjo prie Lorenco chaoso teorijos kūrimo. 1961-63  m. dirbo SAGE projekte, kur prisidėjo prie AN/FSQ-7 (XD-1), ieškančios priešo lėktuvų, prototipo kūrimo, o taip pat parašė programą palydovų sekimui. Vėliau perėjo į MIT Dreiperio laboratoriją, kuriančią programas „Apollo“ misijoms, kur buvo atsakinga už skrydžio valdymo bei sisteminę PĮ. Jos kompetencijų sričiai priklausė ir sistemų architektūra, įmonės ir verslo procesų modeliavimas, PĮ kūrimo paradigmos ir t.t. Ypač išgarsėjo PĮ, padėjusi išvengti avarijos „Apollo-11” nusileidimo į Mėnulį metu (žr. apie tą nusileidimą).
Po „Apollo“ programos ji toliau dirbo prie „Skylab“ stoties bei kažkiek prie išankstinių reikalavimų „Space Shuttle“ PĮ. Iki 1976 m., kai Hamilton paliko NASA, ji buvo suformulavusi teoriją, grindžiamą 6-mis PĮ aksiomomis, tam, kad būtų išvengta sąsajos klaidų. Iš pradžių ši teorija buvo vadinama „Higher Order Software“ – ir tapo tapo bendraįkūrėja įmonės tokiu pavadinimu, kurios tikslas buvo sukurti visapusišką įrankių rinkinį, galintį visiškai pašalinti tokias klaidas. Kai tą įmonę nupirko investuotojai, ji 1986 m. steigė naują, „Hamilton Technologies“, kurios CEO buvo iki 80 m. amžiaus. Ji vystė USL kalba paremtą automatizaciją. Paskelbė per 130 publikacijų.

SAGE projektas jai „uždėjo antspaudą“ klaidų paieškai ir jų vengimui. Vėliau ji prisiminė:
„Veikdama mano programa nuolat skleisdavo garsus, primenančius bangų ošimą gražioje pajūrio pakrantėje, todėl visi ją vadinome „pajūrio programa“. Taip buvo iki vienos nakties, kai 4 val. ryto sulaukiau skambučio iš kompiuterių operatoriaus; jis pranešė, kad su mano programa nutiko kažkas labai blogo. Paklausiau, iš kur jis tai žino, o jis atsakė: „Ji nebeošia kaip pajūris!“ Taip atradome naują būdą programoms derinti – pasitelkiant garsą“.

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