Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Управляющий компьютер Apollo ( AGC ) - это цифровой компьютер, созданный для программы Apollo, который был установлен на борту каждого командного модуля Apollo (CM) и лунного модуля Apollo (LM). AGC предоставил вычислительные и электронные интерфейсы для наведения, навигации и управления космическим кораблем. [3]

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

Астронавты общались с AGC с помощью цифрового дисплея и клавиатуры, которые назывались DSKY (от «дисплей и клавиатура», произносится как «DIS-kee»). AGC и его пользовательский интерфейс DSKY были разработаны в начале 1960-х годов для программы Apollo приборной лабораторией Массачусетского технологического института и впервые полетели в 1966 году. [4] AGC был первым компьютером, основанным на кремниевых интегральных схемах . Производительность компьютера была сопоставима с домашними компьютерами первого поколения конца 1970-х годов, такими как Apple II , TRS-80 и Commodore PET . [5]

Операция [ править ]

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

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

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

  • Ракета - носитель ЦВМ (LVDC) на Сатурн V бустер приборного кольцо
  • система Прервать Руководство (AGS, выраженные AGS ) лунного модуля, который будет использоваться в случае выхода из строя LM PGNCS. AGS можно было использовать для взлета с Луны и для сближения с командным модулем, но не для посадки.

Дизайн [ править ]

Flatpack кремния интегральных схем в ориентировке компьютера Apollo

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

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

В то время как версия Block I использовала 4100 IC, каждая из которых содержала один вентиль NOR с тремя входами , более поздняя версия Block II (используемая в пилотируемых полетах) использовала 2800 IC, каждая с двумя вентилями NOR с тремя входами. [2] : 34 [ необходима цитата ] ИС от Fairchild Semiconductor были реализованы с использованием резисторно-транзисторной логики (RTL) в плоском корпусе . Они были соединены проволочной обмоткой , а затем проводка была залита литым эпоксидным пластиком. [ необходима цитата ]Использование одного типа IC (двойная NOR3) по всему AGC избежать проблем , которые мешали другой ранний компьютерный дизайн IC, то Минитмен II руководства компьютер , в котором используется сочетание диодно-транзисторной логики и диодных логических вентилей. [ необходимая цитата ] Это возможно, потому что вентили ИЛИ-НЕ являются универсальными логическими вентилями, из которых могут быть сделаны любые другие вентили , хотя и за счет использования большего количества вентилей. [13]

Компьютер был 2048 слов стираемой магнитной памяти ядра и 36 kilowords [ разъяснение необходимости ] из только для чтения памяти ядра веревки . [ необходима цитата ] Оба имели время цикла 11,72 микросекунды. [ необходима цитата ] Длина слова памяти составляла 16 бит: 15 бит данных и один бит нечетной четности . CPU -Internal 16-битный формат слово было 14 бит данных, один перепускной бит и один знаковый бит ( обратный код представления). [ цитата необходима]

Интерфейс DSKY [ править ]

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

Пользовательский интерфейс к AGC был DSKY , стоя на дисплей и клавиатуру и , как правило , выраженный «DIS-Kee». Он имеет набор световых индикаторов, числовые дисплеи и клавиатуру в стиле калькулятора . Команды вводились в виде двузначных чисел: Verb и Noun . Verb описывает тип действия, которое должно быть выполнено, а Noun указывает, на какие данные влияет действие, указанное командой Verb.

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

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

Сроки [ править ]

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

Далее основная частота была разделена с помощью преобразователя частоты , сначала на пять с использованием кольцевого счетчика для получения сигнала 102,4 кГц. Затем он был разделен на от двух до 17 последовательных стадий, называемых F1 (51,2 кГц) - F17 (0,78125 Гц). Каскад F10 (100 Гц) подавался обратно в АРУ для увеличения часов реального времени и других непроизвольных счетчиков с помощью Pinc (обсуждается ниже). Ступень F17 использовалась для периодического запуска АРУ, когда она работала в режиме ожидания.

Центральные регистры [ править ]

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

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

Другие регистры [ править ]

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

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

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

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

