stringtranslate.com

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

Компьютер управления Apollo ( AGC ) был цифровым компьютером , созданным для программы Apollo , который устанавливался на борту каждого командного модуля Apollo (CM) и лунного модуля Apollo (LM). AGC обеспечивал вычисления и электронные интерфейсы для управления, навигации и контроля космического корабля. [3] AGC был первым компьютером на основе кремниевых интегральных схем . [ требуется цитата ] Производительность компьютера была сопоставима с первым поколением домашних компьютеров конца 1970-х годов, таких как Apple II , TRS-80 и Commodore PET . [4]

Длина слова AGC составляет 16 бит , с 15 битами данных и одним битом четности . Большая часть программного обеспечения AGC хранится в специальной памяти, доступной только для чтения, известной как память на сердечниках , образованная путем переплетения проводов через и вокруг магнитных сердечников , хотя небольшое количество памяти на сердечниках для чтения/записи доступно.

Астронавты общались с AGC с помощью цифрового дисплея и клавиатуры, называемых DSKY (от «дисплей и клавиатура», произносится как «ДИС-ки»). AGC и его пользовательский интерфейс DSKY были разработаны в начале 1960-х годов для программы «Аполлон» Лабораторией приборостроения Массачусетского технологического института и впервые были запущены в 1966 году. [5]

Операция

Астронавты вручную управляли проектом Gemini с помощью ручек управления , но компьютеры управляли большей частью проекта Apollo, за исключением коротких периодов высадки на Луну. [6] Каждый полет на Луну осуществлялся с двумя AGC, по одному в командном модуле и лунном модуле Apollo , за исключением Apollo 7 , который был миссией на околоземной орбите, и Apollo 8 , которому не требовался лунный модуль для его миссии на лунной орбите. AGC в командном модуле был центром его системы наведения, навигации и управления (GNC). AGC в лунном модуле управлял его PGNCS (первичной системой наведения, навигации и управления) Apollo, с аббревиатурой, произносимой как pings .

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

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

Дизайн

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

AGC был разработан в Лаборатории приборостроения Массачусетского технологического института под руководством Чарльза Старка Дрейпера , а проектированием оборудования руководил Элдон С. Холл . [2] Ранние архитектурные работы были выполнены Дж. Х. Лэнингом-младшим , Альбертом Хопкинсом , Ричардом Баттином , Рамоном Алонсо [7] [8] и Хью Блэр-Смитом. [9] Аппаратное обеспечение для полета было изготовлено компанией Raytheon , чей Герб Талер [10] также входил в архитектурную группу.

По словам Куринека и др., чипы были приварены к платам, а не припаяны, как можно было бы ожидать. [11] Чертежи логического модуля бортового компьютера Apollo Guidance Computer указывают на контактную сварку. [12] [13]

Логическое аппаратное обеспечение

После использования интегральных схем (ИС) на платформе межпланетного мониторинга (IMP) в 1963 году, технология ИС была позже принята для AGC. [14] Бортовой компьютер Apollo был первым компьютером, в котором использовались кремниевые ИС-чипы. [15]

В то время как версия Block I использовала 4100 ИС, каждая из которых содержала один трехвходовой вентиль NOR , более поздняя версия Block II (использовавшаяся в пилотируемых полетах) использовала около 2800 ИС, в основном двойные трехвходовые вентили NOR и меньшее количество расширителей и усилителей считывания. [16] : 27, 266  ИС от Fairchild Semiconductor были реализованы с использованием резисторно-транзисторной логики (RTL) в плоском корпусе . Они были соединены с помощью накрутки проводов , а затем проводка была залита в литой эпоксидный пластик. [16] : 129 

Использование одного типа ИС (двойной NOR3) во всей AGC позволило избежать проблем, которые преследовали другую раннюю разработку компьютера на ИС, управляющий компьютер Minuteman II , в котором использовалась смесь диодно-транзисторной логики и диодных логических вентилей. [ необходима цитата ] Вентили NOR являются универсальными логическими вентилями, из которых можно сделать любой другой вентиль, хотя и за счет использования большего количества вентилей. [17]

