Компьютер наведения Apollo - Apollo Guidance Computer

Компьютер наведения Apollo
Agc view.jpg
Навигационный компьютер Apollo и DSKY
ИзобретенныйЛаборатория Чарльза Старка Дрейпера
ПроизводительRaytheon
ВведеноАвгуст 1966 г.; 54 года назад (1966-08)
Снято с производстваИюль 1975 г.; 45 лет назад (1975-07)
ТипАвионика
Компьютер навигации
ПроцессорДискретный кремний Интегральная схема (IC) чипы (RTL на основании)
Частота2,048 МГц
объем памяти15-битная длина слова + 1-битная четность,
2048 слов баран (магнитная память ), 36 864 слова ПЗУ (память сердечника веревки )[1]
ПортыDSKY, IMU, ручной контроллер, радар рандеву (CM), радар посадки (LM), приемник телеметрии, команда двигателя, система управления реакцией
Потребляемая мощность55 Вт[2]:120
Вес70 фунтов (32 кг)
Размеры24 × 12,5 × 6,5 дюйма (61 × 32 × 17 см)

В Компьютер наведения Apollo (AGC) это цифровой компьютер произведен для Программа Аполлон который был установлен на борту каждого Командный модуль Apollo (См) и Лунный модуль Аполлона (LM). AGC предоставил вычислительные и электронные интерфейсы для наведения, навигации и управления космическим кораблем.[3]

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

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

Операция

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

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

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

Дизайн

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

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

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

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

DSKY интерфейс

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

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

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

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

Время

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

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

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

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

А:В аккумулятор, для общих вычислений
Z:В счетчик команд - адрес следующей инструкции, которая будет выполняться
Q:Остаток от DV инструкция, а обратный адрес после TC инструкции
LP:Нижний продукт после Депутат инструкции

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

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

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

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

S:12-битный адресный регистр памяти, нижняя часть адреса памяти
Банк / Fbank:4-битный регистр банка ПЗУ, для выбора банка ПЗУ на 1 киловорд при адресации в фиксированно-переключаемом режиме
Ebank:3-битный регистр банка RAM, для выбора банка RAM из 256 слов при адресации в переключаемом стираемом режиме.
Сбербанк (супербанк):1-битное расширение для Fbank, необходимо, потому что последние 4 киловорда из 36-килобайтного ПЗУ не были доступны с использованием только Fbank
SQ:Регистр 4-битной последовательности; текущая инструкция
г:16-битный буферный регистр памяти для хранения слов данных, перемещающихся в память и из памяти
Икс:Вход 'x' в сумматор (сумматор использовался для выполнения всех 1 дополнение арифметика) или приращение счетчика программ (Z регистр)
Y:Другой ('y') вход сумматора
U:Не совсем регистр, но вывод сумматора (сумма дополнения до 1 содержимого регистров Икс и Y)
B:Буферный регистр общего назначения, также используемый для предварительной выборки следующей инструкции. В начале следующей инструкции старшие биты B (содержащие следующий код операции) были скопированы в SQ, а младшие биты (адрес) были скопированы в S.
C:Не отдельный регистр, а дополнение до 1 B регистр
В:Четыре 16-битных входных регистра
ВНЕ:Пять 16-битных выходных регистров

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

В формат инструкции использовал 3 бита для код операции и 12 бит для адреса. В блоке у меня было 11 инструкций: TC, CCS, ПОКАЗАТЕЛЬ, XCH, CS, TS, ОБЪЯВЛЕНИЕ, и МАСКА (базовый) и SU, Депутат, и DV (дополнительный). Первые восемь, называемые основные инструкции, напрямую обращались 3-битным оператором. код. Последние три были обозначены как инструкции extracode потому что к ним обращались, выполняя специальный тип TC инструкция (называется ПРОДЛЕВАТЬ) непосредственно перед инструкцией.

