![](https://habrastorage.org/webt/ca/x6/jm/cax6jmofrp_kkfdrzwvyatgi3fw.jpeg)
Четверг, 4 августа 1988 года. На мысе Канаверал царит обычная суета: на стартовом комплексе 39В к космическому полету готовится миссия STS-26, в которую должен отправиться шаттл «Дискавери». В тот день работники космодрома и члены обеспечивающей запуск команды казались взволнованными чуть больше обычного: это был первый полет челнока после трагической катастрофы «Челленджера», в которой погибли 7 астронавтов. Начался предстартовый отсчет. Напряжение растет. Всего за несколько секунд до запуска бортовой компьютер шаттла останавливает тестирование двигателя «Дискавери» и прерывает предстартовую процедуру. Компьютерные датчики челнока определили, что один из клапанов в двигателе закрывается недостаточно быстро, и послали команду о неисправности этого компонента всем трем силовым установкам, отменив старт корабля. Новое программное обеспечение бортового компьютера, новое оборудование и сложная предстартовая процедура проверки всех систем стали частью усилий НАСА по обеспечению безопасности «Дискавери» после взрыва «Челленджера» в 1986 году. Американские челноки до появления советского «Бурана» и без того обладали самыми мощными электронными вычислительными системами среди космических аппаратов своего времени, но трагедия «Челленджера» заставила усовершенствовать и модифицировать их.
▍ Компьютеры шаттла
Американская программа Space Shuttle стартовала в 1969 году, а строительство первого прототипа челнока — аппарата «Энтерпрайз» — началось в 1974-м. В конструкции шаттлов применялись отдельные элементы, хорошо зарекомендовавшие себя в ходе пилотируемой лунной программы «Аполлон», однако сам орбитальный корабль получился настолько сложным и инновационным, что для управления всеми его системами требовалась не менее сложная и современная электроника. Поэтому НАСА выбрала в качестве разработчика компьютерных систем для шаттлов надежного и проверенного подрядчика — корпорацию IBM.
В американских челноках применялась так называемая система Fly-By-Wire: связь между элементами управления атмосферным полетом в кабине корабля, такими как ручка (это не совсем «сайд-стик» — в отличие от систем, применяемых, например, в Airbus, ручка управления находилась не сбоку, а на специальной консоли по центру, между ногами пилота), педалями, перемещающими руль направления, и гидроприводами рулевых поверхностей осуществлялась через компьютер.
Иными словами, система управления кораблем была полностью цифровой и электродистанционной. Отдельный компьютер заведовал жизнеобеспечением челнока, контролировал уровень топлива, состав и давление атмосферы в обитаемых отсеках. Маршевые двигатели и двигатели ориентации также управлялись компьютером. Наконец, электроника отвечала за навигацию и пространственную ориентацию шаттла: здесь использовались технологии, уже многократно испытанные в ходе программ «Аполлон» и Gemini.
![](https://habrastorage.org/webt/ai/et/aa/aietaau3abcf2xxyjdjipivq1b4.jpeg)
Кабина шаттла
Однако поскольку шаттлы с самого начала создавались для выполнения самых разных миссий, с разной полезной нагрузкой, стартовой и посадочной массой, на разных орбитах, с разным составом экипажа и разной продолжительностью полёта, программное обеспечение для реализации всех этих задач получалось очень непростым.
Высокие требования предъявлялись и к «железу»: для безотказной работы в космических условиях все компьютеры челнока должны быть защищены от сбоев за счет дублирования и резервирования. Эти факторы в совокупности привели к тому, что разработчики создали для Space Shuttle один из самых сложных программно-аппаратных комплексов своего времени, который многократно превосходил по своей мощности некоторые наземные вычислительные центры конца 60-х.
Еще на стадии проектирования стало ясно, что челноки получаются очень дорогим удовольствием, поэтому в НАСА решили пойти иным путем по сравнению со своим предыдущим опытом. Если компьютерные системы для программ Gemini и «Аполлон» разрабатывались индивидуально и под заказ, то в шаттлах впервые в космической промышленности стали применять стандартную технику.
В качестве основного бортового компьютера было решено использовать модифицированную ЭВМ IBM AP-1, которая успешно использовалась в серийных истребителях F-15, бомбардировщиках B-52 и B-1: «космическая» версия этого аппарата получила обозначение AP-101.
![](https://habrastorage.org/webt/3k/7s/az/3k7sazfouokpad3tecnklaj8fpk.jpeg)
AP-101
Использование уже разработанного и запущенного в серийное производство компьютера значительно упрощало и удешевляло сертификацию вычислительной системы шаттлов. На выбор именно этой машины повлияло и то обстоятельство, что ЭВМ той же серии уже использовались ранее на американской космической станции Skylab. Это означало, что НАСА не придется переучивать программистов, уже знакомых с авиационными и космическими компьютерами производства IBM — правда, в целях разработки гибкого ПО для шаттлов все равно пришлось изобретать новый язык программирования. Как минимум, операционную систему и код можно было писать и отлаживать на использовавших ту же систему команд мейнфреймах IBM 360, что опять же удешевляло процесс. В общем, главным словом в производстве компьютерного оснащения для программы Space Shuttle стала «экономия».
▍ Хард
IBM AP-101 был прямым потомком более ранней серии машин IBM System/4 Pi, использовавшихся в качестве бортового компьютера на множестве американских военных самолетов и на орбитальной станции Skylab. Проектирование этой ЭВМ началось в 1965 году, а в серийное производство она отправилась в 1967-м. Компьютер использовал набор инструкций от мэйнфрейма IBM System/360 и был способен обрабатывать 480 000 инструкций в секунду (0,48 MIPS). Компьютер использовал память на магнитных сердечниках, которая считалась более надежной в силу своей энергонезависимости, а также в те времена обеспечивала более высокую скорость загрузки операционной системы и программ. На полупроводниковую она была полностью заменена только в начале 90-х.
![](https://habrastorage.org/webt/sw/hj/q8/swhjq8xaswm6ortflbxlnzh2eym.jpeg)
Модуль памяти на магнитных сердечниках
Ферритовая память челнока была организована в виде модулей, позволявших хранить 18-битные полуслова. Они содержат по 16 бит данных, бит четности и бит защиты памяти для предотвращения непреднамеренного изменения данных. К первому полету шаттла память его вычислительной системы имела объем 106 496 полных слов по 32 бита. Время доступа к памяти составляло 400 наносекунд, что довольно быстро для компьютеров того времени. Одно из самых главных требований НАСА заключалось в том, что объем памяти на челноке должен быть достаточно большим, чтобы вместить не только ПО для обеспечения полета, но и все программы для длительной миссии. Только базовый код, необходимый для обеспечения работы шаттла в космосе, занимал более 700 Кбайт, поэтому помимо встроенной памяти AP-101 на корабле были смонтированы дополнительные модули, а не умещающийся в них софт можно было при необходимости загрузить с магнитной ленты.
Изначально в архитектуре IBM AP-101 присутствовала и полупроводниковая регистровая память небольшого объема — она использовалась для кеширования обрабатываемых компьютером команд, которые не требовалось передавать для хранения в основную энергонезависимую память. Со временем компьютеры AP-101 претерпевали модификации, и доступный объем энергонезависимой памяти постепенно возрастал.
Память бортового компьютера шаттла может быть перезаписана в ходе полета. С Земли можно передать по входящему радиоканалу пакеты, состоящие из 64 16-битных полуслов за раз, и содержимое этих пакетов может заменить данные, уже хранящиеся по указанным адресам. Экипаж также может изменять до шести 32-битных слов за один прием с помощью клавиатуры, однако эти изменения необходимо вводить вручную в шестнадцатеричном формате.
![](https://habrastorage.org/webt/xy/dm/mq/xydmmqmebmrc6ugezpnz1zk530i.jpeg)
Программирование бортового компьютера шаттла — трудоемкая задача
Всего в каждом челноке было установлено 5 ЭВМ AP-101 в качестве компьютеров общего назначения. Один компьютер отвечал за управление полетом, второй — заведовал обеспечением жизнедеятельности, обсчитывал навигацию и обрабатывал данные. Параллельно с ними трудились два других компьютера IBM AP-101, полностью дублирующих функции первой пары на случай отказа. Пятая ЭВМ была резервной и действовала независимо. Если из строя выходил один из пяти компьютеров, миссия могла продолжаться, но если ломались сразу два, полет прерывался и шаттл возвращался на Землю.
Компьютеры в вычислительной системе челноков были соединены шинами, данные в которых передавались с разделением по времени. Такие же шины использовались для передачи информации от наземных компьютеров на корабль и обратно, когда шаттл стоял на стартовом столе. Здесь на помощь компьютерщикам из НАСА пришли гражданские инженеры: шины с большой пропускной способностью в начале 70-х уже применялись на пассажирских лайнерах, которые с каждым годом становились все более сложными и зависимыми от электроники.
▍ Софт
![](https://habrastorage.org/webt/pu/dr/7i/pudr7ivptde68g0ephrsrkbbji4.png)
Софт для американской лунной программы полностью писался на Ассемблере: этот язык позволял создавать очень компактные программы и одновременно давал возможность взаимодействовать с регистрами памяти, процессором и прочим «железом» напрямую. Однако разработка, отладка и тестирование ассемблерного кода стоили очень дорого и занимали чрезвычайно много времени: еще в ходе реализации программы «Аполлон» в НАСА столкнулись с задержками в подготовке необходимого ПО для своих космических кораблей.
Софт для шаттлов получался намного более сложным и объемным, но при этом он должен быть гибким и легко модифицируемым. Возникла необходимость в создании нового языка программирования высокого уровня: одновременно простого и лаконичного, чтобы сократить затраты на переучивание персонала, подходящего для архитектуры AP-101, и столь же мощного, как Ассемблер.
Им стал специально разработанный НАСА язык HAL/S (High-order Assembly Language/Shuttle) — язык программирования для управления авионикой, который использовало только само аэрокосмическое агентство и ассоциированные с ним компании. Более 85% программного кода Space Shuttle написано на HAL/S, все остальное, а именно, операционная система и микропрограммы, взаимодействующие непосредственно с «железом» — на Ассемблере.
Сам HAL/S написан на XPL, диалекте разработанного IBM языка PL/I (Programming Language One). Язык разрабатывался в первую очередь для программирования бортовых компьютеров шаттлов, но он достаточно универсален, чтобы использоваться и для других прикладных задач. HAL/S — это язык свободной формы: операторы могут начинаться в любом месте строки и могут распространяться на следующие строки, а при необходимости несколько операторов можно размещать подряд. Однако символы в первом столбце каждой строки программы могут иметь особое значение. Например, буква «C» перед оператором указывает на то, что вся строка является комментарием и компилятор должен ее игнорировать.
Синтаксис языка достаточно простой, чтобы его могли изучить и использовать даже не самые высокопрофессиональные программисты. Каждая программа начинается с нотации «PROGRAM», перед которой следует ее название, завершается оператором «CLOSE», переменные объявляются при помощи оператора «DECLARE». При этом все такие объявления должны следовать перед основным кодом программы. Строки заканчиваются точкой с запятой. Вот так, например, выглядит программа на языке HAL/S, которая вычисляет площадь круга по введенному пользователем радиусу R:
SIMPLE: PROGRAM;
C THIS CODE IS
C HAL/S SOURCE
DECLARE PI CONSTANT (3.14159266);
DECLARE R SCALAR;
READ(5) R;
WRITE(6) PI R**2;
CLOSE SIMPLE;
HAL/S
поддерживал векторную арифметику, и позволял автоматически планировать выполнение задач в зависимости от заданного программистом приоритета. Ни один другой язык начала 1970-х годов адекватно не обеспечивал ни одну из этих возможностей. Однако внедрение нового стандарта поначалу встретило жесткое сопротивление со стороны программистов НАСА: они считали, что ни один язык высокого уровня не способен сравниться по своим возможностям с Ассемблером, и не даст такой же свободы в плане взаимодействия с «железом». Руководители же космической программы полагали, что скорость разработки софта для новых миссий шаттлов — гораздо важнее.
Чтобы погасить разгоравшийся конфликт, тогдашний руководитель отдела программного обеспечения для космических аппаратов Ричард Партен провел натурный эксперимент. Он попросил IBM выбрать лучших программистов на Ассемблере для написания набора тестовых программ, а затем те же программы с тем же набором функций были написаны на HAL/S. Время выполнения этих программ на компьютере IBM AP-101, который должен был стать основой вычислительной системы шаттла, было почти одинаковым и отличалось всего лишь на 10-15%. А вот соревнование по скорости их создания выиграли программисты на HAL/S, причем с большим отрывом. Таким образом, окончательное решение было принято, и HAL/S надолго стал основным средством разработки кода для космической программы США.
▍ Назад в будущее
Удивительно, но факт: ЭВМ AP-101 дожили до самых последних миссий шаттлов, состоявшихся в 2011 году — они исправно работали, были сертифицированы НАСА, а проектирование новых бортовых компьютеров потребовало бы неоправданно высоких затрат.Основной модификацией электроники шаттлов в 80-х годах стало появление «стеклянной кабины»: на смену аналоговым приборам-«будильникам» пришли цифровые дисплеи, как на современных «Боингах» и «Айрбасах». Но электронная «начинка» в челноке осталась той же самой, родом из 70-х: разве что в начале 90-х годов память на ферритовых сердечниках заменили полупроводниковыми микросхемами — в основном из-за возросшего объема программ.
После катастрофы «Челленджера» разработчики стали уделять особое внимание вопросам безопасности. Софт челноков был модифицирован, а в конструкцию корабля добавили множество новых цифровых датчиков, отслеживающих состояние различных элементов конструкции. В результате бортовая вычислительная система шаттлов стала самым мощным самотестирующимся аппаратно-программным комплексом в мире на тот момент. Благодаря этой модификации бортовой компьютер научился автоматически выявлять 95% сбоев в оборудовании и узлах корабля, а оставшиеся 5% покрывались избыточным резервированием. Именно эта обновленная система остановила запуск «Дискавери» 4 августа 1988 года, возможно, предотвратив еще одну крупную катастрофу в истории мировой космонавтики.
![](https://habrastorage.org/webt/zr/xd/py/zrxdpyeymm8pnaor-pxnigbxzyy.jpeg)
Шаттл «Дискавери»
Миссия STS-26 успешно стартовала 29 сентября 1988 года, корабль провел на орбите 4 дня и благополучно приземлился на авиабазе Эдвардс в Калифорнии. Всего шаттлы совершили 135 полетов, 2 из которых закончились катастрофой, больше всего миссий — 39 — совершил челнок «Дискавери». Последний запуск челнока состоялся 8 июля 2011 года — эта миссия «Атлантиса» завершила многолетнюю историю программы Space Shuttle. И все полеты этих кораблей обеспечивали бортовые компьютеры AP-101, спроектированные компанией IBM еще в начале 70-х годов прошлого века — машины, надёжности которых могут позавидовать многие современные электронные устройства.
Конкурс статей от RUVDS.COM. Три денежные номинации. Главный приз — 100 000 рублей.
![](https://habrastorage.org/webt/sz/7j/pf/sz7jpfj8i1pa6ocj-eia09dev4q.png)