stringtranslate.com

Компьютер управления Аполлоном

Компьютер управления Аполлоном ( 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 .

Интерфейс дисплея и клавиатуры (DSKY) компьютера управления Apollo, установленного на панели управления командного модуля, с указателем направления полета (FDAI) вверху.
Частичный список числовых кодов глаголов и существительных в навигационном компьютере Apollo, напечатанный для быстрого ознакомления на боковой панели.

Каждая лунная миссия имела два дополнительных компьютера:

Дизайн

Фотография микросхемы с двойным затвором NOR, используемой для создания управляющего компьютера Block II Apollo. Соединения (по часовой стрелке от центра сверху): земля, входы (3), выход, питание, выход, входы (3).
Схема двойного логического элемента ИЛИ-НЕ с 3 входами АРУ
Кремниевые интегральные схемы Flatpack , приваренные к печатной плате в компьютере наведения Apollo

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 

ДСКАЙ-интерфейс

Блок пользовательского интерфейса компьютера Apollo DSKY
Схема интерфейса LM DSKY

Пользовательским интерфейсом 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-битных регистра для общего вычислительного использования, называемых центральными регистрами :

В основной памяти также было четыре ячейки по адресам 20–23, получившие название « ячейки редактирования», потому что все, что там хранилось, появлялось со смещением или поворотом на одну битовую позицию, за исключением одной, которая сдвигала вправо семь битовых позиций, чтобы извлечь одну из семи битовых позиций. бит-интерпретатор op. коды, упакованные по два в слово. Это было обычным для AGC Block I и Block II.

Другие регистры

Прототипы DSKY и AGC на выставке в Музее истории компьютеров . АРУ открыт, показаны его логические модули.
Прототип логического модуля из Block I AGC
Логический модуль Block II с плоскими микросхемами

АРУ имел дополнительные регистры, которые использовались внутри в процессе работы:

Набор инструкций

Формат инструкции использовал 3 бита для кода операции и 12 бит для адреса. Блок у меня имел 11 инструкций: TC, CCS, INDEX, XCH, CS, TS, AD, и MASK(основной), и SU, MP, и DV(дополнительный). Первые восемь, называемые базовыми инструкциями , имели прямой доступ к 3-битной операции. код. Последние три были обозначены как инструкции экстракода, поскольку доступ к ним осуществлялся путем выполнения TCинструкций специального типа (называемых EXTEND) непосредственно перед инструкцией.

Инструкции блока I AGC состояли из следующего:

TC(управление трансфером)
Безусловный переход по адресу, указанному инструкцией. Адрес возврата автоматически сохранялся в регистре Q, поэтому TCинструкцию можно было использовать для вызовов подпрограмм.
CCS(посчитать, сравнить и пропустить)
Сложная инструкция условного перехода. Регистр A был загружен данными, полученными по адресу, указанному инструкцией. (Поскольку АРУ использует обозначение дополнения до единиц , существует два представления нуля. Когда все биты установлены в ноль, это называется плюс ноль . Если все биты установлены в единицу, это называется минус ноль .) Уменьшенное абсолютное значение (DABS) данных затем вычислялись и сохранялись в регистре A. Если число больше нуля, DABS уменьшает значение на 1; если число было отрицательным, оно дополняется перед применением декремента — это абсолютное значение. Уменьшенный означает «уменьшенный, но не ниже нуля». Следовательно, когда AGC выполняет функцию DABS, положительные числа будут стремиться к плюсовому нулю, как и отрицательные числа, но сначала их отрицательность проявляется через четырехпозиционный пропуск ниже. Последним шагом CCSявляется четырехсторонний пропуск, в зависимости от данных в регистре A перед DABS. Если регистр A больше 0, CCSпроисходит переход к первой инструкции сразу после CCS. Если в регистре A содержится плюс ноль, CCSпроисходит переход ко второй инструкции после CCS. Меньше нуля приводит к переходу к третьей инструкции после CCS, а минус ноль — к четвертой инструкции после CCS. Основная цель подсчета заключалась в том, чтобы позволить обычному циклу, управляемому положительным счетчиком, заканчиваться на а CCSи TCдо начала цикла, что эквивалентно IBM 360BCT . Функция абсолютного значения была сочтена достаточно важной, чтобы быть встроенной в эту инструкцию; при использовании только для этой цели последовательность после символа CCSбыла TC*+2, TC*+2, ADONE. Любопытным побочным эффектом было создание и использование CCS-дыр, когда было известно, что проверяемое значение никогда не бывает положительным, что происходило чаще, чем можно было предположить. В результате целых два слова оставались незанятыми, и специальный комитет отвечал за присвоение этим дыркам констант данных.
INDEX
Добавьте данные, полученные по адресу, указанному инструкцией, в следующую инструкцию. INDEXможет использоваться для добавления или вычитания значения индекса к базовому адресу , указанному в операнде следующей инструкции INDEX. Этот метод используется для реализации массивов и поиска по таблицам; поскольку добавление было сделано для обоих целых слов, оно также использовалось для изменения оп. код в следующей (дополнительной) инструкции, а в редких случаях обе функции одновременно.
RESUME
Особый случай INDEX( INDEX25). Это инструкция, используемая для возврата из прерывания. Это приводит к возобновлению выполнения с прерванного места.
XCH(обмен)
Обменяйте содержимое памяти содержимым регистра А. Если указанный адрес памяти находится в постоянной (только для чтения) памяти, содержимое памяти не затрагивается, и эта инструкция просто загружает регистр A. Если он находится в стираемой памяти, «коррекция» переполнения достигается за счет сохранения крайнего левого из 16 адресов. бит в A как знаковый бит в памяти, но нет такого исключительного поведения, как у TS.
CS(очистить и вычесть)
Загрузите в регистр A данные, на которые ссылается указанный адрес памяти, дополняя их единицами.
TS(передача на хранение)
Сохраните регистр A по указанному адресу памяти. TSтакже обнаруживает и исправляет переполнение таким образом, чтобы распространять перенос для сложения/вычитания с различной точностью. Если результат не имеет переполнения (два крайних левых бита A одинаковы), ничего особенного не происходит; если происходит переполнение (эти два бита различаются), самый левый из них передается в память как знаковый бит, регистр A изменяется на +1 или -1 соответственно, и управление переходит ко второй инструкции, следующей за TS. Всякий раз, когда переполнение является возможным, но ненормальным событием, за ним TSследует TCлогика отсутствия переполнения; когда это является нормальной возможностью (как при сложении/вычитании с множественной точностью), TSза ним следует CAFНОЛЬ ( CAF= XCHв фиксированную память), чтобы завершить формирование переноса (+1, 0 или -1) в следующую более высокую точное слово. Углы сохранялись с одинарной точностью , расстояния и скорости — с двойной точностью , а прошедшее время — с тройной точностью.
AD(добавлять)
Добавьте содержимое памяти в регистр A и сохраните результат в A. Два крайних левых бита A могут быть разными (состояние переполнения) до и/или после AD. Тот факт, что переполнение является состоянием, а не событием, допускает ограниченную степень переполнения при добавлении более двух чисел, пока ни одна из промежуточных сумм не превышает двойную емкость слова.
MASK
Выполните побитовую (логическую) операцию памяти с регистром A и сохраните результат в регистре A.
MP(умножить)
Умножьте содержимое регистра A на данные по указанному адресу памяти и сохраните произведение старшего порядка в регистре A, а произведение младшего порядка в регистре LP. Части изделия совпадают по знаку.
DV(разделять)
Разделите содержимое регистра A на данные по указанному адресу памяти. Храните частное в регистре A, а абсолютное значение остатка — в регистре Q. В отличие от современных машин, числа с фиксированной запятой рассматривались как дроби (условная десятичная точка справа от знакового бита), поэтому вы могли создавать мусор, если делитель не превышал размер дивиденда; защиты от такой ситуации не было. В блоке II AGC делимое двойной точности начиналось в A и L (блок II LP), а правильно подписанный остаток доставлялся в L. Это значительно упрощало подпрограмму деления двойной точности.
SU(вычесть)
Вычтите (дополнив единицы) данные по указанному адресу памяти из содержимого регистра A и сохраните результат в A.

Инструкции были реализованы в группах по 12 шагов, называемых тактирующими импульсами . Тактирующие импульсы получили названия от TP1 до TP12. Каждый набор из 12 тактирующих импульсов назывался подпоследовательностью команд . Простые инструкции, такие как TC, выполняются за одну подпоследовательность из 12 импульсов. Более сложные инструкции требовали нескольких подпоследовательностей. Инструкция умножения ( MP) использовала 8 подпоследовательностей: начальную подпоследовательность MP0, за которой следовала MP1подпоследовательность, которая повторялась 6 раз, а затем завершалась подпоследовательностью MP3. В Блоке II это число было сокращено до 3 подпоследовательностей.

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

Память

Память ядра AGC (ПЗУ)

Блок 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, теорема Де Моргана использовалась для реализации эквивалента логического И. Это было достигнуто путем инвертирования обоих операндов, выполнения логического ИЛИ через шину и последующего инвертирования результата.

Программное обеспечение

Маргарет Гамильтон стоит рядом со списком программного обеспечения, которое она и ее команда из Массачусетского технологического института разработали для проекта «Аполлон» . [19]

Программное обеспечение 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]

