Программистка Маргарет Гамильтон сыграла важнейшую роль в высадке астронавтов NASA на Луну. Она возглавляла команду, отвечавшую за разработку бортового программного обеспечения. Благодаря ее коду компьютер лунного модуля «Аполлона-11» справился с нештатной ситуацией, и его экипаж впервые в истории человечества шагнул на поверхность Луны.
Ранняя карьера
Маргарет Гамильтон родилась 17 августа 1936 года. После окончания средней школы Хэнкок в 1954 году, она изучала математику в Мичиганском университете. В 1958 году она получила степень бакалавра по математике и философии в колледже Эрлхэм. По окончании учебы некоторое время Маргарет преподавала математику и французский язык в средней школе, пока ее муж работал над дипломом, а затем отправилась в Бостон, чтобы закончить аспирантуру в области абстрактной математики в университете Брандейса и стать профессором. Но летом 1959 года ей подвернулась возможность поработать с Эдвардом Лоренцом известным математиком и метеорологом, автором теории хаоса, в отделе метеорологии в MIT. Маргарет Гамильтон разработала программное обеспечение для прогнозирования погоды для компьютеров LGP-30 и PDP-1 в проекте MAC Марвина Мински.
Читать по теме: Ретроспектива развития вычислительной техники
С 1961 по 1963 год Гамильтон работала в проекте SAGE, где занималась разработкой прототипа системы AN/FSQ-7 — программного обеспечения для поисков самолетов противника.
«Когда вы приходите в эту организацию, то обычно вам, как новичку, дают эту программу, которую никто и никогда не мог ни понять, ни запустить; и со мной было также. Программирование этого оказалось сложной задачей, а тот, кто писал код программы, получал кайф, оставляя комментарии на греческом и латыни. Я стала первой, кто заставил её работать», — рассказывала Гамильтон.
Именно работа в этом проекте помогла Маргарет Гамильтон стать кандидатом на должность ведущего разработчика программного обеспечения для полетов «Аполлона».
Работа над программами для «Аполлона»
Вскоре Гамильтон присоединилась к Лаборатории Дрейпера в Массачусетском технологическом институте (MIT) и, в конце концов, возглавила команду, которой поручено разработать программное обеспечение для «Аполлона» и Skylab. Исследователи должны были заставить работать алгоритмы для бортовых компьютеров командного и лунного модулей «Аполлона» и спроектировать системное программное обеспечение.
Читать по теме: Архитектура программного обеспечения
Это была очень трудная задача: программисты работали сутками. В то время не было курсов по программированию, все приходилось познавать опытным путем. Часто по вечерам и в выходные дни Маргарет брала на работу свою дочь Лорен, которая наблюдала за тем, как мама использует блок дисплея и клавиатуры симулятора (DSKY) для тестирования программного обеспечения. Однажды девочка решила поиграть в астронавта и случайно сломала симулятор. Маргарет заметила, что ребенок выбрал предзапускную программу P01 во время «полета». Это испугало ее: ведь то же самое мог случайно сделать астронавт во время реальной миссии.
Гамильтон стала убеждать сотрудников MIT в необходимости изменения кода, чтобы программа могла проверять ошибки пользователей. Сначала многие были уверены в хорошей подготовке астронавтов и не видели смысла в изменении программы. Но астронавты уже совершали подобные ошибки. Во время полета «Аполлона-8» астронавт Джим Ловелл случайно выбрал P01 и уничтожил все навигационные данные. К счастью, их удалось восстановить лишь спустя девять часов, и астронавты благополучно вернулись домой. Этот неприятный опыт убедил руководство NASA прислушаться к Гамильтон. Код был переписан, а сама Гамильтон даже добавила программную заметку с надписью «Не выбирайте P01 во время полета».
Решающий момент
20 июля 1969 года, когда лунный модуль Eagle («Орел») стремительно приближался к поверхности Луны, астронавты «Аполлона-11» Базз Олдрин и Нил Армстронг не отрывали глаз от бортовых компьютеров. Им оставалось преодолеть всего 9 км до места посадки. На Земле диспетчеры слушали сообщения астронавтов и пристально следили за числами, заполняющими экраны, в поисках любой маленькой аномалии, которая могла бы вызвать прерывание посадки. Внезапно раздался голос Армстронга: «Это 1202… Что это? Дайте расшифровку программного сигнала 1202…»
Чтобы понять, что означало сообщение об ошибке 1202, нужно знать, как работали бортовые компьютеры того времени. Вся миссия «Аполлон-11» помещалась на нескольких магнитных сердечниках, которые с середины 1950-х и до середины 1970-х годов составляли основу компьютерной памяти. Чтобы успешно посадить корабль на поверхность, бортовой компьютер Apollo Guidance Computer должен был ежесекундно обрабатывать огромное количество данных. Он должен был знать, где находится лунный модуль, куда он движется, на какой высоте, с какой скоростью и какова производительность двигателя, и поддерживать правильную ориентацию корабля на основе этих данных. Также было необходимо постоянно корректировать траекторию прерывания, по которой экипаж мог вернуться на орбиту в случае нештатной ситуации.
Читать по теме: Геолог Александр Базилевский о советских луноходах, научных результатах программы «Аполлон» и возвращении на Луну
Чтобы упростить задачу астронавтам и компьютеру, каждое событие миссии (посадка, стыковка и т.д) было разбито на части. Эти управляемые модули можно было запускать индивидуально, делая всю систему более надежной. Программы не могли запускаться одновременно, так как Apollo Guidance Computer был однопроцессорным: они были запланированы и выполнялись на основе приоритета. Если нужно было запустить какой-то жизненно важный процесс, компьютер мог в любой момент прервать менее важную работающую программу.
Команда MIT разработала компьютер таким образом, чтобы его память никогда не заполнялась. В любой момент миссии должно было оставаться свободное место для следующей программы, также можно было прервать малозначимую программу, если необходимо немедленно запустить что-то очень важное или быстро запланировать другую. Но когда лунный модуль «Аполлона-11» спускался к поверхности Луны, произошла непредвиденная ситуация: память компьютера переполнилась. На дисплеях загорелись аварийные сигналы ошибок 1201 и 1202, предупреждающих о том, что компьютер не может выполнить все команды. Впоследствии оказалось, что это произошло из-за неправильного положения переключателя радара, который отслеживал положение командного модуля на орбите, чтобы в случае аварийной ситуации отправить лунный модуль назад. В фоновом режиме он отправлял на компьютер блоки данных, которые забивали память.
Экипаж «Аполлона-11», который не сталкивался с подобной ситуацией на тренировках, и Центр управления полетами встали перед выбором: продолжить или прервать посадку. Но благодаря коду Маргарет Гамильтон вычислительная система лунного модуля просто сбрасывала задания с низким приоритетом и выполняла важные. С Земли было отправлено решение о приземлении, и через несколько минут Нил Армстронг сказал: «Хьюстон, База Спокойствия здесь. “Орел” приземлился».
Код для Apollo Guidance Computer (AGC), который написала Маргарет Гамильтон и ее команда, находится в открытом доступе. На его основе было создано программное обеспечение для первой космической станции США Skylab, шаттлов, которые выполнили более 100 успешных миссий на околоземной орбите, и первых цифровых электродистанционных систем управления в летательных аппаратах. Сама Маргарет Гамильтон была удостоена многочисленных наград, в том числе премии имени Ады Лавлейс.