Инструкции 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, ОБЪЯВЛЕНИЕ ОДИН. Любопытным побочным эффектом было создание и использование CCS-отверстия когда было известно, что проверяемое значение никогда не было положительным, что происходило чаще, чем можно было предположить. Осталось два целых слова незанятыми, и специальный комитет отвечал за присвоение констант данных этим дырам.
ПОКАЗАТЕЛЬ
Добавьте данные, полученные по адресу, указанному в инструкции, к следующей инструкции. ПОКАЗАТЕЛЬ может использоваться для добавления или вычитания значения индекса к базовый адрес заданный операндом следующей инструкции ПОКАЗАТЕЛЬ. Этот метод используется для реализации массивов и поиска в таблицах; поскольку добавление было выполнено для обоих целых слов, оно также использовалось для изменения op. код в следующей инструкции (extracode), а в редких случаях обе функции одновременно.
ПРОДОЛЖИТЬ
Особый экземпляр ПОКАЗАТЕЛЬ (ПОКАЗАТЕЛЬ 25). Это инструкция, используемая для возврата из прерываний. Это вызывает возобновление выполнения в прерванном месте.
XCH (обмен)
Обменять содержимое памяти на содержимое регистра A. Если указанный адрес памяти находится в фиксированной (доступной только для чтения) памяти, содержимое памяти не изменяется, и эта инструкция просто загружает регистр A. Если он находится в стираемой памяти, «коррекция» переполнения достигается сохранением крайнего левого из 16 бит в A как знаковый бит в памяти, но нет исключительного поведения, подобного поведению TS.
CS (очистить и вычесть)
Загрузить регистр A одним дополнением к данным, на которые ссылается указанный адрес памяти.
TS (передать на хранение)
Сохраните регистр A по указанному адресу памяти. TS также обнаруживает и исправляет переливается таким образом, чтобы распространять перенос для сложения / вычитания с высокой точностью. Если результат не имеет переполнения (два крайних левых бита A совпадают), ничего особенного не происходит; если происходит переполнение (эти 2 бита различаются), крайний левый переходит в память как знаковый бит, регистр A изменяется на +1 или -1 соответственно, и управление переходит ко второй инструкции, следующей за TS. Когда переполнение является возможным, но ненормальным событием, TS последовал TC к логике отсутствия переполнения; когда это обычная возможность (например, при сложении / вычитании с высокой точностью), TS следует CAF НУЛЬ (CAF = XCH в фиксированную память), чтобы завершить формирование переноса (+1, 0 или -1) в следующее слово с более высокой точностью. Углы были сохранены в одинарная точность, расстояния и скорости в двойная точность, и прошедшее время с тройной точностью.
ОБЪЯВЛЕНИЕ (Добавить)
Добавьте содержимое памяти в регистр A и сохраните результат в A. 2 крайних левых бита A могут быть разными (состояние переполнения) до и / или после ОБЪЯВЛЕНИЕ. Тот факт, что переполнение является состоянием, а не событием, допускает ограниченную степень переполнения при добавлении более двух чисел, если ни одна из промежуточных сумм не превышает вдвое большую емкость слова.
МАСКА
Выполнить побитовое (логическое) и памяти с регистром A и сохранить результат в регистре A.
Депутат (умножить)
Умножьте содержимое регистра A на данные по указанному адресу памяти и сохраните произведение высокого порядка в регистре A и произведение низкого порядка в регистре LP. Части продукта согласовываются в знаке.
DV (разделять)
Разделите содержимое регистра A на данные по указанному адресу памяти. Сохраните частное в регистре A и абсолютное значение остатка в регистре Q. В отличие от современных машин, числа с фиксированной точкой обрабатывались как дроби (условная десятичная точка справа от знакового бита), поэтому вы могли производить мусор, если делитель не был больше делимого; от этой ситуации не было никакой защиты. В AGC блока II деление с двойной точностью начиналось с A и L (блок II LP), а правильно подписанный остаток доставлялся в L. Это значительно упростило подпрограмму для деления с двойной точностью.
SU (вычесть)
Вычтите (дополнение) данные по указанному адресу памяти из содержимого регистра A и сохраните результат в A.

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

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

объем памяти

Память блока 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 генерировалось каждый раз, когда в AGC загружалось 16-битное слово данных восходящей линии связи.

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

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

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

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

У 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.

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

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

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

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

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

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

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

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

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

