Процесс разработки кода для миссий Apollo 11?

57

У миссий Аполлона была технология, не более сложная, чем карманный калькулятор.

По ссылке здесь есть информация о Apollo Guidance Computer (AGC)

Бортовой компьютер Apollo Guidance Computer (AGC) был около 1 кубического фута с 2K 16-битной оперативной памяти и 36K жесткой памяти сердечника и веревки с медными проводами, пронизанными или не пропущенными через крошечные магнитные сердечники. 16-битные слова обычно были 14 битами данных (или двумя кодами операций), 1 знаковым битом и 1 битом четности. Время цикла составило 11,7 микросекунды. Программирование проводилось на ассемблере и на интерпретирующем языке, на обратном польском.

Итак, я наткнулся на некоторый исходный код, когда я исследовал то, что там было, и я заметил отличные комментарии (например, ВРЕМЕННЫЕ, Я НАДЕЖДА, НАДЕЖДА, НАДЕЖДА)

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

Реальные программы на космическом корабле хранились в памяти ядра веревки , древней технологии памяти, сделанной (буквально) плетением ткани / веревки, где биты были физическими кольцами из ферритового материала. «Ядро» памяти устойчиво к космическим лучам. Состояние основного бита не изменится при бомбардировке радиацией в космическом пространстве.

Программное обеспечение Virtual Apollo Guidance Computer (AGC) также есть на GITHUB!

Некоторая часть документации здесь.

Еще один пример исходного кода с отличными комментариями.

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

Мой вопрос здесь такой:

  • Как команды, написавшие такое большое количество кода, смогли сделать его функциональным, учитывая инструменты того времени?

Потому что, если вы скомпилируете так много кода, который использовался на Apollo 11 ... это заняло бы дни, даже недели. Я серьезно сомневаюсь, что программисты тогда оставили все на волю случая.

Иосип Ивич
источник
4
У меня было довольно существенное изменение, чтобы сделать это, я надеюсь, больше по теме. Я думаю, что это увлекательный вопрос, и я надеюсь, что люди смогут ответить эффективно!
enderland
3
Читайте Хакеры и Мистический Месяц Человека . Там довольно много материала - я не уверен, что он подойдет для ответа здесь.
2
Заголовки вопросов в стиле «тег - вопрос» не рекомендуется использовать в Stack Exchange. Пожалуйста, оставьте название как есть.
4
Не было никакого цикла компиляции / исправления, как предполагает ваш вопрос. Вы не создали канатную память, протестировали ее и затем переделали, если она не работала; Вы поняли это правильно с первого раза.
Роберт Харви
7
@RobertHarvey ты правильно понял HOPE HOPE HOPEс первого раза.

Ответы:

13

Был прекрасный документальный фильм, который я пытаюсь отследить, о том, что Джону Джеку Гарману пришлось «изобрести» «операционную систему мультипрограммирования с приоритетным планированием». Это, возможно, было связано с модулем посадочного модуля, хотя. История заключалась в том, что, когда вы садились на посадочный аппарат, вам лучше отдавать предпочтение руководству, потому что другие вещи, такие как температура в кабине в течение следующих 15 секунд, на самом деле не имели значения, если вы разбились и сгорели. При первом выстреле они перегружали компьютер, и возникали тревоги, потому что некоторые подпрограммы не выполнялись. Было загружено слишком много, но благодаря концепции приоритета, которую Гарман предвидел и встроил, потому что считал это хорошей идеей, процедуры с низким приоритетом не увязали с процедурой посадки с более высоким приоритетом.

Наблюдая за документальным фильмом в то время, я был поражен, как это было похоже на серьезный рефакторинг кода, не сказав руководству и почти уволившись, потому что вы опоздали над тем, над чем вы должны были работать. В этом случае, однако, рефакторинг обнаружился, когда причина тревог была исследована. (И менеджмент все еще злился! :-)

Некоторые ссылки:

Нет, «ошибка в контрольном списке» почти не сорвала первую посадку на Луну

СКАЗКИ ИЗ КОМПЬЮТЕРА ЛУННОГО МОДУЛЯ

Как они это построили: программное обеспечение Apollo 11

Космический центр НАСА им. Джонсона Проект устной истории

Краткая история выдержки из программы НАСА «Аполлон» . Через пять минут после спуска и на высоте 1800 м над поверхностью Луны компьютер навигации и навигации LM выдал первый из нескольких неожиданных сигналов тревоги «1202» и «1201». Компьютерный инженер в Центре управления полетами в Хьюстоне, Джек Гарман, сказал руководителю Стиву Бейлсу, что продолжать спуск безопасно. Эти сигналы тревоги были признаками «переполнения исполнительной власти», что означало, что компьютер управления не мог выполнять все свои задачи в режиме реального времени и должен был отложить некоторые из них.

Вспоминая отрывок из «Гигантского скачка» : мы знали, что это такое и что этого не должно происходить. Но мы разработали систему, которая изо всех сил пыталась оправиться от любых условий перегрузки. Итак, я помню, как слышал, как [инженер по вычислительной технике НАСА] Джек Гарман кричит: «Иди, иди!» И они пошли дальше. Затем мы слушали, как Нейл летал на ЛЭМ и пытался найти хорошее место для приземления. Наше новое беспокойство было нехватка топлива. Но, наконец, мы услышали уведомление о контакте, а затем: «Орел приземлился».