Блок II

Версия AGC Block II была разработана в 1966 году. Она сохранила базовую архитектуру Block I, но увеличила стираемую память с 1 до 2 килослов. Постоянная память была расширена с 24 до 36 килослов. Число инструкций было расширено с 11 до 34, а каналы ввода-вывода были реализованы для замены регистров ввода-вывода в блоке I. Версия блока II - это та, которая фактически летала на Луну. Блок I использовался во время беспилотных полетов «Аполлона-4» и «Аполлона -6» , а также находился на борту злополучного «Аполлона-1» .

Решение расширить память и набор команд для Блока II, но сохранить ограничительную трехбитную операцию Блока I. код и 12-битный адрес имели интересные последствия для дизайна. Для добавления дополнительных инструкций использовались различные уловки, например, наличие специальных адресов памяти, при обращении к которым реализовывалась определенная функция. Например, INDEXадрес 25 запускает RESUMEкоманду возврата из прерывания. Аналогично, INDEX17 выполнили INHINTинструкцию (запретили прерывания), а INDEX16 снова разрешили их ( RELINT). Другие инструкции были реализованы путем предшествующей им специальной версии TCcall EXTEND. Адресные пространства были расширены за счет использования регистров Bank (фиксированный) и Ebank (стираемый), поэтому единственной памятью любого типа, к которой можно было обратиться в любой момент времени, был текущий банк плюс небольшой объем фиксированной-фиксированной памяти и стираемая память. Кроме того, реестр банка мог адресовать максимум 32 килослов, поэтому для доступа к последним 4 килословам требовался регистр Сбанка (супербанка). Все межбанковские вызовы подпрограмм должны были быть инициированы из фиксированной-фиксированной памяти посредством специальных функций для восстановления исходного банка во время возврата: по сути, это система дальних указателей .