Программное обеспечение Apollo Guidance Computer повлияло на дизайн Скайлаб, Космический шатл и первые электронные системы истребителей.[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-битный адрес имели интересные конструктивные последствия. Были использованы различные уловки, чтобы втиснуть дополнительные инструкции, такие как наличие специальных адресов памяти, которые при обращении к ним будут реализовывать определенную функцию. Например, ПОКАЗАТЕЛЬ по адресу 25 инициировал ПРОДОЛЖИТЬ инструкция вернуться из прерывания. Точно так же ПОКАЗАТЕЛЬ 17 выполнили INHINT инструкция (запретить прерывания), а ПОКАЗАТЕЛЬ 16 включили их повторно (РЕЛИНТ). Другие инструкции были реализованы путем добавления им специальной версии TC называется ПРОДЛЕВАТЬ. Адресные пространства были расширены за счет использования регистров Bank (фиксированный) и Ebank (стираемый), поэтому единственной памятью любого типа, которую можно было адресовать в любой момент времени, был текущий банк, плюс небольшой объем фиксированной-фиксированной памяти и стираемая память. Кроме того, регистр банка мог адресовать максимум 32 киловорда, поэтому для доступа к последним 4 киллордам требовался регистр Сбербанка (супербанк). Все межбанковские вызовы подпрограмм должны быть инициированы из фиксированной фиксированной памяти с помощью специальных функций для восстановления исходного банка во время возврата: по сути, система дальние указатели.

Block II AGC также имеет EDRUPT инструкция (название - сокращение от Прерывание Эда, после Эд Смелли, программист, который его запросил). Эта инструкция не генерирует прерывание, а выполняет два действия, общих для обработки прерывания. Первое действие запрещает дальнейшие прерывания (и требует ПРОДОЛЖИТЬ инструкция по включению их снова). Во втором действии ZRUPT В регистр загружается текущее значение программного счетчика (Z). Он использовался только один раз в программном обеспечении Apollo для настройки последовательности завершения цикла DAP в цифровом автопилоте лунный модуль.[26] Считается, что он отвечает за проблемы с эмуляцией LEM AGC. Световое программное обеспечение.

1202 программный будильник

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

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

Во время этой части подхода процессор обычно загружен почти на 85%. Дополнительные 6400 перехватов циклов в секунду добавили нагрузки, эквивалентной 13%, оставляя достаточно времени для выполнения всех запланированных задач до завершения. Через пять минут после начала спуска Базз Олдрин дал компьютеру команду 1668, который дал ему указание периодически вычислять и отображать ДЕЛЬТА (разницу между высотой, измеренной радаром, и вычисленной высотой).[nb 1] В 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 крестоносец чтобы продемонстрировать практичность управляемой компьютером FBW. АРУ, использовавшаяся на первом этапе программы, была заменена другой машиной на втором этапе, а исследования, проведенные в рамках программы, привели к разработке систем управления полетом для Космический шатл. AGC также привел, хотя и косвенно, к разработке проводных систем для поколения истребителей, которые разрабатывались в то время.[35]

AGC также использовался для ВМС США с Глубоководный спасательный автомобиль.[36]

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

Примечания

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

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

  1. ^ Руководство программиста, блок 2, язык ассемблера AGC, получено 2018-08-27
  2. ^ а б c Холл, Элдон К. (1996), Путешествие на Луну: история навигационного компьютера Apollo, Рестон, Вирджиния, США: 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. ^ Агл, округ Колумбия (сентябрь 1998 г.). "Полет на гасмобиле". Воздух и космос. Получено 2018-12-15.
  7. ^ "Введение Рамона Алонсо", AGC History Project (архив Caltech, исходный сайт закрыт), Массачусетский технологический институт, 27 июля 2001 г., получено 2009-08-30
  8. ^ "Интервью Рамона Алонсо (испанский)", Рамон Алонсо, аргентинский лево а ля Аполлон 11 а ля Луна, Diario La Nacion, 7 марта 2010 г.
  9. ^ "Биография Хью Блэра-Смита", AGC History Project (архив Caltech, исходный сайт закрыт), Массачусетский технологический институт, январь 2002 г., получено 2009-08-30
  10. ^ «Введение в Херб Талер», AGC History Project (архив Caltech, исходный сайт закрыт), Массачусетский технологический институт, 14 сентября 2001 г., получено 2009-08-30
  11. ^ Бутрика, Эндрю Дж. (2015). «Глава 3: Роль НАСА в производстве интегральных схем». В Дике, Стивен Дж. (Ред.). Исторические исследования влияния космических полетов на общество (PDF). НАСА. С. 149–250. ISBN  978-1-62683-027-1.
  12. ^ «Управляющий компьютер Apollo и первые кремниевые чипы». Национальный музей авиации и космонавтики. Смитсоновский институт. 14 октября 2015 г.. Получено 1 сентября 2019.
  13. ^ Пирс, С. С. (рукопись, зима 1880–1881 гг.), «Булевская алгебра с одной константой», опубликованная в 1933 г. Сборник статей v. 4, пункты 12–20. Перепечатано в 1989 г. Произведения Чарльза С. Пирса v. 4, pp. 218–21, Google [1]. См. Робертс, Дон Д. (2009), Экзистенциальные графы Чарльза С. Пирса, п. 131.
  14. ^ Вайншток, Майя (17 августа 2016 г.). "Сцена в Массачусетском технологическом институте: код Аполлона Маргарет Гамильтон". Новости MIT. Получено 2016-08-17.
  15. ^ Минделл 2008 С. 154, 157.
  16. ^ Пресс-релиз НАСА "НАСА награждает инженера Аполлона" (3 сентября 2003 г.)
  17. ^ а б c Хоаг, Дэвид (сентябрь 1976 г.). "История бортового наведения, навигации и управления Apollo" (PDF). Лаборатория Чарльза Старка Дрейпера.
  18. ^ а б Минделл 2008, п. 149.
  19. ^ «Введение Хью Блэра-Смита», AGC History Project (архив Caltech, исходный сайт закрыт), Массачусетский технологический институт, 30 ноября 2001 г., получено 2010-03-21
  20. ^ а б Харви IV, Гарри Гулд (13 октября 2015 г.). "Ее код заставил людей на Луне - и сам изобрел программное обеспечение". ПРОВОДНОЙ. Получено 2018-11-25.
  21. ^ Управление логического дизайна НАСА "О Маргарет Гамильтон" (Последняя редакция: 3 февраля 2010 г.)
  22. ^ К A.J.S. Райл «Инженеры и ученые НАСА превращают мечты в реальность»
  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, получено 2009-08-30
  28. ^ "Крислгарри / Аполлон-11". GitHub. Получено 2016-07-17.
  29. ^ Адлер, Питер (1998), Джонс, Эрик М. (редактор), "Сигнализация программы Apollo 11", Журнал лунной поверхности Аполлона-11, НАСА, получено 2009-09-01
  30. ^ Мартин, Фред Х. (июль 1994 г.), Джонс, Эрик М. (ред.), "Аполлон 11: 25 лет спустя", Журнал лунной поверхности Аполлона-11, НАСА, получено 2009-09-01
  31. ^ Кортрайт, Эдгар М., изд. (1975), "Компьютер лунного модуля", Журнал лунной поверхности Аполлона-11, НАСА, получено 2010-02-04
  32. ^ Эйлс, Дон (6 февраля 2004 г.), "Рассказы из управляющего компьютера лунного модуля", 27-я ежегодная конференция по руководству и контролю, Брекенридж, Колорадо: Американское астронавтическое общество
  33. ^ Сказки с управляющего компьютера лунного модуля
  34. ^ Витт, Стивен (24 июня 2019 г.). "Аполлон-11: Миссия вышла из-под контроля". Проводной. Сан-Франциско: публикации Condé Nast. Получено 18 сентября, 2019.
  35. ^ Томайко, Джеймс Э. (2000), «NASA SP-2000-4224 - Компьютеры в полете: история новаторского проекта НАСА по цифровому беспроводному подключению» (PDF), Серия истории НАСА, Вашингтон, округ Колумбия: НАСА, получено 2009-09-01
  36. ^ Крейвен, Джон Пина (2002). Тихая война: холодная война, битва под морем. Нью-Йорк: Саймон и Шустер. п.120. ISBN  0-684-87213-7.

Источники

внешняя ссылка

Документация по AGC и ее развитию
Документация по проектированию аппаратного обеспечения AGC и, в частности, по использованию новых интегральных схем вместо транзисторов.
Документация по работе программного обеспечения AGC
  • Delco Electronics, Apollo 15 - Руководство по программному обеспечению CSM и LEM AGC, используемому в миссии Apollo 15, включая подробные процедуры пользовательского интерфейса, объяснение многих основных алгоритмов и ограниченную информацию об оборудовании. Обратите внимание, что в этом документе более 500 страниц и размер более 150 мегабайт.
  • Стенгель, Р., Ручное управление ориентацией лунного модуля, J. Космические аппараты и ракеты, Vol. 7, № 8, август 1970 г., стр. 941–948.
  • Исходный код для кода командного модуля (Comanche054) и кода лунного модуля (Luminary099) в виде текста.
  • Полный исходный код GitHub Оригинальный исходный код управляющего компьютера Apollo 11 (AGC) для командного и лунного модулей.
Некоторые проекты и симуляторы на базе AGC

Истории функций