Память

Компьютер имел 2048 слов стираемой памяти на магнитном сердечнике и 36 864 слова памяти на сердечнике только для чтения . [16] : 27, 90–93  Оба имели время цикла 11,72 микросекунд. [16] : 27  Длина слова памяти составляла 16 бит: 15 бит данных и один бит проверки на нечетность . Внутренний 16-битный формат слова ЦП состоял из 14 бит данных, одного бита переполнения и одного знакового бита ( представление в виде дополнения к единице ). [16] : 35–37 

Интерфейс DSKY

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

Пользовательским интерфейсом AGC был DSKY , что означает дисплей и клавиатура и обычно произносится как «ДИС-ки». Он имеет ряд индикаторных ламп, цифровых дисплеев и клавиатуру в стиле калькулятора . Команды вводились в числовом виде, как двузначные числа: Глагол и Существительное . Глагол описывал тип действия, которое должно было быть выполнено, а Существительное указывало, какие данные были затронуты действием, указанным командой Глагол.

Каждая цифра отображалась с помощью зеленого (указано как 530 нм [18] ) высоковольтного электролюминесцентного семисегментного дисплея ; они управлялись электромеханическими реле , ограничивающими скорость обновления. Три пятизначных знаковых числа также могли отображаться в восьмеричном или десятичном виде и обычно использовались для отображения векторов, таких как положение космического корабля или требуемое изменение скорости ( дельта-V ). Хотя данные хранились внутри в метрических единицах , они отображались в общепринятых единицах США . Этот интерфейс в стиле калькулятора был первым в своем роде.

Командный модуль имеет два DSKY, подключенных к его AGC: один расположен на главной панели приборов, а второй — в нижнем отсеке оборудования около секстанта , используемого для выравнивания платформы инерциального наведения . Лунный модуль имел один DSKY для своего AGC. Указатель ориентации пилотажного директора (FDAI), управляемый AGC, был расположен над DSKY на консоли командира и на LM.

Сроки

Опорный сигнал синхронизации AGC исходил от кварцевого генератора 2,048 МГц . Часы делились на два для получения четырехфазных часов 1,024 МГц , которые AGC использовал для выполнения внутренних операций. Часы 1,024 МГц также делились на два для получения сигнала 512 кГц, называемого главной частотой ; этот сигнал использовался для синхронизации внешних систем космического корабля Apollo.

Основная частота далее делилась через масштабирующее устройство , сначала на пять с использованием кольцевого счетчика для получения сигнала 102,4 кГц. Затем он делился на два через 17 последовательных этапов, называемых F1 (51,2 кГц) через F17 (0,78125 Гц). Этап F10 (100 Гц) подавался обратно в AGC для увеличения часов реального времени и других непроизвольных счетчиков с использованием Pinc (обсуждается ниже). Этап F17 использовался для периодического запуска AGC, когда он работал в режиме ожидания .

Центральные регистры

AGC имел четыре 16-битных регистра для общего вычислительного использования, называемых центральными регистрами :

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

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

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

В AGC имелись дополнительные регистры, которые использовались внутри в ходе работы:

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

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

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

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

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

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

Память

Память сердечника троса AGC (ПЗУ)

Память AGC блока I была организована в банки по 1 килослову. Самый нижний банк (банк 0) был стираемой памятью (RAM). Все банки выше банка 0 были фиксированной памятью (ROM). Каждая инструкция AGC имела 12-битное адресное поле. Нижние биты (1-10) адресуют память внутри каждого банка. Биты 11 и 12 выбирают банк: 00 выбирает стираемый банк памяти; 01 выбирает самый нижний банк (банк 1) фиксированной памяти; 10 выбирает следующий (банк 2); и 11 выбирает регистр банка , который может быть использован для выбора любого банка выше 2. Банки 1 и 2 назывались фиксированно-фиксированной памятью, потому что они всегда были доступны, независимо от содержимого регистра банка. Банки 3 и выше назывались фиксированно-переключаемыми , потому что выбранный банк определялся регистром банка.