Память [ править ]

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

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

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

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

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

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

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

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

  • Dsrupt запускался через регулярные промежутки времени для обновления пользовательского дисплея (DSKY).
  • Возникновение прерывания было вызвано различными аппаратными сбоями или сигналами тревоги.
  • Keyrupt сигнализирует о нажатии клавиши с клавиатуры пользователя.
  • T3Rrupt генерировался через регулярные промежутки времени аппаратным таймером для обновления часов реального времени AGC .
  • Uprupt генерировался каждый раз, когда 16-битное слово данных восходящего канала было загружено в AGC.

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

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

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

Режим ожидания [ править ]

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

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

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

Шины данных [ править ]

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

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

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

Программное обеспечение [ править ]

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

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

Принципы проектирования, разработанные для AGC приборной лабораторией Массачусетского технологического института под руководством Чарльза Дрейпера в конце 1960-х годов , стали основополагающими для разработки программного обеспечения - особенно для проектирования более надежных систем, основанных на асинхронном программном обеспечении , планировании приоритетов , тестировании и вмешательстве человека. возможность принятия решения по петле . [16] Когда были определены требования к конструкции AGC, необходимого программного обеспечения и методов программирования не существовало, поэтому его пришлось разрабатывать с нуля.

Была простая в режиме реального время операционная система разработана Дии Холкомбами Ланинга , [17] , состоящий из Exec , пакетное задание-планирования с использованием кооперативной многозадачностью [18] и в прерывания управляемого общества упреждающего планировщика под названием лист ожидание , который может планировать несколько «задач», управляемых таймером. Задачи представляли собой короткие потоки выполнения, которые могли перепланировать себя для повторного выполнения в списке ожидания или могли запустить более длительную операцию, запустив «задание» с помощью Exec.

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

Набор управляемых прерываниями подпрограмм пользовательского интерфейса под названием Pinball предоставляет услуги клавиатуры и отображения для заданий и задач, выполняемых на AGC. Был предоставлен богатый набор доступных для пользователя процедур, позволяющих оператору (космонавту) отображать содержимое различных ячеек памяти в восьмеричном или десятичном формате группами по 1, 2 или 3 регистра за раз. Были предусмотрены процедуры мониторинга , чтобы оператор мог инициировать задачу для периодического повторного отображения содержимого определенных участков памяти. Рабочие места можно было инициировать. Подпрограммы Pinball выполняли (очень грубый) эквивалент оболочки UNIX.

Многие из используемых алгоритмов траектории и наведения были основаны на более ранней работе Ричарда Баттина . [17] Первый полет командного модуля контролировался программным пакетом CORONA, разработкой которого руководил Алекс Космала. Программное обеспечение для лунных миссий состояло из COLOSSUS для командного модуля, разработкой которого руководил Фредерик Мартин, и LUMINARY для лунного модуля, возглавляемого Джорджем Черри. Детали этих программ были реализованы командой под руководством Маргарет Гамильтон . [20] Гамильтон очень интересовался тем, как астронавты будут взаимодействовать с программным обеспечением, и предсказал типы ошибок, которые могут произойти из-за человеческой ошибки. [18] [20]В общей сложности на разработку программного обеспечения по проекту ушло 1400 человеко-лет , а максимальная численность персонала составила 350 человек. [17] В 2016 году Гамильтон получила Президентскую медаль свободы за роль в создании программного обеспечения для полета.

Компьютерное программное обеспечение Apollo Guidance Computer повлияло на конструкцию Skylab , Space Shuttle и ранних систем летательного истребителя. [21] [22] Код AGC был загружен в Интернет в 2003 году, а само программное обеспечение было загружено бывшим стажером НАСА на GitHub 7 июля 2016 года. [23] [24] [25]

Блок II [ править ]

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

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

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

1202 программный сигнал тревоги [ править ]

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