АРУ Блока II также имеет EDRUPTинструкцию (название является сокращением от Ed's Interrupt , в честь Эда Смолли, программиста, запросившего ее). Эта инструкция не генерирует прерывание, а выполняет два действия, которые являются общими для обработки прерываний. Первое действие запрещает дальнейшие прерывания (и требует RESUMEинструкции для их повторного включения). Во втором действии в ZRUPTрегистр загружается текущее значение счетчика программы (Z). Он использовался только один раз в программном обеспечении «Аполлона» для настройки последовательности завершения цикла DAP в цифровом автопилоте лунного модуля . [31] Считается, что он ответственен за проблемы с эмуляцией программного обеспечения LEM AGC Luminary.

Программные сигналы 1201 и 1202

DSKY и Базз Олдрин на лунном модуле «Орел» Аполлона-11 на пути к Луне

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]

Приложения за пределами Apollo

Испытательный стенд самолета Fly By Wire. AGC DSKY виден в отсеке авионики.

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]

Смотрите также

Примечания

  1. ^ Более конкретно, глагол 16 дает указание AGC печатать существительное (в данном случае 68, DELTAH) примерно два раза в секунду. Если бы Олдрин знал это, простой 0668 (один раз вычислить и отобразить DELTAH) добавил бы к системе только примерно 5% нагрузки, и сделал бы это только один раз, когда был нажат ENTER.