Первоначально AGC блока I имел 12 килослов постоянной памяти, но позже этот объем был увеличен до 24 килослов. Блок II имел 36 килослов постоянной памяти и 2 килослова стираемой памяти.

AGC передавало данные в память и из памяти через регистр G в процессе, называемом циклом памяти . Цикл памяти занимал 12 тактовых импульсов (11,72 мкс). Цикл начинался с тактового импульса 1 (TP1), когда AGC загружал адрес памяти для выборки в регистр S. Аппаратное обеспечение памяти извлекало слово данных из памяти по адресу, указанному регистром S. Слова из стираемой памяти помещались в регистр G тактовым импульсом 6 (TP6); слова из фиксированной памяти были доступны тактовым импульсом 7. Извлеченное слово памяти затем было доступно в регистре G для доступа AGC во время тактовых импульсов 7–10. После тактового импульса 10 данные в регистре G записывались обратно в память.

Цикл памяти AGC происходил непрерывно во время работы AGC. Инструкции, которым требовались данные памяти, должны были обращаться к ним во время тактовых импульсов 7–10. Если AGC изменял слово памяти в регистре G, измененное слово записывалось обратно в память после тактового импульса 10. Таким образом, слова данных непрерывно циклически перемещались из памяти в регистр G, а затем обратно в память.

Нижние 15 бит каждого слова памяти содержали инструкции или данные AGC, причем каждое слово было защищено 16-м нечетным битом четности. Этот бит устанавливался в 1 или 0 схемой генератора четности, поэтому подсчет единиц в каждом слове памяти всегда давал нечетное число. Схема проверки четности проверяла бит четности во время каждого цикла памяти; если бит не соответствовал ожидаемому значению, слово памяти считалось поврежденным, и на панели загорался индикатор четности .

Прерывания и непроизвольные счетчики

AGC имел пять векторных прерываний :

AGC реагировал на каждое прерывание, временно приостанавливая текущую программу, выполняя короткую процедуру обработки прерывания, а затем возобновляя прерванную программу.

AGC также имел 20 непроизвольных счетчиков . Это были ячейки памяти, которые функционировали как счетчики вверх/вниз или регистры сдвига. Счетчики увеличивались, уменьшались или сдвигались в ответ на внутренние входы. Увеличение ( Pinc ), уменьшение ( Minc ) или сдвиг ( Shinc ) обрабатывались одной подпоследовательностью микроинструкций, вставленных между любыми двумя обычными инструкциями.

Прерывания могли быть вызваны переполнением счетчиков. Прерывания T3rupt и Dsrupt были вызваны, когда их счетчики, управляемые аппаратными часами с частотой 100 Гц, переполнялись после выполнения многих подпоследовательностей Pinc. Прерывание Uprupt было вызвано после того, как его счетчик, выполняя подпоследовательность Shinc, сдвинул 16 бит данных восходящей линии связи в AGC.

Режим ожидания

AGC имел режим энергосбережения, управляемый переключателем разрешения режима ожидания . Этот режим отключал питание AGC, за исключением тактовой частоты 2,048 МГц и масштабатора. Сигнал F17 от масштабатора снова включал питание AGC и AGC с интервалом 1,28 секунды. В этом режиме AGC выполнял основные функции, проверял переключатель разрешения режима ожидания и, если он был включен, отключал питание и возвращался в спящий режим до следующего сигнала F17.

В режиме ожидания AGC спал большую часть времени; поэтому он не был активен для выполнения инструкции Pinc, необходимой для обновления часов реального времени AGC с интервалом в 10 мс. Для компенсации одной из функций, выполняемых AGC каждый раз, когда он просыпался в режиме ожидания, было обновление часов реального времени на 1,28 секунды.

