Proces rozwoju zastosowany dla kodu w misjach Apollo 11?

57

Misje Apollo posiadały technologię nie bardziej skomplikowaną niż kieszonkowy kalkulator.

Z linku tutaj znajduje się informacja o Apollo Guidance Computer (AGC)

Komputer pokładowy Apollo Guidance Computer (AGC) miał około 1 stopy sześciennej z 2K 16-bitowej pamięci RAM i 36K na sztywno podłączonej pamięci z rdzeniem linowym z drutami miedzianymi nawleczonymi lub nie gwintowanymi przez małe rdzenie magnetyczne. 16-bitowe słowa zawierały na ogół 14 bitów danych (lub dwa kody operacyjne), 1 bit znaku i 1 bit parzystości. Czas cyklu wynosił 11,7 mikrosekund. Programowanie odbywało się w języku asemblera i języku interpretacyjnym, w odwrotnej polszczyźnie.

Tak więc natknąłem się na kod źródłowy, kiedy badałem, co tam jest, i zauważyłem świetne komentarze (np. TYMCZASOWE, NADZIEJE NADZIEJA)

VRTSTART    TS  WCHVERT
# Page 801
        CAF TWO     # WCHPHASE = 2 ---> VERTICAL: P65,P66,P67
        TS  WCHPHOLD
        TS  WCHPHASE
        TC  BANKCALL    # TEMPORARY, I HOPE HOPE HOPE
        CADR    STOPRATE    # TEMPORARY, I HOPE HOPE HOPE
        TC  DOWNFLAG    # PERMIT X-AXIS OVERRIDE
        ADRES   XOVINFLG
        TC  DOWNFLAG
        ADRES   REDFLAG
        TCF VERTGUID

Rzeczywiste programy w statku kosmicznym były przechowywane w pamięci liny rdzeniowej , starożytnej technologii pamięci wykonanej przez (dosłownie) tkanie tkaniny / liny, w której bitami były fizyczne pierścienie z materiału ferrytowego. Pamięć „rdzenia” jest odporna na promienie kosmiczne. Stan rdzenia nie zmieni się po bombardowaniu przez promieniowanie w kosmosie.

Oprogramowanie Virtual Apollo Guidance Computer (AGC) jest również dostępne na GITHUB!

Część dokumentacji znajduje się tutaj.

Kolejna próbka kodu źródłowego z świetnymi komentarzami.

033911,000064: 32,3017    06037        FLAGORGY        TC       INTPRET      #  DIONYSIAN FLAG WAVING

    034090,000243: 32,3241    13247        BZF      P63SPOT4               #  BRANCH IF ANTENNA ALREADY IN POSITION 1
    034091,000244: 
    034092,000245: 32,3242    33254        CAF      CODE500                #  ASTRONAUT:     PLEASE CRANK THE
    034093,000246: 32,3243    04616        TC       BANKCALL               #                 SILLY THING AROUND
    034094,000247: 32,3244    20623        CADR     GOPERF1                               
    034095,000248: 32,3245    16001        TCF      GOTOP00H               #  TERMINATE
    034096,000249: 32,3246    13235        TCF      P63SPOT3               #  PROCEED        SEE IF HE'S LYING


    034101,000254: 32,3251    04635        TC       POSTJUMP               #  OFF TO SEE THE WIZARD ...
    034102,000255: 32,3252    74126        CADR     BURNBABY

Moje pytanie brzmi:

  • W jaki sposób zespoły piszące tak dużo kodu mogły sprawić, że był on funkcjonalny, biorąc pod uwagę ówczesne narzędzia?

Ponieważ jeśli skompilujesz tyle kodu, który został użyty w Apollo 11 ... zajęłoby to dni, a nawet tygodnie. Poważnie wątpię, że wtedy programiści zostawili wszystko, by stało się przypadkiem.

Josip Ivic
źródło
4
Miałem dość znaczącą edycję, aby, mam nadzieję, uczynić to bardziej na temat. Myślę, że to fascynujące pytanie i mam nadzieję, że ludzie będą w stanie odpowiedzieć skutecznie!
enderland
3
Przeczytaj Hakerzy i Miesiąc mitycznego człowieka . Jest tam sporo materiału - nie jestem pewien, czy mieści się w odpowiedzi tutaj.
2
Tytuły pytań w stylu „Tag - Pytanie” są odradzane na Stack Exchange. Pozostaw tytuł bez zmian.
4
Nie było cyklu kompilacji / naprawy, jak sugeruje twoje pytanie. Nie utworzyłeś pamięci liny, przetestuj ją, a następnie powtórz, jeśli nie zadziała; masz to dobrze za pierwszym razem.
Robert Harvey,
7
@RobertHarvey masz HOPE HOPE HOPEto dobrze za pierwszym razem.