PGNCS генерировал непредвиденные предупреждения во время спуска Аполлона 11 на Луну , при этом AGC показывала сигнал тревоги 1202 («Исполнительное переполнение - НЕТ ОСНОВНЫХ НАБОРОВ») [27], а затем сигнал тревоги 1201 («Исполнительное переполнение - НЕТ ЗОН ВАК»). [28] [ необходима цитата ] ) Ответом АРУ на любой сигнал тревоги был мягкий перезапуск. Причиной был быстрый и устойчивый поток ложных циклов перехвата с радара сближения (отслеживание орбитального командного модуля), намеренно оставленных в режиме ожидания во время спуска на случай, если это необходимо для прерывания. [29] [30]

Во время этой части подхода процессор обычно загружен почти на 85%. Дополнительные 6400 перехватов циклов в секунду добавили нагрузки, эквивалентной 13%, оставляя достаточно времени для выполнения всех запланированных задач до завершения. Через пять минут после начала спуска Базз Олдрин дал компьютеру команду 1668 , которая предписывала ему периодически вычислять и отображать ДЕЛЬТА (разницу между высотой, измеренной радаром, и вычисленной высотой). [NB 1] The 1668 добавил еще 10% рабочую нагрузку процессора, в результате чего исполнительного переполнения и 1202 сигнализации. Получив "GO" из Хьюстона, Олдрин снова вошел в 1668 г. и еще в 1202 г.произошла тревога. Сообщая о второй тревоге, Олдрин добавил комментарий «Похоже, что она возникает, когда у нас есть 1668 ». Программное обеспечение AGC было разработано с планированием приоритетов и автоматически восстанавливалось, удаляя задачи с более низким приоритетом, включая задачу отображения 1668 , для выполнения своих важных задач управления и контроля. Контроллер наведения Стив Бейлс и его группа поддержки, в которую входил Джек Гарман, сделали несколько звонков "GO", и посадка прошла успешно. За свою роль Бейлз получил Президентскую медаль свободы от имени всей команды центра управления и трех астронавтов Аполлона. [31]

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

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

Приложения за пределами Apollo [ править ]

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

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

AGC был также использован для ВМС Соединенных Штатов «s Deep погруженности Rescue Vehicle . [36]

См. Также [ править ]

  • Apollo PGNCS - основная система наведения и навигации Apollo
  • Компьютеры AP-101 (производные от IBM S / 360), используемые в космическом корабле "Шаттл"
  • История компьютерной техники

Примечания [ править ]

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