Режим ожидания был разработан для снижения мощности на 5–10 Вт (с 70 Вт) во время полета на средней дистанции, когда AGC не требовался. Однако на практике AGC оставался включенным на всех этапах миссии, и эта функция никогда не использовалась.

Шины данных

AGC имел 16-битную шину чтения и 16-битную шину записи. Данные из центральных регистров (A, Q, Z или LP) или других внутренних регистров могли быть направлены на шину чтения с помощью управляющего сигнала. Шина чтения подключалась к шине записи через неинвертирующий буфер, поэтому любые данные, появляющиеся на шине чтения, также появлялись на шине записи. Другие управляющие сигналы могли копировать данные шины записи обратно в регистры.

Передача данных работала следующим образом: для перемещения адреса следующей инструкции из регистра B в регистр S подавался управляющий сигнал RB (чтение B); это приводило к перемещению адреса из регистра B на шину чтения, а затем на шину записи. Управляющий сигнал WS (запись S) перемещал адрес из шины записи в регистр S.

Несколько регистров могли быть одновременно прочитаны на шине чтения. Когда это происходило, данные из каждого регистра включались в шину с помощью операции ИЛИ. Эта функция включалась в шину с помощью ИЛИ использовалась для реализации инструкции Mask, которая была логической операцией И. Поскольку AGC не имел собственной возможности выполнять логическое И , но мог выполнять логическое ИЛИ через шину и мог дополнять (инвертировать) данные через регистр C, теорема Де Моргана использовалась для реализации эквивалента логического И. Это достигалось путем инвертирования обоих операндов, выполнения логического ИЛИ через шину и последующего инвертирования результата.

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

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

Программное обеспечение AGC было написано на языке ассемблера AGC и хранилось в памяти троса . Основная часть программного обеспечения находилась в памяти троса только для чтения и, таким образом, не могла быть изменена в процессе эксплуатации, [20] но некоторые ключевые части программного обеспечения хранились в стандартной памяти на магнитных сердечниках для чтения и записи и могли быть перезаписаны астронавтами с помощью интерфейса DSKY, как это было сделано на Аполлоне-14 .

Простая операционная система реального времени, разработанная Дж. Халкомбом Лэнингом [21], состоящая из «Exec», пакетного планирования заданий с использованием кооперативной многозадачности , [22] и управляемого прерываниями упреждающего планировщика, называемого «Waitlist», который планировал управляемые таймером «задачи», управляла компьютером. Задачи представляли собой короткие потоки выполнения, которые могли перепланировать себя для повторного выполнения в Waitlist или могли начать более длительную операцию, начав «задание» с помощью Exec. Расчеты проводились с использованием метрической системы , но показания на дисплее отображались в единицах футы, футы в секунду и морские мили — единицах, к которым привыкли астронавты Apollo. [23]

AGC имел сложный программный интерпретатор, разработанный Лабораторией инструментальных средств Массачусетского технологического института , который реализовал виртуальную машину с более сложными и эффективными псевдоинструкциями, чем собственный AGC. Эти инструкции упрощали навигационные программы. Интерпретируемый код, который включал тригонометрическую , скалярную и векторную арифметику двойной точности (16 и 24 бит), даже MXVинструкцию (матрица × вектор), мог быть смешан с собственным кодом AGC. Хотя время выполнения псевдоинструкций было увеличено (из-за необходимости интерпретировать эти инструкции во время выполнения), интерпретатор предоставлял гораздо больше инструкций, чем изначально поддерживал AGC, а требования к памяти были намного ниже, чем в случае добавления этих инструкций в собственный язык AGC, что потребовало бы дополнительной памяти, встроенной в компьютер (в 1960-х годах память была очень дорогой). Среднее время выполнения псевдоинструкции составляло около 24 мс. Ассемблер, названный YUL в честь раннего прототипа Christmas Computer , [24] обеспечивал правильные переходы между собственным и интерпретируемым кодом.

