Jump to content

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

Компьютер управления Аполлоном
Компьютер управления Apollo и DSKY
Изобретён Лаборатория Чарльза Старка Дрейпера
Производитель Рейтеон
Представлено август 1966 года ; 58 лет назад ( 1966-08 )
Снято с производства июль 1975 г .; 49 лет назад ( 1975-07 )
Тип
Процессор Дискретные кремниевые интегральные схемы (ИС) ( на основе RTL )
Частота 2,048 МГц
Память
Порты DSKY, IMU, ручной контроллер, радар встречи (CM), радар посадки (LM), приемник телеметрии, команда управления двигателем, система управления реакцией
Потребляемая мощность 55 Вт [2] : 120 
Язык Язык ассемблера АРУ
Масса 70 фунтов (32 кг)
Размеры 24 дюйма × 12,5 дюйма × 6,5 дюйма (61 см × 32 см × 17 см)

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

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

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

Операция

[ редактировать ]

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

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

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

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

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

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

Логическое оборудование

[ редактировать ]

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

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

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

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

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

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

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

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

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

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

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

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

[ редактировать ]

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

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

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

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

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

  • S : 12-битный регистр адреса памяти, нижняя часть адреса памяти.
  • Bank/Fbank : 4-битный банковский регистр ПЗУ, для выбора банка ПЗУ емкостью 1 килослов при адресации в фиксированно-переключаемом режиме.
  • Ebank : 3-битный регистр банка ОЗУ, для выбора банка ОЗУ на 256 слов при адресации в стираемо-переключаемом режиме.
  • Sbank (супербанк): 1-битное расширение Fbank, необходимое, поскольку последние 4 килослов 36-килословного ПЗУ недоступны с использованием только Fbank.
  • SQ : 4-битный регистр последовательности; текущая инструкция
  • G : 16-битный буферный регистр памяти для хранения слов данных, перемещающихся в память и из памяти.
  • X : вход «x» в сумматор (сумматор использовался для выполнения всех арифметических операций с дополнением до 1 ) или приращение счетчика программы ( Z ) регистр
  • Y : Другой («y») вход сумматора.
  • U : На самом деле это не регистр, а результат сумматора ( дополнительная сумма содержимого регистров X и Y ).
  • B : Регистр буфера общего назначения, также используемый для предварительной выборки следующей инструкции. В начале следующей инструкции старшие биты B (содержащие следующий код операции) копировались в SQ копировались в S. , а младшие биты (адрес )
  • C : Не отдельный регистр, а дополнение к B. регистру
  • IN : четыре 16-битных входных регистра.
  • OUT : пять 16-битных выходных регистров.

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

[ редактировать ]

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

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

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

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

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

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

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

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

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

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

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

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

[ редактировать ]

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

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

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

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

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

[ редактировать ]

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

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

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

Шины данных

[ редактировать ]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[ редактировать ]

В 2003 году Рон Берки предпринял попытку восстановить исходный код, на котором работал AGC, и создать эмулятор, способный его запускать, VirtualAGC. [40] [41] Часть большого количества исходного кода, спасенного в результате этих усилий, была загружена бывшим НАСА стажером на GitHub 7 июля 2016 года, что привлекло значительное внимание средств массовой информации. [42] [43] Исходный исходный код компьютера управления Аполлоном-11 был впервые доступен в 2003 году. [44] Проектом Virtual AGC и Музеем Массачусетского технологического института . [45] Он был расшифрован и оцифрован из оригинальных распечаток исходного кода, сделанных в 60-х годах. В середине 2016 года бывший стажер НАСА Крис Гарри загрузил исходный код AGC на GitHub . [46] [47]

См. также

[ редактировать ]

Примечания

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

Источники

[ редактировать ]
[ редактировать ]
Документация по AGC и ее развитию
Документация по проектированию аппаратного обеспечения АРУ и, в частности, по использованию новых интегральных схем вместо транзисторов.
Документация по работе программного обеспечения AGC
  • Delco Electronics, Apollo 15 — Руководство по программному обеспечению CSM и LEM AGC, используемому в миссии Apollo 15, включая подробные процедуры пользовательского интерфейса, объяснение многих основных алгоритмов и ограниченную информацию об оборудовании. Обратите внимание, что этот документ содержит более 500 страниц и имеет размер более 150 мегабайт.
  • Исходный код кода командного модуля (Comanche054) и кода лунного модуля (Luminary099) в виде текста.
  • Полный исходный код GitHub Оригинальный исходный код управляющего компьютера Аполлона-11 (AGC) для командного и лунного модулей.
Некоторые проекты и симуляторы на базе AGC

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: bd5bb0272b7d41df6ff601d1be3a6f5b__1722581820
URL1:https://arc.ask3.ru/arc/aa/bd/5b/bd5bb0272b7d41df6ff601d1be3a6f5b.html
Заголовок, (Title) документа по адресу, URL1:
Apollo Guidance Computer - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)