Ссылки [ править ]

  1. ^ Руководство программиста, блок 2 AGC Assembly Language , получено 27 августа 2018 г.
  2. ^ a b c Холл, Элдон С. (1996), Путешествие на Луну: История управляющего компьютера Аполлона , Рестон, Вирджиния, США: AIAA , стр. 196, ISBN 1-56347-185-X
  3. ^ https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20090016290_2009014409.pdf Обзор аппаратного обеспечения, навигации и управления Apollo
  4. ^ https://history.nasa.gov/computers/Ch2-5.html
  5. ^ "Как полетные компьютеры Аполлона доставили людей на Луну и обратно?" .
  6. ^ Agle, DC (сентябрь 1998). "Полет на гасмобиле" . Воздух и космос . Проверено 15 декабря 2018 .
  7. ^ «Введение Рамона Алонсо» , AGC History Project (архив Калифорнийского технологического института, исходный сайт закрыт) , MIT, 27 июля 2001 г. , извлечено 30 августа 2009 г.
  8. ^ "Интервью Рамона Алонсо (испанский)" , Рамон Алонсо, el argentino que llevó a la Apollo 11 a la Luna , Diario La Nacion, 7 марта 2010 г.
  9. ^ "Биография Хью Блэра-Смита" , AGC History Project (архив Калифорнийского технологического института, исходный сайт закрыт) , MIT, январь 2002 г. , извлечено 30 августа 2009 г.
  10. ^ "Введение в Herb Thaler" , AGC History Project (архив Калифорнийского технологического института, исходный сайт закрыт) , MIT, 14 сентября 2001 г. , извлечено 30 августа 2009 г.
  11. ^ Butrica, Andrew J. (2015). «Глава 3: Роль НАСА в производстве интегральных схем». В Дике, Стивен Дж. (Ред.). Исторические исследования воздействия космического полета на общество (PDF) . НАСА . С. 149–250. ISBN  978-1-62683-027-1.
  12. ^ "Компьютер управления Apollo и первые кремниевые чипы" . Национальный музей авиации и космонавтики . Смитсоновский институт . 14 октября 2015 . Дата обращения 1 сентября 2019 .
  13. Peirce, CS (рукопись зима 1880–81), «Булевская алгебра с одной константой», опубликованная в 1933 году в Сборнике статей, т. 4, параграфы 12–20. Перепечатано в 1989 г. в Writings of Charles S. Peirce v. 4, pp. 218–21, Google [1] . См. Робертс, Дон Д. (2009), Экзистенциальные графы Чарльза С. Пирса , стр. 131.
  14. ^ Вайншток, Maia (2016-08-17). "Сцена в Массачусетском технологическом институте: код Аполлона Маргарет Гамильтон" . MIT News . Проверено 17 августа 2016 .
  15. ^ Минделл 2008 , стр. 154, 157.
  16. ^ НАСА Прессрелиз «NASA Почести Apollo Инженер» (3 сентября 2003)
  17. ^ a b c Хоуг, Дэвид (сентябрь 1976 г.). "История бортового наведения, навигации и управления Apollo" (PDF) . Лаборатория Чарльза Старка Дрейпера.
  18. ^ а б Минделл 2008 , стр. 149.
  19. ^ "Введение Хью Блэра-Смита" , AGC История проекта (архив Caltech, оригинальный сайт закрыт) , MIT, 30 ноября 2001 , извлекаться 2010-03-21
  20. ^ a b Харви IV, Гарри Гулд (13 октября 2015 г.). «Ее код получил людей на Луне - и сам изобрел программное обеспечение» . ПРОВОДНОЙ . Проверено 25 ноября 2018 .
  21. ^ Управление логического дизайна НАСА «О Маргарет Гамильтон» (последняя редакция: 3 февраля 2010 г.)
  22. ^ Автор AJS Рэйл «Инженеры и ученые НАСА - превращают мечты в реальность»
  23. ^ Коллинз, Кейт. «Код, который привел Америку на Луну, был только что опубликован на GitHub, и это похоже на капсулу времени 1960-х годов» . Кварц . Проверено 19 августа 2016 .
  24. ^ Гарри, Крис. «Оригинальный исходный код управляющего компьютера Apollo 11 (AGC) для командного и лунного модулей» . GitHub . Проверено 19 августа 2016 .
  25. ^ «Ранее (7 апреля 2015 г.), более полная загрузка на Github, поддерживается iBiblio» . Проверено 24 ноября 2017 года .
  26. О'Брайен, Фрэнк (25.06.2010). Управляющий компьютер Apollo: архитектура и работа . Springer Science & Business Media. ISBN 978-1-4419-0877-3.
  27. ^ Коллинз, Майкл; Олдрин, Эдвин (1975), Кортрайт, Эдгар М. (редактор), «Желтый предупреждающий свет» , НАСА SP-350, Экспедиции Аполлона на Луну , Вашингтон, округ Колумбия: НАСА, стр. Глава 11.4, ISBN 978-0486471754, получено 30.08.2009
  28. ^ "Крислгарри / Аполлон-11" . GitHub . Проверено 17 июля 2016 .
  29. Адлер, Питер (1998), Джонс, Эрик М. (редактор), «Сигнализация программы Apollo 11» , Apollo 11 Lunar Surface Journal , НАСА , получено 01 сентября 2009 г.
  30. Мартин, Фред Х. (июль 1994), Джонс, Эрик М. (редактор), «Аполлон 11: 25 лет спустя» , Apollo 11 Lunar Surface Journal , НАСА , извлечено 01 сентября 2009 г.
  31. ^ Кортрайт, Эдгар М., изд. (1975), "The Lunar Module Computer" , Apollo 11 Lunar Surface Journal , НАСА , извлечено 04 февраля 2010 г.
  32. ^ Эйлс, Дон (6 февраля 2004 г.), "Tales from the Lunar Module Guidance Computer" , 27-я ежегодная конференция по управлению и управлению , Брекенридж, Колорадо: Американское астронавтическое общество
  33. Сказки с компьютера наведения лунного модуля
  34. Витт, Стивен (24 июня 2019 г.). «Аполлон-11: Миссия вышла из-под контроля» . Проводной . Сан-Франциско: публикации Condé Nast . Проверено 18 сентября 2019 года .
  35. ^ Tomayko, Джеймс Е. (2000), "NASA SP-2000-4224 - Компьютеры Take Flight: История НАСА Новаторская Digital Fly-By-Wire Project" (PDF) , НАСА История серии , Вашингтон, округ Колумбия: NASA , получено 01.09.2009
  36. ^ Крейвен, Джон Пина (2002). Тихая война: холодная война, битва под морем . Нью-Йорк: Саймон и Шустер. п. 120 . ISBN 0-684-87213-7.

