Лунная миссия, спрятанная в двух папках
Вот поразительный факт: код, который доставил людей на Луну в 1969 году, всё ещё существует, будучи тщательно переписанным с двух бумажных папок, хранящихся в MIT Museum. Добровольцы кропотливо превратили эти исторические сканы в пригодную для использования цифровую кодовую базу, которая теперь доступна публике и готова к запуску. Это свидетельство важности сохранения истории и коллективных усилий.
Это не история об одиноком гении. Margaret Hamilton, тогдашний первопроходец в области компьютерных наук, возглавляла отдел программной инженерии в MIT Instrumentation Laboratory. Её команда из более чем 400 человек разработала критически важное программное обеспечение как для командного, так и для лунного модулей Apollo. Руководство Hamilton и масштаб проделанной работы подчеркивают коллективную гениальность, стоявшую за проектом Apollo.
Написанный на языке ассемблера для Apollo Guidance Computer, этот сохранившийся исходный код может быть скомпилирован так, чтобы идеально соответствовать оригинальному образу памяти. Энтузиасты могут даже запустить его через эмулятор Virtual AGC, чтобы увидеть те самые последовательности, которые выполняли астронавты Apollo 11. Это дает беспрецедентное понимание строгой и ограниченной среды программного обеспечения ранних космических полетов.
У компьютера было меньше памяти, чем в одном твите
Лунные миссии работали на оборудовании, которое было менее мощным, чем современный термостат. Apollo Guidance Computer (AGC), созданный в MIT Instrumentation Laboratory, работал на частоте всего 1,024 МГц и имел лишь 2048 слов стираемой памяти — примерно 3840 байт. Для сравнения, современный Raspberry Pi Pico обладает в 70 раз большим объемом оперативной памяти и тактовой частотой в 130 раз выше.
Ограничения определяли архитектуру AGC. Его 72 КБ памяти только для чтения основывались на core rope memory — чуде физического программирования. Провода, продетые через крошечные магнитные сердечники, кодировали программное обеспечение напрямую: провод через кольцо означал двоичную «1», вокруг него — «0». Это означало отсутствие быстрых программных исправлений; полетный код был буквально вплетен в оборудование и зафиксирован за месяцы до запуска.
Такие ограничения требовали блестящего проектирования. Инженеры создавали исключительно компактный код, тщательно проверяемый на совершенство. Планировщик задач AGC расставлял приоритеты, обрабатывая до восьми задач в 12-словных слотах. Даже внутренние комментарии в коде, как показывает изучение транскрибированного репозитория GitHub, иногда расходились с реализованной логикой, что является свидетельством быстрой и итеративной разработки в условиях экстремального давления.
В коде есть шутки. Но средства защиты — это серьезно.
Юмор, как оказалось, является универсальной константой, даже в коде, предназначенном для полета на Луну. Несмотря на огромное давление, инженеры в MIT Instrumentation Laboratory приправили ассемблерный код Apollo Guidance Computer восхитительными, очеловечивающими комментариями. «Please crank this silly thing around» («Пожалуйста, покрути эту глупую штуку») инструктирует астронавта переместить антенну посадочного радара, а «Off to see the wizard» («В путь к волшебнику») предшествует последовательности зажигания двигателя, игриво названной «Burn Baby Burn» («Гори, детка, гори»).
Астронавты взаимодействовали с этой сложной системой через DSKY (Display/Keyboard) — минималистичный интерфейс, состоящий из небольшой цифровой клавиатуры и дисплея. Команды были краткими, состоящими из числовых пар «глагол-существительное»: «глагол» для действия (например, отобразить) и «существительное» для объекта (например, часы). Эти отрепетированные инструкции, которые часто заучивались наизусть или сверялись по контрольным спискам, были единственным способом управления компьютером во время полета.
Тем не менее, за остроумием скрывалась железная стойкость. Executive scheduler (планировщик задач) Apollo Guidance Computer расставлял приоритеты, гарантируя, что критически важные функции навигации всегда выполнялись. Когда системы перегружались, как это случилось во время спуска Apollo 11 из-за неисправного радара сближения, менее важные задачи отбрасывались, что вызывало такие сигналы тревоги, как 1202.
Критически важную роль играли restart checkpoints (контрольные точки перезапуска), защищавшие жизненно важные процессы. Если компьютер перезагружался, он возобновлял работу с последней контрольной точки, даже перезапуская двигатель посадочной ступени. Такая надежная архитектура позволяла компьютеру справляться со сбоями, не прерывая миссию, что свидетельствует о дальновидности в условиях жестких ограничений. Для тех, кто хочет изучить это сочетание строгости и юмора, исходный код Apollo 11 Guidance Computer (AGC) доступен публично.
Нравится статья? Получайте такие каждое утро на почту.
одно письмо в день · отписка в два клика · без сторонних трекеров
Почему ошибка 1202 не сорвала посадку
Сигнал тревоги 1202, ставший печально известным после посадки Apollo 11, свидетельствовал об отчаянной борьбе за процессорное время. Во время спуска лунного модуля rendezvous radar (радар сближения) неожиданно потреблял 13-15% ресурсов компьютера, генерируя 12 800 импульсов в секунду. Эта активность в сочетании с уже загруженным на 90% процессором не позволяла критически важным навигационным задачам завершиться вовремя.
Executive (планировщик) Apollo Guidance Computer (AGC) мог управлять только восемью слотами задач, каждый из которых имел длину 12 слов. Когда навигационная задача не успевала завершиться, создавались новые копии, быстро заполнявшие эти слоты и вызывавшие сигнал 1202. AGC реагировал на это, отбрасывая незащищенные задачи и перезапускаясь, отдавая приоритет основным функциям спуска. Центру управления полетами, в частности Стиву Бейлсу, приходилось быстро оценивать, можно ли продолжать посадку — такое решение принималось пять раз за последние минуты.
Эта устойчивость не была случайностью. Команда Маргарет Гамильтон в MIT Instrumentation Laboratory спроектировала AGC с надежной restart protection (защитой от перезапуска), позволяющей возобновлять критические операции даже в середине спуска. Контрольные точки в коде гарантировали, что жизненно важные задачи, такие как управление двигателем посадочной ступени, могли быть немедленно активированы.
Сегодня гениальность AGC можно изучить на практике. Проект Virtual AGC точно эмулирует компьютер и его интерфейс DSKY (Display and Keyboard), позволяя любому запустить полетный код Apollo 11. Вы можете изучить последовательности действий, которые использовали астронавты, от предстартовых проверок до сигналов тревоги при посадке, в репозитории Apollo 11 AGC. Как отмечала Гамильтон, у ее команды «не было второго шанса», но их код дает нам бесконечные возможности для обучения.
Часто задаваемые вопросы
Можно ли сегодня запустить оригинальный исходный код Apollo 11?
Да. Транскрибированный исходный код можно скомпилировать и запустить в эмуляторе с открытым исходным кодом Virtual AGC.
Сколько памяти было у Apollo Guidance Computer?
Он имел 2048 слов стираемой памяти (примерно 3840 байт), плюс фиксированную память на основе прошитых сердечников (core rope memory).
Что стало причиной сигнала тревоги 1202 во время посадки Apollo 11?
Радарные импульсы потребляли процессорное время, перегружая ограниченные слоты задач планировщика. Компьютер отбрасывал менее важные задачи и перезапускал защищенные процессы.
Кто такая Маргарет Гамильтон?
Гамильтон была руководителем отдела разработки программного обеспечения для программы Apollo в MIT Instrumentation Laboratory и участвовала в создании ПО, которое управляло пилотируемыми миссиями.