Набор процедур пользовательского интерфейса с прерываниями, называемый «Пинбол», предоставлял клавиатуру и дисплейные сервисы для заданий и задач, запущенных на AGC. Был предоставлен набор доступных пользователю процедур, чтобы позволить астронавтам отображать содержимое различных ячеек памяти в восьмеричном или десятичном виде группами по 1, 2 или 3 регистра за раз. Были предоставлены процедуры «Монитор», чтобы оператор мог инициировать задачу для периодического повторного отображения содержимого определенных ячеек памяти. Задания могли быть инициированы.

Принципы проектирования, разработанные для AGC Лабораторией приборостроения Массачусетского технологического института , которой в конце 1960-х руководил Чарльз Дрейпер , стали основополагающими для разработки программного обеспечения — в частности, для проектирования более надежных систем, которые полагались на асинхронное программное обеспечение, приоритетное планирование, тестирование и возможность принятия решений человеком в контуре . [25] Когда были определены требования к проектированию AGC, необходимого программного обеспечения и методов программирования не существовало, поэтому их пришлось разрабатывать с нуля. Многие из используемых алгоритмов траектории и наведения были основаны на более ранних работах Ричарда Баттина . [21] Первый полет командного модуля контролировался программным пакетом под названием CORONA, разработкой которого руководил Алекс Космала. Программное обеспечение для лунных миссий состояло из COLOSSUS для командного модуля, разработкой которого руководил Фредерик Мартин, и LUMINARY [26] для лунного модуля под руководством Джорджа Черри. Детали этих программ были реализованы командой под руководством Маргарет Гамильтон . [27] Гамильтон очень интересовался тем, как астронавты будут взаимодействовать с программным обеспечением, и предсказал типы ошибок, которые могли возникнуть из-за человеческого фактора. [22] [27] В общей сложности разработка программного обеспечения в рамках проекта заняла 1400 человеко-лет , при этом пиковая численность рабочей силы составляла 350 человек. [21] В 2016 году Гамильтон получила Президентскую медаль Свободы за свою роль в создании программного обеспечения для полета.

Программное обеспечение бортового компьютера Apollo оказало влияние на конструкцию Skylab , Space Shuttle и ранних систем управления истребителями. [28] [29]

Компьютер управления «Аполлона» называли «четвертым астронавтом» за его роль в оказании помощи трем астронавтам, которые на него полагались: Нилу Армстронгу , Баззу Олдрину и Майклу Коллинзу . [30]

Блок II

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

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

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

Программные будильники 1201 и 1202

DSKY и Базз Олдрин на лунном модуле Eagle космического корабля Apollo 11 по пути на Луну

PGNCS сгенерировал непредвиденные предупреждения во время спуска Аполлона-11 на Луну , при этом AGC показал сигнал тревоги 1202 («Executive overflow - NO CORE SETS»), [32] а затем сигнал тревоги 1201 («Executive overflow - NO VAC AREAS»). [33] [ необходима цитата ] Реакцией AGC на оба сигнала тревоги был мягкий перезапуск. Причиной был быстрый, устойчивый поток ложных циклических краж от радара сближения (отслеживающего орбитальный командный модуль), намеренно оставленного в режиме ожидания во время спуска на случай, если он понадобится для отмены. [34] [35]