Источники [ править ]

  • Минделл, Дэвид А. (2008). Цифровой Аполлон: человек и машина в космическом полете . Кембридж, Массачусетс: MIT Press. ISBN 978-0-262-26668-0.

Внешние ссылки [ править ]

Документация по AGC и ее развитию
  • Памятка AGC4 № 9, Инструкции блока II - Печально известная памятка, которая де-факто служила официальной документацией набора инструкций.
  • Компьютеры в космическом полете: опыт НАСА - Джеймс Томайко (Глава 2, Часть 5, Компьютер управления Apollo: Аппаратное обеспечение )
  • Компьютеры в полете - Джеймс Томайко
  • Навигационный компьютер Apollo - вид для пользователей ( PDF ) - Дэвид Скотт, астронавт миссии Apollo
  • Обработка входных данных сборки контроллера ориентации лунного модуля ( PDF ) - Хосе Портильо Луго, History of Technology
  • Проект MIT AGC - с обширным архивом документов
    • Список исходного кода программного обеспечения Luminary для компьютера наведения лунного модуля. (nb. 622 Мб)
    • Список исходного кода программного обеспечения Colossus для управляющего компьютера командного модуля. (nb. 83 Мб)
  • AGC Block I и Dsky Национального музея авиации и космонавтики
  • Аннотации к путешествию Элдона Холла на Луну - системный программист AGC обсуждает некоторые неясные детали разработки AGC, включая особенности прерывания Эда.
Документация по проектированию аппаратного обеспечения AGC и, в частности, по использованию новых интегральных схем вместо транзисторов.
  • Интегральные схемы AGC
  • Интегральные схемы в управляющем компьютере Apollo
Документация по работе программного обеспечения AGC
  • Delco Electronics, Apollo 15 - Руководство по программному обеспечению CSM и LEM AGC, используемому в миссии Apollo 15, включая подробные процедуры пользовательского интерфейса, объяснение многих основных алгоритмов и ограниченную информацию об оборудовании. Обратите внимание, что в этом документе более 500 страниц и размер более 150 мегабайт.
  • Стенгель Р. Ручное управление ориентацией лунного модуля // Космические аппараты и ракеты. 7, № 8, август 1970 г., стр. 941–948.
  • Исходный код для кода командного модуля (Comanche054) и кода лунного модуля (Luminary099) в виде текста.
  • Полный исходный код GitHub Исходный исходный код управляющего компьютера Apollo 11 (AGC) для командного и лунного модулей.
Некоторые проекты и симуляторы на базе AGC
  • Реплика AGC - успешный проект Джона Пулторака по созданию аппаратной копии AGC Block I в его подвале. Зеркало сайта: AGC Replica .
  • Виртуальная домашняя страница AGC - симулятор AGC Рональда Берки, а также восстановление исходного и двоичного кода для ПО Colossus (CSM) и Luminary (LEM).
  • Moonjs - веб-симулятор AGC, основанный на Virtual AGC.
  • Eagle Lander 3D Условно-бесплатная Lunar Lander Simulator с работающими AGC и DSKY (только для Windows).
  • AGC перезапустили 45 лет спустя

Истории об особенностях

  • Путь к Луне (BBC News)
  • Реставраторы пытаются запустить компьютер наведения лунного модуля (Wall Street Journal)
  • Компьютер для видео Apollo