Джек Гарман Интервью

РЕДАКТИРОВАТЬ: Может быть, это был документальный фильм: Аполлон 11: Нерассказанная история (2006)

В ролях: Джон Р. Гарман ...
Сам - Аполлон 11 Инженер-компьютерщик (как Джек Гарман)

(Среди прочих).

Обновление: хакер из Южной Африки только что спас первый компьютер НАСА в космосе

K.Nicholas
источник
Я знал, что эта история звучит знакомо! В разделе «Аполлон-11» есть больше об этой истории в en.wikipedia.org/wiki/Margaret_Hamilton_(scientist)
гидро
31

Если я правильно понимаю, процесс разработки был экспертной оценки и экспериментов.

Команда состояла из таких людей, как «Врачи математики» - преданных своему делу, умных, страстных, ориентированных на детали людей, чья жизнь была посвящена их работе. Поэтому, когда я говорю о рецензировании, я имею в виду множество рецензий в течение многих месяцев (более года).

Эти разработчики «запускали симуляции в своих головах», «отлаживали программное обеспечение на бумаге» и работали в группах, где многие разработчики снова и снова просматривали один и тот же код, пока не убедились в его правильности. Было несколько команд, каждая из которых работала над частью целого.

Мой профессор по численным методам в Университете штата Огайо (весна 96 года) написал код, который решил, когда начинать запуск ракеты-носителя. Он описал размер распечатки, равный размеру телефонной книги (возможно, толщиной от 2,5 до 3,5 дюймов бумаги размером 8,5 х 11 дюймов - он не описал размер шрифта) кода на языке Фортран.

Убедившись в этом, они выпустили беспилотную ракету (ракеты технически не имеют гироскопов) с радио на борту, которое издавало звуковой сигнал через регулярные промежутки времени. Они слушали звуковые сигналы до того момента, когда ожидали, что радио ударит по луне (врежется в нее и уничтожит себя) и прекратит пискать. Они знали, что, если они пропустят, радио продолжит издавать звуковой сигнал далеко после расчетного времени удара. Удар произошел через 15 секунд после расчетного времени.

Эта удивительно анекдотичная история - мои воспоминания о встрече с доктором в офисе. Он был очень стар, и это было очень давно. Это мое лучшее воспоминание.

Лайл С.
источник
2
Он описал размер распечатки, равный размеру телефонной книги (например, толщина бумаги от 2,5 до 11 дюймов составляет от 2,5 до 3,5 дюймов. Как правило, код печатался в альбомном режиме с примерно 55 - 60 строками на страницу. Пакет (100 листов). бумаги для распечатки толщиной около 1,75 дюйма
Гилберт Ле Блан,
@GilbertLeBlanc Размер пакета составляет 500 листов. (иногда 480)
Joshp
@joshp: ты прав. 500 листов распечатанной бумаги имеют толщину около 1,75 дюйма.
Гилберт Ле Блан
15

AGC контролируется глаголами и существительными

Командное программное обеспечение Apollo не написано ни в каком синтаксисе, который распознали бы пользователи сегодня. Астронавты вводят команды численно, причем каждое двузначное число представляет глагол или существительное. Глагол описывает действие, которое должно быть выполнено, а существительное указывает данные, на которые должно воздействовать действие глагола.

Астронавты ненавидели глагол и существительное

Рамон Алонсо, один из разработчиков аппаратного обеспечения AGC, сказал, что интерфейс был изобретен для того, чтобы произвести впечатление на посетителей их лаборатории, но он остановился на полете, когда никто не разработал лучший интерфейс. Критики сказали, что это не «наука», и первые астронавты - все пилоты элитных самолетов - предпочли циферблаты и переключатели, похожие на панель управления самолетом.

«AGC был очень медленным, но очень надежным и очень маленьким для того времени в истории цифровых компьютеров. Это было самое раннее использование интегральных микросхем».

Программное обеспечение в том виде, в котором оно было разработано, было разработано MIT с нуля.

Вы можете скачать и установить программу эмулятора Apollo Guidance Computer на свой персональный компьютер, без проблем. Вот как это выглядит в Mac OS X.

введите описание изображения здесь

Иосип Ивич
источник
8

Как и почти любой другой программный проект, он был реализован в условиях агрессивного крайнего срока и давления качества. К счастью, большой архив материалов от менеджера программных проектов Говарда У. «Билла» Тиндалла-младшего доступен здесь .

Если вы сэмплируете заметки, вы получите очень хорошее представление о нормальном конфликте между временем, функциями и дефектами. Стоит отметить, что развитие продолжалось в течение ряда лет, как и остальная часть проекта.

Проектирование системы началось во втором квартале 1961 года, и НАСА установило версию Block I на космическом корабле 22 сентября 1965 года. Выпуск оригинального программного обеспечения (названного CORONA) состоялся в январе 1966 года, а первый полет состоялся 25 августа. 1966. Менее чем через 3 года дизайнеры достигли конечной цели программы ( http://history.nasa.gov/computers/Ch2-5.html ).

Я не могу найти конкретные ссылки на то, как было создано программное обеспечение, но, учитывая дату, я могу только предположить, что большая часть этого была сделана ручкой и бумагой, а «симуляции» были сделаны вручную. Кажется, существовала система для загрузки программ в AGC с перфокартами, предположительно для «быстрого» тестирования на месте без необходимости изготовления памяти на веревке.

pjc50
источник