На этом этапе подхода процессор обычно загружен почти на 85%. Дополнительные 6400 циклов захвата в секунду добавили эквивалент 13% нагрузки, оставив как раз достаточно времени для выполнения всех запланированных задач. Через пять минут спуска Базз Олдрин дал компьютеру команду 1668 , которая предписывала ему периодически рассчитывать и отображать DELTAH (разницу между высотой, измеренной радаром, и вычисленной высотой). [nb 1] 1668 добавила еще 10% к рабочей нагрузке процессора, вызвав переполнение исполнительной системы и сигнал тревоги 1202. Получив команду «GO» от Хьюстона, Олдрин снова ввел 1668 , и сработал еще один сигнал тревоги 1202. Сообщая о втором сигнале тревоги, Олдрин добавил комментарий: «Кажется, он появляется, когда у нас есть 1668 » . Программное обеспечение AGC было разработано с приоритетным планированием и автоматически восстанавливалось, удаляя задачи с более низким приоритетом, включая задачу отображения 1668 , чтобы завершить свои критические задачи наведения и управления. Контролер наведения Стив Бейлс и его группа поддержки, в которую входил Джек Гарман , сделали несколько вызовов «GO», и посадка прошла успешно. [36]

Проблема не была ни ошибкой программирования в AGC, ни ошибкой пилота. Это была ошибка в конструкции периферийного оборудования, которая уже была известна и задокументирована инженерами Apollo 5. [37] Однако, поскольку проблема возникла только один раз во время испытаний, они пришли к выводу, что безопаснее летать с существующим оборудованием, которое они уже протестировали, чем летать с более новой, но в значительной степени непроверенной радиолокационной системой. В реальном оборудовании положение радара сближения было закодировано с помощью синхронизаторов, возбуждаемых другим источником переменного тока 800 Гц, чем тот, который использовался компьютером в качестве опорного сигнала синхронизации. Два источника 800 Гц были синхронизированы по частоте, но не по фазе, и небольшие случайные изменения фазы создавали впечатление, что антенна быстро «колеблется» в положении, хотя она была полностью неподвижна. Эти фантомные движения генерировали быструю серию циклических краж.

Программное обеспечение и компьютерная конструкция Дж. Холкомба Лэнинга спасли миссию по посадке Аполлона 11. Если бы не конструкция Лэнинга, посадка была бы прервана из-за отсутствия стабильного компьютера наведения. [37] [38]

Приложения вне Apollo

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

AGC легла в основу экспериментальной системы управления полётом по проводам (FBW) , установленной на F-8 Crusader для демонстрации практичности управляемого компьютером FBW. AGC, использовавшаяся на первом этапе программы, была заменена другой машиной на втором этапе, а исследования, проведенные в рамках программы, привели к разработке систем управления полётом по проводам для космического челнока . AGC также привела, хотя и косвенно, к разработке систем управления полётом по проводам для поколения истребителей, которые разрабатывались в то время. [39]

Выпуск исходного кода

В 2003 году Рон Берки инициировал проект Virtual AGC, целью которого было восстановить исходный код бортового компьютера Apollo Guidance Computer (AGC) и создать функциональный эмулятор. [40] [41] В рамках этого проекта оригинальный код, транскрибированный и оцифрованный с печатных копий 1960-х годов, [42] был предоставлен в распоряжение проекта Virtual AGC и музея Массачусетского технологического института . [43] Эти усилия вновь привлекли внимание в середине 2016 года, когда бывший стажер NASA Крис Гарри загрузил код на GitHub, что вызвало значительный резонанс в СМИ. [44] [45] [46]

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

Примечания

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