Рекомендации

  1. ^ Руководство программиста, блок 2 языка ассемблера AGC , получено 27 августа 2018 г.
  2. ^ Аб Холл, Элдон К. (1996), Путешествие на Луну: История компьютера управления Аполлоном , Рестон, Вирджиния, США: AIAA , стр. 196, ISBN 1-56347-185-Х
  3. ^ Интербартоло, Майкл (январь 2009 г.). «Обзор аппаратного обеспечения наведения, навигации и управления Apollo» (PDF) .
  4. ^ «Как бортовые компьютеры Аполлона доставили людей на Луну и обратно?». 11 марта 2017 г.
  5. ^ Джеймс Э. Томайко (1988). «Компьютер управления Аполлоном: Аппаратное обеспечение». Компьютеры в космических полетах: опыт НАСА . НАСА. Архивировано из оригинала 29 декабря 2023 года.
  6. ^ Эгл, округ Колумбия (сентябрь 1998 г.). «Полет на Гусмобиле». Воздух и космос . Проверено 15 декабря 2018 г.
  7. ^ «Представление Рамона Алонсо», Исторический проект AGC (архив Калифорнийского технологического института, исходный сайт закрыт) , Массачусетский технологический институт, 27 июля 2001 г. , получено 30 августа 2009 г.
  8. ^ «Интервью Рамона Алонсо (испанский)», Рамон Алонсо, аргентинец, который летел а-ля Аполлон-11 а-ля Луна , Diario La Nacion, 7 марта 2010 г.
  9. ^ «Биография Хью Блэр-Смита», AGC History Project (архив Калифорнийского технологического института, исходный сайт закрыт) , Массачусетский технологический институт, январь 2002 г. , получено 30 августа 2009 г.
  10. ^ «Введение в Херба Талера», Исторический проект AGC (архив Калифорнийского технологического института, исходный сайт закрыт) , Массачусетский технологический институт, 14 сентября 2001 г. , получено 30 августа 2009 г.
  11. ^ Куринец, Сантош К; Индовина, Марк; МакНалти, Карл; Зейтц, Мэтью (2021). «Воссоздание истории: создание чипа, который отправился на Луну в 1969 году на Аполлоне-11» (PDF) . Рочестерский технологический институт . п. 9 . Проверено 29 августа 2023 г.
  12. ^ "ЛОГИЧЕСКИЙ МОДУЛЬ В СБОРЕ № A1-A16" . Приборная лаборатория Массачусетского технологического института. 11 июля 1963 г. с. Лист 1 из 2, примечание 2.
  13. ^ «Требования Apollo к управлению процессом и изготовлению модулей и сборок электронных схем контактной сварки» . Архив.орг . НАСА. 22 мая 1963 года . Проверено 19 февраля 2024 г.
  14. ^ Бутрика, Эндрю Дж. (2015). «Глава 3: Роль НАСА в производстве интегральных схем». У Дика, Стивен Дж. (ред.). Исторические исследования влияния космических полетов на общество (PDF) . НАСА . стр. 149–250. ISBN 978-1-62683-027-1.
  15. ^ «Компьютер управления Аполлоном и первые кремниевые чипы» . Национальный музей авиации и космонавтики . Смитсоновский институт . 14 октября 2015 г. Проверено 1 сентября 2019 г.
  16. ^ abcde Hall, Элдон К. (1972). Роль Массачусетского технологического института в проекте «Аполлон»: итоговый отчет по контрактам NAS 9-163 и NAS 94065 (PDF) . Кембридж, Массачусетс: Массачусетский технологический институт . Проверено 15 июня 2021 г.
  17. ^ Пирс, CS (рукопись зимой 1880–1881 гг.), «Булова алгебра с одной константой», опубликованная в 1933 году в Сборнике статей , т. 4, параграфы 12–20. Перепечатано в 1989 г. в «Сочинениях Чарльза С. Пирса», т. 4, стр. 218–21, Google [1]. См. Робертс, Дон Д. (2009), Экзистенциальные графики Чарльза С. Пирса , с. 131.
  18. ^ "Переподсветка панели Apollo DSKY: Полная история" . YouTube . 27 июля 2021 г.
  19. ^ Вайншток, Майя (17 августа 2016 г.). «Сцена в Массачусетском технологическом институте: код Аполлона Маргарет Гамильтон». Новости МТИ . Проверено 17 августа 2016 г.
  20. ^ Минделл 2008, стр. 154, 157.
  21. ^ abc Хоаг, Дэвид (сентябрь 1976 г.). «История бортового наведения, навигации и управления Аполлона» (PDF) . Лаборатория Чарльза Старка Дрейпера.
  22. ^ аб Минделл 2008, стр. 149.
  23. ^ «Высадка на Луну». Метрическая ассоциация Великобритании. 18 октября 2018 г.
  24. ^ «Введение Хью Блер-Смита», Исторический проект AGC (архив Калифорнийского технологического института, исходный сайт закрыт) , Массачусетский технологический институт, 30 ноября 2001 г. , получено 21 марта 2010 г.
  25. ^ «НАСА награждает инженера Аполлона» (пресс-релиз). 3 сентября 2003 г.
  26. ^ "Виртуальная страница светила AGC" .
  27. ↑ ab Харви IV, Гарри Гулд (13 октября 2015 г.). «Ее код привел людей на Луну и изобрел само программное обеспечение». ПРОВОДНОЙ . Проверено 25 ноября 2018 г.
  28. ^ «О Маргарет Гамильтон». Управление логического проектирования НАСА. 3 февраля 2010 г.
  29. ^ AJS Рэйл. «Инженеры и ученые НАСА, превращающие мечты в реальность». Архивировано из оригинала 16 мая 2016 года.
  30. ^ Фонг, Кевин (2019). «13 минут до Луны: Серия 5. Четвертый космонавт». bbc.co.uk.Всемирная служба Би-би-си .
  31. ^ О'Брайен, Фрэнк (25 июня 2010 г.). Компьютер управления Apollo: архитектура и работа. Springer Science & Business Media. ISBN 978-1-4419-0877-3.
  32. ^ Коллинз, Майкл; Олдрин, Эдвин (1975), Кортрайт, Эдгар М. (редактор), «Желтый предупредительный свет», НАСА SP-350, Экспедиции Аполлона на Луну , Вашингтон, округ Колумбия: НАСА, стр. Глава 11.4, ISBN 978-0486471754, получено 30 августа 2009 г.
  33. ^ "Крислгарри/Аполлон-11". Гитхаб . Проверено 17 июля 2016 г.
  34. ^ Адлер, Питер (1998), Джонс, Эрик М. (редактор), «Тревоги программы Аполлона-11», журнал Apollo 11 Lunar Surface Journal , НАСА , получено 1 сентября 2009 г.
  35. ^ Мартин, Фред Х. (июль 1994 г.), Джонс, Эрик М. (редактор), «Аполлон 11: 25 лет спустя», Журнал Apollo 11 Lunar Surface Journal , НАСА , получено 1 сентября 2009 г.
  36. ^ Кортрайт, Эдгар М., изд. (1975), «Компьютер лунного модуля», Журнал лунной поверхности Аполлона-11 , НАСА , получено 4 февраля 2010 г.
  37. ^ Аб Эйлс, Дон (6 февраля 2004 г.), «Истории компьютера управления лунным модулем», 27-я ежегодная конференция по наведению и контролю , Брекенридж, Колорадо: Американское астронавтическое общество
  38. Витт, Стивен (24 июня 2019 г.). «Аполлон-11: Миссия вышла из-под контроля». Проводной . Сан-Франциско: Публикации Condé Nast . Проверено 18 сентября 2019 г.
  39. ^ Томайко, Джеймс Э. (2000), «NASA SP-2000-4224 — Компьютеры взлетают: история новаторского проекта НАСА по цифровому электродистанционному управлению» (PDF) , Серия историй НАСА , Вашингтон, округ Колумбия: НАСА , получено 1 сентября 2009 г.
  40. ^ Берки, Рон. «ВиртуалАГЦ». iБиблиотека . Проверено 10 апреля 2021 г.
  41. ^ «Коллекция исходного кода AGC на Github, поддерживаемая iBiblio» . Гитхаб . Архивировано из оригинала 7 мая 2021 года.Альтернативный URL
  42. Коллинз, Кейт (9 июля 2016 г.). «Код, который доставил Америку на Луну, был только что опубликован на GitHub, и это похоже на капсулу времени 1960-х годов». Кварц . Проверено 19 августа 2016 г.
  43. ^ Гарри, Крис. «Исходный код управляющего компьютера Аполлона-11 (AGC) для командного и лунного модулей». Гитхаб . Архивировано из оригинала 12 апреля 2021 года.Альтернативный URL
  44. ^ «Архивирование и ссылка на исходный код Apollo». www.softwareheritage.org . Проверено 9 сентября 2021 г.
  45. ^ «Виртуальная домашняя страница AGC» . ibiblio.org . Проверено 9 сентября 2021 г.
  46. ^ «GitHub — chrislgarry/Apollo-11: исходный код исходного компьютера управления Аполлоном-11 (AGC) для командного и лунного модулей» . Гитхаб . Проверено 9 сентября 2021 г.
  47. ^ «Исходный код Аполлона-11 теперь находится на GitHub» . Engadget . 10 июля 2016 года . Проверено 9 сентября 2021 г.

Источники

Внешние ссылки

Документация по AGC и ее развитию
Документация по проектированию аппаратного обеспечения АРУ и, в частности, по использованию новых интегральных схем вместо транзисторов.
Документация по работе программного обеспечения AGC
Некоторые проекты и симуляторы на базе AGC

Тематические истории