Odpowiedzi:

13

Był piękny dokument, który staram się ścigać o Johnie „Jacku”. Garman musiał „wymyślić” „wieloprogramowy system operacyjny o ustalonym priorytecie”. Być może miało to związek z modułem lądownika. Historia polegała na tym, że lądując na lądowniku, lepiej dać pierwszeństwo kierownictwu, ponieważ inne rzeczy, takie jak temperatura w kabinie przez następne 15 sekund, tak naprawdę nie miały znaczenia, czy się rozbiłeś i spłonął. Przy pierwszym strzale przeciążyli komputer i zaczęły się dziać alarmy, ponieważ niektóre podprogramy nie były wykonywane. Załadowano ich zbyt wiele, ale dzięki koncepcji priorytetu, którą Garman przewidział i wbudował, ponieważ uważał, że to dobry pomysł, procedury o niskim priorytecie nie zawiodły procedury lądowania o wyższym priorytecie.

Oglądając ówczesny film dokumentalny, byłem zaskoczony, jak to jest zrobić poważną zmianę kodu bez informowania kierownictwa i prawie wyrzucenia z pracy, ponieważ spóźniłeś się nad tym, nad czym miałeś pracować. W tym przypadku jednak refaktoryzacja wyszła na jaw, gdy zbadano przyczynę alarmów. (A zarządzanie wciąż było wkurzone! :-)

Niektóre linki:

Nie, „błąd listy kontrolnej” prawie nie wykoleił pierwszego lądowania na Księżycu

OPOWIEŚCI Z KOMPUTERA PROWADNICY LUNAR MODULE

Jak je zbudowali: oprogramowanie Apollo 11

NASA Johnson Space Center Projekt historii mówionej Edytowana transkrypcja historii mówionej

Krótka historia programu Apollo NASA Fragment: Pięć minut do zejścia z wysokości i 1800 m nad powierzchnią Księżyca komputer nawigacyjny i nawigacyjny LM wywołał pierwszy z kilku nieoczekiwanych alarmów programu „1202” i „1201”. Inżynier komputerowy w Mission Control Center w Houston, Jack Garman, powiedział oficerowi poradnictwa Steve'owi Balesowi, że kontynuowanie zejścia jest bezpieczne. Alarmy te wskazywały na „przepełnienie kadry kierowniczej”, co oznacza, że ​​komputer nawigacyjny nie mógł wykonać wszystkich swoich zadań w czasie rzeczywistym i musiał odłożyć niektóre z nich.

Przywołując fragment „Wielkiego skoku” : Wiedzieliśmy, co to jest i że nie powinno się tak dziać. Ale zaprojektowaliśmy system, który ciężko próbował odzyskać od warunków przeciążenia. Pamiętam więc, jak usłyszałem [inżyniera komputerowego z NASA] Jacka Garmana krzyczącego: „Idź, idź!” I poszli dalej. Potem słuchaliśmy, jak Neil latał LEM i próbował znaleźć dobre miejsce do przyziemienia. Naszym nowym zmartwieniem był brak paliwa. Ale w końcu usłyszeliśmy zawiadomienie o kontakcie, a potem „Orzeł wylądował”.

Wywiad z Jackiem Garmanem

EDYCJA: Może to był dokument: Apollo 11: The Untold Story (2006)

Obsada: John R. Garman ...
sam - inżynier informatyk Apollo 11 (jako Jack Garman)

(Pośród innych).

Aktualizacja: Haker z Południowej Afryki właśnie uratował pierwszy komputer NASA w kosmosie

K.Nicholas
źródło
Wiedziałem, że ta historia brzmi znajomo! Sekcja „Apollo 11” zawiera więcej informacji na temat tej historii na stronie en.wikipedia.org/wiki/Margaret_Hamilton_(scientist)
hydo
31

Jeśli dobrze rozumiem, proces rozwoju polegał na wzajemnej ocenie i eksperymentowaniu.

Zespół składał się z ludzi takich jak „Math Doctors” - niezwykle oddanych, inteligentnych, pełnych pasji i zorientowanych na szczegóły ludzi, których życie było poświęcone ich pracy. Kiedy więc mówię o wzajemnej ocenie, mam na myśli wiele recenzji w ciągu wielu miesięcy (ponad roku).

Ci programiści „przeprowadzili symulacje w głowach”, „debugowali oprogramowanie na papierze” i pracowali w grupach z wieloma programistami przeglądającymi ten sam kod w kółko, dopóki nie przekonali się, że jest poprawny. Było wiele zespołów - każdy pracował nad częścią całości.