Ссылки

  1. ^ Руководство программиста, Блок 2 AGC Язык ассемблера , получено 27.08.2018
  2. ^ ab Hall, Eldon C. (1996), Путешествие на Луну: История бортового компьютера Apollo , Рестон, Вирджиния, США: AIAA , стр. 196, ISBN 1-56347-185-X
  3. ^ Интербартоло, Майкл (январь 2009 г.). «Обзор оборудования для управления, навигации и контроля Apollo» (PDF) .
  4. ^ «Как бортовые компьютеры «Аполлона» доставили людей на Луну и обратно?». 11 марта 2017 г.
  5. ^ Джеймс Э. Томайко (1988). «Компьютер управления Apollo: Аппаратное обеспечение». Компьютеры в космических полетах: опыт NASA . NASA. Архивировано из оригинала 29 декабря 2023 г.
  6. Agle, DC (сентябрь 1998 г.). «Flying the Gusmobile». Air & Space . Получено 15 декабря 2018 г.
  7. ^ "Введение Рамона Алонсо", AGC History Project (архив Калтеха, исходный сайт закрыт) , MIT, 27 июля 2001 г. , получено 30 августа 2009 г.
  8. ^ «Интервью Рамона Алонсо (испанский)», Рамон Алонсо, аргентинец, который летает а-ля Аполлон-11 а-ля Луна , Diario La Nacion, 7 марта 2010 г.
  9. ^ "Биография Хью Блэра-Смита", AGC History Project (архив Калтеха, исходный сайт закрыт) , MIT, январь 2002 г. , получено 30 августа 2009 г.
  10. ^ "Введение Герба Талера", AGC History Project (архив Калтеха, исходный сайт закрыт) , MIT, 14 сентября 2001 г. , получено 30 августа 2009 г.
  11. ^ Куринец, Сантош К.; Индовина, Марк; МакНалти, Карл; Сейтц, Мэтью (2021). «Воссоздание истории: создание чипа, который отправился на Луну в 1969 году на Apollo 11» (PDF) . Рочестерский технологический институт . стр. 9 . Получено 29 августа 2023 г. .
  12. ^ "LOGIC MODULE ASSEMBLY NO. A1-A16". MIT Instrumentation Lab. 11 июля 1963 г. стр. Лист 1 из 2, Примечание 2.
  13. ^ «Требования Apollo к управлению технологическим процессом и изготовлению модулей и узлов контактной сварки электронных схем». Archive.org . NASA. 22 мая 1963 г. . Получено 19 февраля 2024 г. .
  14. ^ Бутрика, Эндрю Дж. (2015). «Глава 3: Роль НАСА в производстве интегральных схем». В Дик, Стивен Дж. (ред.). Исторические исследования социального воздействия космических полетов (PDF) . НАСА . стр. 149–250. ISBN 978-1-62683-027-1.
  15. ^ "Apollo Guidance Computer and the First Silicon Chips". Национальный музей авиации и космонавтики . Смитсоновский институт . 14 октября 2015 г. Получено 1 сентября 2019 г.
  16. ^ abcde Холл, Элдон К. (1972). Роль MIT в проекте Apollo: окончательный отчет по контрактам NAS 9-163 и NAS 94065 (PDF) . Кембридж, Массачусетс: MIT . Получено 15 июня 2021 г. .
  17. Peirce, CS (рукопись зима 1880–81), «Булева алгебра с одной константой», опубликовано в 1933 году в Collected Papers v. 4, параграфы 12–20. Перепечатано в 1989 году в Writings of Charles S. Peirce v. 4, стр. 218–21, Google [1]. См. Roberts, Don D. (2009), The Existential Graphs of Charles S. Peirce , стр. 131.
  18. ^ "Повторное включение панели Apollo DSKY: полная история". YouTube . 27 июля 2021 г.
  19. ^ Вайншток, Майя (2016-08-17). "Сцена в MIT: код Аполлона Маргарет Гамильтон". MIT News . Получено 2016-08-17 .
  20. Минделл 2008, стр. 154, 157.
  21. ^ abc Хоаг, Дэвид (сентябрь 1976 г.). «История бортового управления, навигации и контроля Apollo» (PDF) . Лаборатория Чарльза Старка Дрейпера.
  22. ^ ab Mindell 2008, стр. 149.
  23. ^ "Высадки на Луну". UK Metric Association. 18 октября 2018 г.
  24. ^ "Введение Хью Блэра-Смита", AGC History Project (архив Калтеха, исходный сайт закрыт) , MIT, 30 ноября 2001 г. , получено 21.03.2010
  25. ^ "NASA чествует инженера Apollo" (пресс-релиз). 3 сентября 2003 г.
  26. ^ "Страница виртуального светила AGC".
  27. ^ ab Harvey IV, Harry Gould (13 октября 2015 г.). «Ее код привел людей на Луну — и изобрел само программное обеспечение». WIRED . Получено 25.11.2018 .
  28. ^ «О Маргарет Гамильтон». NASA Office of Logic Design. 3 февраля 2010 г.
  29. ^ AJS Rayl. "Инженеры и ученые NASA — превращаем мечты в реальность". Архивировано из оригинала 16 мая 2016 г.
  30. ^ Фонг, Кевин (2019). «13 минут до Луны: Эпизод 5. Четвертый астронавт». bbc.co.uk . BBC World Service .
  31. ^ О'Брайен, Фрэнк (2010-06-25). Компьютер управления Apollo: архитектура и эксплуатация. Springer Science & Business Media. ISBN 978-1-4419-0877-3.
  32. ^ Коллинз, Майкл; Олдрин, Эдвин (1975), Кортрайт, Эдгар М. (ред.), «Желтый предупредительный свет», NASA SP-350, Экспедиции Apollo на Луну , Вашингтон, округ Колумбия: NASA, стр. Глава 11.4, ISBN 978-0486471754, получено 2009-08-30
  33. ^ "Крислгарри/Аполлон-11". Гитхаб . Проверено 17 июля 2016 г.
  34. ^ Адлер, Питер (1998), Джонс, Эрик М. (ред.), «Apollo 11 Program Alarms», Apollo 11 Lunar Surface Journal , NASA , получено 01.09.2009
  35. Мартин, Фред Х. (июль 1994 г.), Джонс, Эрик М. (ред.), «Аполлон-11: 25 лет спустя», Apollo 11 Lunar Surface Journal , NASA , получено 01.09.2009
  36. ^ Кортрайт, Эдгар М., ред. (1975), "Компьютер лунного модуля", Apollo 11 Lunar Surface Journal , NASA , получено 2010-02-04
  37. ^ ab Eyles, Don (6 февраля 2004 г.), «Рассказы о компьютере управления лунным модулем», 27-я ежегодная конференция по управлению и контролю , Брекенридж, Колорадо: Американское астронавтическое общество
  38. ^ Witt, Stephen (24 июня 2019 г.). «Apollo 11: Mission Out of Control». Wired . Сан-Франциско: Condé Nast Publications . Получено 18 сентября 2019 г.
  39. ^ Томайко, Джеймс Э. (2000), «NASA SP-2000-4224 — Компьютеры взлетают: История пионерского проекта NASA по цифровому управлению полетом» (PDF) , Серия «История NASA» , Вашингтон, округ Колумбия: NASA , получено 01.09.2009
  40. ^ Берки, Рон. "VirtualAGC". iBiblio . Получено 10 апреля 2021 г.
  41. ^ "Коллекция исходного кода AGC на Github, поддерживаемая iBiblio". GitHub . Архивировано из оригинала 7 мая 2021 г.Альтернативный URL-адрес
  42. ^ «Архивирование и ссылки на исходный код Apollo». www.softwareheritage.org . Получено 2021-09-09 .
  43. ^ "Виртуальная домашняя страница AGC". ibiblio.org . Получено 2021-09-09 .
  44. ^ Коллинз, Кит (9 июля 2016 г.). «Код, который доставил Америку на Луну, только что опубликован на GitHub, и это как капсула времени 1960-х годов». Quartz . Получено 19 августа 2016 г.
  45. ^ Гарри, Крис. "Оригинальный исходный код бортового компьютера Apollo 11 Guidance Computer (AGC) для командного и лунного модулей". GitHub . Архивировано из оригинала 12 апреля 2021 г.Альтернативный URL-адрес
  46. ^ "Исходный код Apollo 11 теперь на GitHub". Engadget . 10 июля 2016 г. Получено 09.09.2021 г.

Источники

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

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

Тематические статьи