Компьютер управления Аполлоном ( AGC ) представлял собой цифровой компьютер , созданный для программы Аполлон , который был установлен на борту каждого командного модуля Аполлона (CM) и лунного модуля Аполлона (LM). AGC предоставил вычислительные и электронные интерфейсы для наведения, навигации и управления космическим кораблем. [3] AGC был первым компьютером на основе кремниевых интегральных схем . [ нужна цитация ] Производительность компьютера была сопоставима с первым поколением домашних компьютеров конца 1970-х годов, таких как Apple II , TRS-80 и Commodore PET . [4]
АРУ имеет длину слова 16 бит , 15 бит данных и один бит четности . Большая часть программного обеспечения AGC хранится в специальной постоянной памяти, известной как сердечниковая память , созданной путем вплетения проводов через магнитные сердечники и вокруг них , хотя доступен небольшой объем основной памяти для чтения/записи.
Астронавты общались с AGC, используя цифровой дисплей и клавиатуру под названием DSKY (что означает «дисплей и клавиатура», произносится как «DIS-kee»). AGC и его пользовательский интерфейс DSKY были разработаны в начале 1960-х годов для программы «Аполлон» Приборной лабораторией Массачусетского технологического института и впервые поднялись в воздух в 1966 году. [5]
Астронавты управляли проектом «Близнецы» вручную с помощью джойстиков управления , но большую часть проекта «Аполлон» управляли компьютеры, за исключением непродолжительного времени приземления на Луну. [6] Каждый лунный полет нес два AGC, по одному в командном модуле и лунном модуле «Аполлон» , за исключением «Аполлона-7» , который был миссией на околоземной орбите, и «Аполлона-8» , которому не требовался лунный модуль для своей миссии на лунной орбите. АРУ в командном модуле был центром его системы наведения, навигации и управления (GNC). AGC в лунном модуле управлял своей системой Apollo PGNCS (первичная система наведения, навигации и управления), аббревиатура которой произносится как pings .
Каждая лунная миссия имела два дополнительных компьютера:
AGC был разработан в Лаборатории приборостроения Массачусетского технологического института под руководством Чарльза Старка Дрейпера , а проектирование аппаратного обеспечения возглавлял Элдон К. Холл . [2] Ранние архитектурные работы исходили от Дж. Х. Лейнинга-младшего , Альберта Хопкинса , Ричарда Баттина , Рамона Алонсо, [7] [8] и Хью Блэр-Смита. [9] Летное оборудование было изготовлено компанией Raytheon , чей Херб Талер [10] также входил в архитектурную команду.
По словам Куринца и др., чипы были приварены к платам, а не припаяны, как можно было бы ожидать. [11] На чертежах логического модуля компьютера Apollo Guidance указана контактная сварка. [12] [13]
После использования микросхем интегральных схем (IC) в Межпланетной платформе мониторинга (IMP) в 1963 году технология IC была позже принята для AGC. [14] Бортовой компьютер «Аполлона» был первым компьютером, в котором использовались кремниевые микросхемы. [15]
В то время как версия Block I использовала 4100 микросхем, каждая из которых содержала один вентиль NOR с тремя входами , более поздняя версия Block II (используемая в пилотируемых полетах) использовала около 2800 микросхем, в основном двойные вентили NOR с тремя входами и меньшее количество расширителей и датчиков. усилители. [16] : 27, 266 Микросхемы от Fairchild Semiconductor были реализованы с использованием резисторно-транзисторной логики (RTL) в плоском корпусе . Они были соединены с помощью проволочной обмотки , а затем проводка была заделана в литой эпоксидный пластик. [16] : 129
Использование одного типа микросхемы (двойного NOR3) во всем AGC позволило избежать проблем, которые преследовали другую раннюю конструкцию компьютера IC, компьютер управления Minuteman II , в котором использовалась смесь диодно-транзисторной логики и диодных логических вентилей. [ нужна цитация ] Вентиляторы ИЛИ-НЕ — это универсальные логические вентили , из которых можно сделать любые другие вентили, хотя и за счет использования большего количества вентилей. [17]
Компьютер имел 2048 слов стираемой памяти на магнитных сердечниках и 36864 слова постоянной памяти, доступной только для чтения . [16] : 27, 90–93 Оба имели время цикла 11,72 микросекунды. [16] : 27 Длина слова памяти составляла 16 бит: 15 бит данных и один бит нечетной четности . Внутренний 16-битный формат слова ЦП состоял из 14 бит данных, одного бита переполнения и одного знакового бита ( представление дополнения до единиц ). [16] : 35–37
Пользовательским интерфейсом AGC был DSKY , обозначающий дисплей и клавиатуру и обычно произносимый как «DIS-kee». Он оснащен множеством световых индикаторов, цифровым дисплеем и клавиатурой в стиле калькулятора . Команды вводились численно, в виде двузначных чисел: Глагол и Существительное . Глагол описывал тип действия, которое должно быть выполнено, а Существительное указывало, на какие данные повлияло действие, указанное командой Глагол.
Каждая цифра отображалась на зеленом (530 нм [18] ) высоковольтном электролюминесцентном семисегментном дисплее ; они приводились в действие электромеханическими реле , ограничивая скорость обновления. Три пятизначных числа со знаком также могли отображаться в восьмеричном или десятичном формате и обычно использовались для отображения векторов , таких как положение космического корабля или требуемое изменение скорости ( дельта-V ). Хотя данные хранились внутри системы в метрических единицах измерения , они отображались как общепринятые единицы измерения США . Этот интерфейс в стиле калькулятора был первым в своем роде.
Командный модуль имеет два DSKY, подключенных к его АРУ: один расположен на главной приборной панели, а второй — в нижнем аппаратном отсеке рядом с секстантом, используемым для центровки платформы инерциального наведения . Лунный модуль имел единственный DSKY для АРУ. Указатель ориентации пилота (FDAI), управляемый AGC, располагался над DSKY на пульте командира и на LM.
Опорный сигнал синхронизации АРУ исходил от кварцевого генератора с частотой 2,048 МГц . Тактовый сигнал был разделен на два, чтобы получить четырехфазный тактовый сигнал с частотой 1,024 МГц , который АРУ использовал для выполнения внутренних операций. Тактовый сигнал 1,024 МГц также был разделен на два, чтобы получить сигнал 512 кГц, называемый основной частотой ; этот сигнал использовался для синхронизации внешних систем космического корабля «Аполлон».
Основная частота была дополнительно разделена через преобразователь сначала на пять с использованием кольцевого счетчика для получения сигнала частотой 102,4 кГц. Затем он был разделен на два — 17 последовательных ступеней, называемых F1 (51,2 кГц) — F17 (0,78125 Гц). Стадия F10 (100 Гц) подавалась обратно в АРУ для увеличения часов реального времени и других непроизвольных счетчиков с помощью Pinc (обсуждается ниже). Ступень F17 использовалась для периодического запуска АРУ, когда она работала в режиме ожидания .
У АРУ было четыре 16-битных регистра для общего вычислительного использования, называемых центральными регистрами :
DV
инструкции и обратный адрес после TC
инструкций.MP
инструкций.В основной памяти также было четыре ячейки по адресам 20–23, получившие название « ячейки редактирования», потому что все, что там хранилось, появлялось со смещением или поворотом на одну битовую позицию, за исключением одной, которая сдвигала вправо семь битовых позиций, чтобы извлечь одну из семи битовых позиций. бит-интерпретатор op. коды, упакованные по два в слово. Это было обычным для AGC Block I и Block II.
АРУ имел дополнительные регистры, которые использовались внутри в процессе работы:
Формат инструкции использовал 3 бита для кода операции и 12 бит для адреса. Блок у меня имел 11 инструкций: TC
, CCS
, INDEX
, XCH
, CS
, TS
, AD
, и MASK
(основной), и SU
, MP
, и DV
(дополнительный). Первые восемь, называемые базовыми инструкциями , имели прямой доступ к 3-битной операции. код. Последние три были обозначены как инструкции экстракода, поскольку доступ к ним осуществлялся путем выполнения TC
инструкций специального типа (называемых EXTEND
) непосредственно перед инструкцией.
Инструкции блока I AGC состояли из следующего:
TC
(управление трансфером)TC
инструкцию можно было использовать для вызовов подпрограмм.CCS
(посчитать, сравнить и пропустить)CCS
является четырехсторонний пропуск, в зависимости от данных в регистре A перед DABS. Если регистр A больше 0, CCS
происходит переход к первой инструкции сразу после CCS
. Если в регистре A содержится плюс ноль, CCS
происходит переход ко второй инструкции после CCS
. Меньше нуля приводит к переходу к третьей инструкции после CCS
, а минус ноль — к четвертой инструкции после CCS
. Основная цель подсчета заключалась в том, чтобы позволить обычному циклу, управляемому положительным счетчиком, заканчиваться на а CCS
и TC
до начала цикла, что эквивалентно IBM 360BCT
. Функция абсолютного значения была сочтена достаточно важной, чтобы быть встроенной в эту инструкцию; при использовании только для этой цели последовательность после символа CCS
была TC
*+2, TC
*+2, AD
ONE. Любопытным побочным эффектом было создание и использование CCS
-дыр, когда было известно, что проверяемое значение никогда не бывает положительным, что происходило чаще, чем можно было предположить. В результате целых два слова оставались незанятыми, и специальный комитет отвечал за присвоение этим дыркам констант данных.INDEX
INDEX
может использоваться для добавления или вычитания значения индекса к базовому адресу , указанному в операнде следующей инструкции INDEX
. Этот метод используется для реализации массивов и поиска по таблицам; поскольку добавление было сделано для обоих целых слов, оно также использовалось для изменения оп. код в следующей (дополнительной) инструкции, а в редких случаях обе функции одновременно.RESUME
INDEX
( INDEX
25). Это инструкция, используемая для возврата из прерывания. Это приводит к возобновлению выполнения с прерванного места.XCH
(обмен)TS
.CS
(очистить и вычесть)TS
(передача на хранение)TS
также обнаруживает и исправляет переполнение таким образом, чтобы распространять перенос для сложения/вычитания с различной точностью. Если результат не имеет переполнения (два крайних левых бита A одинаковы), ничего особенного не происходит; если происходит переполнение (эти два бита различаются), самый левый из них передается в память как знаковый бит, регистр A изменяется на +1 или -1 соответственно, и управление переходит ко второй инструкции, следующей за TS
. Всякий раз, когда переполнение является возможным, но ненормальным событием, за ним TS
следует TC
логика отсутствия переполнения; когда это является нормальной возможностью (как при сложении/вычитании с множественной точностью), TS
за ним следует CAF
НОЛЬ ( CAF
= XCH
в фиксированную память), чтобы завершить формирование переноса (+1, 0 или -1) в следующую более высокую точное слово. Углы сохранялись с одинарной точностью , расстояния и скорости — с двойной точностью , а прошедшее время — с тройной точностью.AD
(добавлять)AD
. Тот факт, что переполнение является состоянием, а не событием, допускает ограниченную степень переполнения при добавлении более двух чисел, пока ни одна из промежуточных сумм не превышает двойную емкость слова.MASK
MP
(умножить)DV
(разделять)SU
(вычесть)Инструкции были реализованы в группах по 12 шагов, называемых тактирующими импульсами . Тактирующие импульсы получили названия от TP1 до TP12. Каждый набор из 12 тактирующих импульсов назывался подпоследовательностью команд . Простые инструкции, такие как TC, выполняются за одну подпоследовательность из 12 импульсов. Более сложные инструкции требовали нескольких подпоследовательностей. Инструкция умножения ( MP
) использовала 8 подпоследовательностей: начальную подпоследовательность MP0
, за которой следовала MP1
подпоследовательность, которая повторялась 6 раз, а затем завершалась подпоследовательностью MP3
. В Блоке II это число было сокращено до 3 подпоследовательностей.
Каждый тактирующий импульс в подпоследовательности может вызвать до 5 управляющих импульсов . Управляющие импульсы представляли собой сигналы, выполнявшие фактическую работу инструкции, например, чтение содержимого регистра на шину или запись данных с шины в регистр.
Блок I памяти АРУ был организован в банки по 1 килослову. Самый нижний банк (банк 0) представлял собой стираемую память (ОЗУ). Все банки выше банка 0 представляли собой постоянную память (ПЗУ). Каждая инструкция АРУ имела 12-битное адресное поле. Младшие биты (1–10) адресовали память внутри каждого банка. Биты 11 и 12 выбирали банк: 00 выбирали стираемый банк памяти; 01 выбрал самый низкий банк (банк 1) постоянной памяти; 10 выбрал следующий (банк 2); и 11 выбирали регистр банка , который можно было использовать для выбора любого банка выше 2. Банки 1 и 2 назывались фиксированной фиксированной памятью, поскольку они были всегда доступны, независимо от содержимого регистра банка. Банки 3 и выше назывались фиксированно-переключаемыми, поскольку выбранный банк определялся реестром банков.
Первоначально АРУ Блока I имел 12 килослов постоянной памяти, но позже этот объем был увеличен до 24 килослов. Блок II имел 36 килослов постоянной памяти и 2 килослов стираемой памяти.
АРУ передавал данные в память и из памяти через регистр G в процессе, называемом циклом памяти . Цикл памяти занял 12 тактирующих импульсов (11,72 мкс). Цикл начался с тактового импульса 1 (TP1), когда АРУ загрузил адрес памяти, который нужно выбрать, в регистр S. Аппаратное обеспечение памяти извлекло слово данных из памяти по адресу, указанному в регистре S. Слова из стираемой памяти помещались в регистр G с помощью тактового импульса 6 (TP6); слова из фиксированной памяти были доступны с помощью тактового импульса 7. Полученное слово памяти затем было доступно в регистре G для доступа к АРУ во время тактовых импульсов с 7 по 10. После тактирующего импульса 10 данные в регистре G были записаны обратно в память.
Цикл памяти АРУ происходил постоянно во время работы АРУ. Инструкции, которым требовались данные памяти, должны были получить к ней доступ во время тактовых импульсов 7–10. Если АРУ изменяло слово памяти в регистре G, измененное слово записывалось обратно в память после тактового импульса 10. Таким образом, слова данных непрерывно циклически перемещались из памяти в регистр G, а затем обратно в память.
Младшие 15 бит каждого слова памяти содержат инструкции или данные АРУ, причем каждое слово защищено 16-м битом нечетной четности. Этот бит был установлен в 1 или 0 схемой генератора четности, поэтому подсчет единиц в каждом слове памяти всегда давал нечетное число. Схема проверки четности проверяла бит четности во время каждого цикла памяти; если бит не соответствовал ожидаемому значению, предполагалось, что слово памяти повреждено, и на панели загорался индикатор четности .
У АРУ было пять векторных прерываний :
АРУ реагировал на каждое прерывание, временно приостанавливая текущую программу, выполняя короткую процедуру обслуживания прерывания, а затем возобновляя прерванную программу.
У AGC также было 20 принудительных контрударов . Это были ячейки памяти, которые функционировали как реверсивные счетчики или сдвиговые регистры. Счетчики будут увеличиваться, уменьшаться или сдвигаться в ответ на внутренние входные данные. Увеличение ( Pinc ), уменьшение ( Minc ) или сдвиг ( Shinc ) обрабатывалось одной подпоследовательностью микроинструкций, вставленных между любыми двумя обычными инструкциями.
Прерывания могли быть вызваны при переполнении счетчиков. Прерывания T3rupt и Dsrupt создавались, когда их счетчики, управляемые аппаратной тактовой частотой 100 Гц, переполнялись после выполнения множества подпоследовательностей Pinc. Прерывание Uprupt было вызвано после того, как его счетчик, выполняющий подпоследовательность Shinc, переместил 16 бит данных восходящей линии связи в AGC.
У АРУ был режим энергосбережения, управляемый переключателем режима ожидания . В этом режиме отключалось питание АРУ, за исключением тактовой частоты 2,048 МГц и скалера. Сигнал F17 от скалера включал питание АРУ и снова включал АРУ с интервалом 1,28 секунды. В этом режиме АРУ выполняла основные функции, проверяла переключатель разрешения режима ожидания и, если он все еще был включен, отключала питание и снова переходила в спящий режим до следующего сигнала F17.
В режиме ожидания АРУ большую часть времени спала; поэтому он не был активен для выполнения инструкции Pinc, необходимой для обновления часов реального времени АРУ с интервалом 10 мс. Чтобы компенсировать это, одной из функций, выполняемых АРУ каждый раз, когда он просыпался в режиме ожидания, было обновление часов реального времени на 1,28 секунды.
Режим ожидания был разработан для снижения мощности на 5–10 Вт (с 70 Вт) во время полета на полпути, когда АРУ не требовалось. Однако на практике AGC оставался включенным на всех этапах миссии и эта функция никогда не использовалась.
АРУ имел 16-битную шину чтения и 16-битную шину записи. Данные из центральных регистров (A, Q, Z или LP) или других внутренних регистров могут передаваться на шину чтения с помощью управляющего сигнала. Шина чтения соединена с шиной записи через неинвертирующий буфер, поэтому любые данные, появляющиеся на шине чтения, также появляются на шине записи. Другие управляющие сигналы могут копировать данные шины записи обратно в регистры.
Передача данных работала следующим образом: для перемещения адреса следующей инструкции из регистра B в регистр S выдавался управляющий сигнал RB (чтение B); это привело к перемещению адреса из регистра B на шину чтения, а затем на шину записи. Управляющий сигнал WS (запись S) переместил адрес с шины записи в регистр S.
На шину чтения можно одновременно считывать несколько регистров. Когда это произошло, данные из каждого регистра были включены в шину методом ИЛИ . Эта функция «включающее ИЛИ» использовалась для реализации инструкции «Маска», которая представляла собой логическую операцию «И» . Поскольку AGC не имел встроенной способности выполнять логическое И , но мог выполнять логическое ИЛИ через шину и мог дополнять (инвертировать) данные через регистр C, теорема Де Моргана использовалась для реализации эквивалента логического И. Это было достигнуто путем инвертирования обоих операндов, выполнения логического ИЛИ через шину и последующего инвертирования результата.
Программное обеспечение AGC было написано на языке ассемблера AGC и хранилось в памяти . Основная часть программного обеспечения находилась в постоянной памяти, поэтому ее нельзя было изменить в процессе работы [20] , но некоторые ключевые части программного обеспечения хранились в стандартной памяти на магнитных сердечниках для чтения и записи и могли быть перезаписаны астронавтами с помощью интерфейс DSKY, как это было сделано на Apollo 14 .
Простая операционная система реального времени , разработанная Дж. Холкомбом Лейнингом [21], состоящая из «Exec», планирования пакетных заданий с использованием совместной многозадачности , [22] и упреждающего планировщика, управляемого прерываниями , называемого «Список ожидания». ', который планировал "задачи", управляемые таймером, управлял компьютером. Задачи представляли собой короткие потоки выполнения, которые могли перепланировать себя для повторного выполнения в списке ожидания или могли запускать более длительную операцию, запуская «задание» с помощью Exec. Расчеты проводились с использованием метрической системы , но показания дисплея были в единицах футов, футов в секунду и морских милях — единицах, к которым привыкли астронавты «Аполлона». [23]
У AGC был сложный программный интерпретатор, разработанный Лабораторией приборов Массачусетского технологического института , который реализовывал виртуальную машину с более сложными и функциональными псевдоинструкциями, чем родной AGC. Эти инструкции упростили навигационные программы. Интерпретируемый код, который включал в себя тригонометрическую , скалярную и векторную арифметику двойной точности (16 и 24 бита), даже MXV
инструкцию (матрица × вектор), можно было смешивать с собственным кодом АРУ. Хотя время выполнения псевдоинструкций было увеличено (из-за необходимости интерпретировать эти инструкции во время выполнения), интерпретатор предоставил гораздо больше инструкций, чем изначально поддерживал AGC, а требования к памяти были намного ниже, чем в случае добавления этих инструкций в Родной язык AGC, для которого потребовалась бы дополнительная память, встроенная в компьютер (в 1960-х годах память была очень дорогой). Для выполнения средней псевдоинструкции требовалось около 24 мс. Ассемблер, названный YUL в честь раннего прототипа рождественского компьютера , [24] обеспечивал правильные переходы между собственным и интерпретируемым кодом.
Набор подпрограмм пользовательского интерфейса, управляемых прерываниями, под названием «Пинбол», предоставлял услуги клавиатуры и дисплея для заданий и задач, выполняемых на AGC. Был предоставлен набор доступных пользователю процедур, позволяющих астронавтам отображать содержимое различных ячеек памяти в восьмеричном или десятичном формате группами по 1, 2 или 3 регистра одновременно. Были предусмотрены процедуры «мониторинга», позволяющие оператору инициировать задачу по периодическому повторному отображению содержимого определенных ячеек памяти. Рабочие места могут быть начаты.
Принципы проектирования, разработанные для AGC Лабораторией приборостроения Массачусетского технологического института под руководством в конце 1960-х годов Чарльза Дрейпера , стали основополагающими для разработки программного обеспечения , особенно для проектирования более надежных систем, основанных на асинхронном программном обеспечении, приоритетном планировании, тестировании и человеческом участии. возможность принятия решений в цикле . [25] Когда были определены требования к проектированию AGC, необходимого программного обеспечения и методов программирования не существовало, поэтому их пришлось разрабатывать с нуля. Многие из используемых алгоритмов траектории и наведения были основаны на более ранних работах Ричарда Баттина . [21] Первый полет командного модуля контролировался программным пакетом CORONA, разработкой которого руководил Алекс Космала. Программное обеспечение для лунных миссий состояло из COLOSSUS для командного модуля, разработкой которого руководил Фредерик Мартин, и LUMINARY [26] для лунного модуля под руководством Джорджа Черри. Детали этих программ были реализованы командой под руководством Маргарет Гамильтон . [27] Гамильтон очень интересовался тем, как астронавты будут взаимодействовать с программным обеспечением, и предсказал типы ошибок, которые могли возникнуть из-за человеческой ошибки. [22] [27] В общей сложности на разработку программного обеспечения по проекту было потрачено 1400 человеко-лет , максимальная численность персонала составила 350 человек. [21] В 2016 году Гамильтон получила Президентскую медаль свободы за роль в создании программного обеспечения для полетов.
Программное обеспечение Apollo Guidance Computer повлияло на конструкцию Skylab , Space Shuttle и первых электродистанционных систем истребителей. [28] [29]
Компьютер управления «Аполлоном» был назван «Четвертым астронавтом» за его роль в помощи трем астронавтам, которые полагались на него: Нилу Армстронгу , Баззу Олдрину и Майклу Коллинзу . [30]
Версия AGC Block II была разработана в 1966 году. Она сохранила базовую архитектуру Block I, но увеличила стираемую память с 1 до 2 килослов. Постоянная память была расширена с 24 до 36 килослов. Число инструкций было расширено с 11 до 34, а каналы ввода-вывода были реализованы для замены регистров ввода-вывода в блоке I. Версия блока II - это та, которая фактически летала на Луну. Блок I использовался во время беспилотных полетов «Аполлона-4» и «Аполлона -6» , а также находился на борту злополучного «Аполлона-1» .
Решение расширить память и набор команд для Блока II, но сохранить ограничительную трехбитную операцию Блока I. код и 12-битный адрес имели интересные последствия для дизайна. Для добавления дополнительных инструкций использовались различные уловки, например, наличие специальных адресов памяти, при обращении к которым реализовывалась определенная функция. Например, INDEX
адрес 25 запускает RESUME
команду возврата из прерывания. Аналогично, INDEX
17 выполнили INHINT
инструкцию (запретили прерывания), а INDEX
16 снова разрешили их ( RELINT
). Другие инструкции были реализованы путем предшествующей им специальной версии TC
call EXTEND
. Адресные пространства были расширены за счет использования регистров Bank (фиксированный) и Ebank (стираемый), поэтому единственной памятью любого типа, к которой можно было обратиться в любой момент времени, был текущий банк плюс небольшой объем фиксированной-фиксированной памяти и стираемая память. Кроме того, реестр банка мог адресовать максимум 32 килослов, поэтому для доступа к последним 4 килословам требовался регистр Сбанка (супербанка). Все межбанковские вызовы подпрограмм должны были быть инициированы из фиксированной-фиксированной памяти посредством специальных функций для восстановления исходного банка во время возврата: по сути, это система дальних указателей .
АРУ Блока II также имеет EDRUPT
инструкцию (название является сокращением от Ed's Interrupt , в честь Эда Смолли, программиста, запросившего ее). Эта инструкция не генерирует прерывание, а выполняет два действия, которые являются общими для обработки прерываний. Первое действие запрещает дальнейшие прерывания (и требует RESUME
инструкции для их повторного включения). Во втором действии в ZRUPT
регистр загружается текущее значение счетчика программы (Z). Он использовался только один раз в программном обеспечении «Аполлона» для настройки последовательности завершения цикла DAP в цифровом автопилоте лунного модуля . [31] Считается, что он ответственен за проблемы с эмуляцией программного обеспечения LEM AGC Luminary.
PGNCS выдавала непредвиденные предупреждения во время спуска Аполлона-11 на Луну , при этом AGC показывал сигнал тревоги 1202 («Исполнительное переполнение – НЕТ НАБОРОВ ЯДРА»), [32] , а затем сигнал тревоги 1201 («Исполнительное переполнение – НЕТ ОБЛАСТИ VAC»). [33] [ нужна ссылка ] Реакция АРУ на любой сигнал тревоги заключалась в мягком перезапуске. Причиной был быстрый и устойчивый поток ложных циклических данных с радара сближения (отслеживающего орбитальный командный модуль), намеренно оставленного в режиме ожидания во время спуска на случай, если это понадобится для прерывания. [34] [35]
На этом этапе процессор обычно загружен почти на 85%. Дополнительные 6400 циклических перехватов в секунду добавили нагрузку, эквивалентную 13%, оставив достаточно времени для завершения всех запланированных задач. Через пять минут после начала спуска Базз Олдрин дал компьютеру команду 1668 , которая давала ему указание периодически рассчитывать и отображать DELTAH (разницу между высотой, измеренной радаром, и вычисленной высотой). [nb 1] 1668 добавил еще 10% к нагрузке процессора, что вызвало переполнение исполнительной системы и сигнал тревоги 1202 . Получив команду «Вперед» из Хьюстона, Олдрин снова вошел в 1668 , и произошел еще один сигнал тревоги 1202 . Сообщая о втором сигнале тревоги, Олдрин добавил комментарий: «Похоже, он возникнет, когда у нас будет рост 1668 ». Программное обеспечение AGC было разработано с приоритетным планированием и автоматически восстанавливалось, удаляя задачи с более низким приоритетом, включая задачу отображения 1668 , для выполнения критически важных задач наведения и управления. Диспетчер управления Стив Бэйлс и его группа поддержки, в которую входил Джек Гарман, сделали несколько сигналов «ВПЕРЕД», и приземление прошло успешно. За свою роль Бэйлз получил Президентскую медаль свободы от имени всей команды центра управления и трех астронавтов Аполлона. [36]
Проблема заключалась не в ошибке программирования АРУ и не в ошибке пилота. Это была ошибка проектирования периферийного оборудования, которая уже была известна и задокументирована инженерами Аполлона-5. [37] Однако, поскольку проблема возникла только один раз во время испытаний, они пришли к выводу, что безопаснее летать с существующим оборудованием, которое они уже протестировали, чем с более новой, но в значительной степени непроверенной радиолокационной системой. В реальном оборудовании положение радара сближения кодировалось с помощью синхронизаторов , возбуждаемых источником переменного тока частотой 800 Гц, отличным от того, который использовался компьютером в качестве эталона синхронизации. Два источника частотой 800 Гц были синхронизированы по частоте, но не по фазе, а небольшие случайные изменения фазы создавали впечатление, будто антенна быстро «смещалась» в своем положении, хотя она была полностью неподвижной. Эти фантомные движения породили серию быстрых перехватов велосипеда.
Программное обеспечение и компьютерный дизайн Дж. Холкомба Лэйнинга спасли посадочную миссию Аполлона-11. Если бы не проект Лэнинга, посадка была бы прервана из-за отсутствия стабильного компьютера наведения. [37] [38]
AGC лег в основу экспериментальной системы дистанционного управления (FBW), установленной на F-8 Crusader для демонстрации практичности FBW с компьютерным управлением. AGC, использовавшийся на первом этапе программы, был заменен другой машиной на втором этапе, а исследования, проведенные в рамках программы, привели к разработке электродистанционных систем для космического корабля "Шаттл" . AGC также привел, хотя и косвенно, к разработке электродистанционных систем для поколения истребителей, разрабатывавшихся в то время. [39]
В 2003 году Рон Берки предпринял попытку восстановить исходный код, на котором работал AGC, и создать эмулятор, способный его запускать, VirtualAGC. [40] [41] Часть большого количества исходного кода, спасенного в результате этих усилий, была загружена бывшим стажером НАСА на GitHub 7 июля 2016 года, что привлекло значительное внимание средств массовой информации. [42] [43] Оригинальный исходный код компьютера управления Аполлоном-11 был первоначально открыт в 2003 году [44] проектом Virtual AGC и музеем Массачусетского технологического института . [45] Он был расшифрован и оцифрован из оригинальных распечаток исходного кода, сделанных в 60-х годах. В середине 2016 года бывший стажер НАСА Крис Гарри загрузил исходный код AGC на GitHub . [46] [47]
Тематические истории