Mój profesor metod numerycznych z Ohio State University (Spring '96) napisał kod, który zdecydował, kiedy rozpocząć etap rakiety przypominającej. Opisał wydruk jako rozmiar książki telefonicznej (więc może 2,5 do 3,5 cali grubości papieru 8,5 x 11 cali - nie opisał rozmiaru czcionki) kodu Fortran.

Po przekonaniu wystrzelili bezzałogowy pocisk (rakiety technicznie nie mają żyroskopów) z radiem na pokładzie, które emitowało sygnał dźwiękowy w regularnych odstępach czasu. Słuchali sygnałów dźwiękowych do momentu, w którym spodziewali się, że radio uderzy w księżyc (uderzy w niego i sam się zniszczy) i przestanie emitować sygnał dźwiękowy. Wiedzieli, że jeśli spóźnią się, radio będzie dawać sygnał dźwiękowy długo po obliczonym czasie uderzenia. Uderzenie nastąpiło 15 sekund po obliczonym czasie.

Ta przypuszczalnie niepotwierdzona historia to moje wspomnienia z wizyty w gabinecie lekarskim. Był bardzo stary i to było dawno temu. To moje najlepsze wspomnienie.

Lyle S.
źródło
2
Opisał wydruk wielkości książki telefonicznej (więc może 2,5 do 3,5 cala papieru o wymiarach 8,5 x 11 cali. Zasadniczo kod wydrukowano w trybie poziomym z około 55 - 60 liniami na stronę. Ryza (100 arkuszy) papieru do drukowania ma około 1,75 cala grubości
Gilbert Le Blanc
@GilbertLeBlanc Rama ma zwykle 500 arkuszy. (czasami 480)
joshp
@joshp: Masz rację. 500 arkuszy papieru do drukowania ma około 1,75 cala grubości.
Gilbert Le Blanc
15

AGC jest kontrolowane za pomocą czasowników i rzeczowników

Oprogramowanie sterujące Apollo nie jest napisane w żadnej składni, którą użytkownicy rozpoznaliby dzisiaj. Astronauci wprowadzają polecenia numerycznie, przy czym każda dwucyfrowa liczba reprezentuje czasownik lub rzeczownik. Czasownik opisuje akcję, która ma zostać wykonana, a rzeczownik określa dane, na które ma wpływ akcja czasownika.

Astronauci nie znosili konfiguracji czasownika i rzeczownika

Ramón Alonso, jeden z oryginalnych twórców sprzętu AGC, powiedział, że interfejs został wymyślony, aby zaimponować odwiedzającym ich laboratorium, ale pozostał przy lotach, gdy nikt nie opracował lepszego interfejsu. Krytycy powiedzieli, że to nie było „naukowe”, a pierwsi astronauci - wszyscy elitarni piloci odrzutowi - woleli tarcze i przełączniki, podobne do panelu sterowania samolotem.

„AGC było bardzo powolne, ale bardzo niezawodne i bardzo małe jak na ten czas w historii komputerów cyfrowych. Było to pierwsze zastosowanie układów scalonych”.

Oprogramowanie w takiej postaci, w jakiej zostało zaprojektowane, zostało zbudowane od podstaw przez MIT.

Możesz pobrać i zainstalować program emulatora Apollo Guidance Computer na swoim komputerze osobistym, bez problemu. Oto jak to wygląda w Mac OS X.

wprowadź opis zdjęcia tutaj

Josip Ivic
źródło
8

Jak prawie każdy inny projekt oprogramowania, został on wykonany w agresywnym terminie i pod presją jakości. Na szczęście duże archiwum materiałów od kierownika projektu oprogramowania Howarda W. „Billa” Tindalla, Jr. jest dostępne tutaj .

Jeśli spróbujesz notatek, możesz bardzo dobrze zrozumieć normalny konflikt między czasem, funkcjami i defektami. Warto zauważyć, że prace rozwojowe przebiegały przez wiele lat, podobnie jak reszta projektu.

Projektowanie systemu rozpoczęło się w drugim kwartale 1961 r., A NASA zainstalowała wersję I bloku w statku kosmicznym 22 września 1965 r. Wydanie oryginalnego oprogramowania (o nazwie CORONA) miało miejsce w styczniu 1966 r., A pierwszy lot odbył się 25 sierpnia, 1966. Niecałe 3 lata później projektanci osiągnęli ostateczny cel programu ( http://history.nasa.gov/computers/Ch2-5.html )

Nie mogę znaleźć konkretnych odniesień do tego, jak powstało oprogramowanie, ale biorąc pod uwagę datę, mogę jedynie założyć, że wiele z nich zostało zrobionych na papierze i długopisie, z „symulacjami” wykonanymi ręcznie. Wygląda na to, że istniał system do ładowania programów do AGC z kartami dziurkowanymi, prawdopodobnie do „szybkich” testów na ziemi bez potrzeby tworzenia pamięci liny.

pjc50
źródło