Четверг, 4 августа 1988 года. На мысе Канаверал царит обычная суета: на стартовом комплексе 39В к космическому полету готовится миссия STS-26, в которую должен отправиться шаттл «Дискавери». В тот день работники космодрома и члены обеспечивающей запуск команды казались взволнованными чуть больше обычного: это был первый полет челнока после трагической катастрофы «Челленджера», в которой погибли 7 астронавтов. Начался предстартовый отсчет. Напряжение растет. Всего за несколько секунд до запуска бортовой компьютер шаттла останавливает тестирование двигателя «Дискавери» и прерывает предстартовую процедуру. Компьютерные датчики челнока определили, что один из клапанов в двигателе закрывается недостаточно быстро, и послали команду о неисправности этого компонента всем трем силовым установкам, отменив старт корабля. Новое программное обеспечение бортового компьютера, новое оборудование и сложная предстартовая процедура проверки всех систем стали частью усилий НАСА по обеспечению безопасности «Дискавери» после взрыва «Челленджера» в 1986 году. Американские челноки до появления советского «Бурана» и без того обладали самыми мощными электронными вычислительными системами среди космических аппаратов своего времени, но трагедия «Челленджера» заставила усовершенствовать и модифицировать их.


▍ Компьютеры шаттла


Американская программа Space Shuttle стартовала в 1969 году, а строительство первого прототипа челнока — аппарата «Энтерпрайз» — началось в 1974-м. В конструкции шаттлов применялись отдельные элементы, хорошо зарекомендовавшие себя в ходе пилотируемой лунной программы «Аполлон», однако сам орбитальный корабль получился настолько сложным и инновационным, что для управления всеми его системами требовалась не менее сложная и современная электроника. Поэтому НАСА выбрала в качестве разработчика компьютерных систем для шаттлов надежного и проверенного подрядчика — корпорацию IBM.

В американских челноках применялась так называемая система Fly-By-Wire: связь между элементами управления атмосферным полетом в кабине корабля, такими как ручка (это не совсем «сайд-стик» — в отличие от систем, применяемых, например, в Airbus, ручка управления находилась не сбоку, а на специальной консоли по центру, между ногами пилота), педалями, перемещающими руль направления, и гидроприводами рулевых поверхностей осуществлялась через компьютер.

Иными словами, система управления кораблем была полностью цифровой и электродистанционной. Отдельный компьютер заведовал жизнеобеспечением челнока, контролировал уровень топлива, состав и давление атмосферы в обитаемых отсеках. Маршевые двигатели и двигатели ориентации также управлялись компьютером. Наконец, электроника отвечала за навигацию и пространственную ориентацию шаттла: здесь использовались технологии, уже многократно испытанные в ходе программ «Аполлон» и Gemini.


Кабина шаттла

Однако поскольку шаттлы с самого начала создавались для выполнения самых разных миссий, с разной полезной нагрузкой, стартовой и посадочной массой, на разных орбитах, с разным составом экипажа и разной продолжительностью полёта, программное обеспечение для реализации всех этих задач получалось очень непростым.

Высокие требования предъявлялись и к «железу»: для безотказной работы в космических условиях все компьютеры челнока должны быть защищены от сбоев за счет дублирования и резервирования. Эти факторы в совокупности привели к тому, что разработчики создали для Space Shuttle один из самых сложных программно-аппаратных комплексов своего времени, который многократно превосходил по своей мощности некоторые наземные вычислительные центры конца 60-х.

Еще на стадии проектирования стало ясно, что челноки получаются очень дорогим удовольствием, поэтому в НАСА решили пойти иным путем по сравнению со своим предыдущим опытом. Если компьютерные системы для программ Gemini и «Аполлон» разрабатывались индивидуально и под заказ, то в шаттлах впервые в космической промышленности стали применять стандартную технику.

В качестве основного бортового компьютера было решено использовать модифицированную ЭВМ IBM AP-1, которая успешно использовалась в серийных истребителях F-15, бомбардировщиках B-52 и B-1: «космическая» версия этого аппарата получила обозначение AP-101.


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


Модуль памяти на магнитных сердечниках

Ферритовая память челнока была организована в виде модулей, позволявших хранить 18-битные полуслова. Они содержат по 16 бит данных, бит четности и бит защиты памяти для предотвращения непреднамеренного изменения данных. К первому полету шаттла память его вычислительной системы имела объем 106 496 полных слов по 32 бита. Время доступа к памяти составляло 400 наносекунд, что довольно быстро для компьютеров того времени. Одно из самых главных требований НАСА заключалось в том, что объем памяти на челноке должен быть достаточно большим, чтобы вместить не только ПО для обеспечения полета, но и все программы для длительной миссии. Только базовый код, необходимый для обеспечения работы шаттла в космосе, занимал более 700 Кбайт, поэтому помимо встроенной памяти AP-101 на корабле были смонтированы дополнительные модули, а не умещающийся в них софт можно было при необходимости загрузить с магнитной ленты.

Изначально в архитектуре IBM AP-101 присутствовала и полупроводниковая регистровая память небольшого объема — она использовалась для кеширования обрабатываемых компьютером команд, которые не требовалось передавать для хранения в основную энергонезависимую память. Со временем компьютеры AP-101 претерпевали модификации, и доступный объем энергонезависимой памяти постепенно возрастал.

Память бортового компьютера шаттла может быть перезаписана в ходе полета. С Земли можно передать по входящему радиоканалу пакеты, состоящие из 64 16-битных полуслов за раз, и содержимое этих пакетов может заменить данные, уже хранящиеся по указанным адресам. Экипаж также может изменять до шести 32-битных слов за один прием с помощью клавиатуры, однако эти изменения необходимо вводить вручную в шестнадцатеричном формате.


Программирование бортового компьютера шаттла — трудоемкая задача

Всего в каждом челноке было установлено 5 ЭВМ AP-101 в качестве компьютеров общего назначения. Один компьютер отвечал за управление полетом, второй — заведовал обеспечением жизнедеятельности, обсчитывал навигацию и обрабатывал данные. Параллельно с ними трудились два других компьютера IBM AP-101, полностью дублирующих функции первой пары на случай отказа. Пятая ЭВМ была резервной и действовала независимо. Если из строя выходил один из пяти компьютеров, миссия могла продолжаться, но если ломались сразу два, полет прерывался и шаттл возвращался на Землю.

Компьютеры в вычислительной системе челноков были соединены шинами, данные в которых передавались с разделением по времени. Такие же шины использовались для передачи информации от наземных компьютеров на корабль и обратно, когда шаттл стоял на стартовом столе. Здесь на помощь компьютерщикам из НАСА пришли гражданские инженеры: шины с большой пропускной способностью в начале 70-х уже применялись на пассажирских лайнерах, которые с каждым годом становились все более сложными и зависимыми от электроники.

▍ Софт


Софт для американской лунной программы полностью писался на Ассемблере: этот язык позволял создавать очень компактные программы и одновременно давал возможность взаимодействовать с регистрами памяти, процессором и прочим «железом» напрямую. Однако разработка, отладка и тестирование ассемблерного кода стоили очень дорого и занимали чрезвычайно много времени: еще в ходе реализации программы «Аполлон» в НАСА столкнулись с задержками в подготовке необходимого ПО для своих космических кораблей.

Софт для шаттлов получался намного более сложным и объемным, но при этом он должен быть гибким и легко модифицируемым. Возникла необходимость в создании нового языка программирования высокого уровня: одновременно простого и лаконичного, чтобы сократить затраты на переучивание персонала, подходящего для архитектуры 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 года, возможно, предотвратив еще одну крупную катастрофу в истории мировой космонавтики.


Шаттл «Дискавери»

Миссия STS-26 успешно стартовала 29 сентября 1988 года, корабль провел на орбите 4 дня и благополучно приземлился на авиабазе Эдвардс в Калифорнии. Всего шаттлы совершили 135 полетов, 2 из которых закончились катастрофой, больше всего миссий — 39 — совершил челнок «Дискавери». Последний запуск челнока состоялся 8 июля 2011 года — эта миссия «Атлантиса» завершила многолетнюю историю программы Space Shuttle. И все полеты этих кораблей обеспечивали бортовые компьютеры AP-101, спроектированные компанией IBM еще в начале 70-х годов прошлого века — машины, надёжности которых могут позавидовать многие современные электронные устройства.
Конкурс статей от RUVDS.COM. Три денежные номинации. Главный приз — 100 000 рублей.

Комментарии (18)


  1. andy_p
    09.09.2022 13:55
    +6

    Забавно, что на станции "Мир" компьютер тоже имел систему команд как подмножество команд IBM360. Теперь я начинаю понимать, почему.


    1. Holmogorov Автор
      09.09.2022 14:37

      Да, действительно, интересный факт!


  1. AlexNixon
    09.09.2022 15:02
    +4

    Спасибо за интересную статью.

    В самолетах тоже не слишком часто и охотно апгрейдят компьютеры, насколько я знаю. А оно и не нужно - задача у Боинга-737 как была 50 лет назад, так и сейчас остается одинаковая, и самолет тоже практически один и тот же.


    1. Holmogorov Автор
      09.09.2022 15:15
      +5

      Ну, я бы так не сказал: 737 - это целое семейство лайнеров. Отличий между 737 Classic и 737 New Generation (не говоря уже про MAX) поболее, чем между "Боингом" и "Ту-154". Авионику в разных модификациях стремятся унифицировать по той же самой причине - экономия, в данном случае - на переучивании экипажей. Ввод в строй пилота на новом типе или модификации - это весьма не дешевое удовольствие.


    1. Tarakanator
      09.09.2022 15:23
      +2

      вот только состав экипажа меняется. Если количество людей снижается, значит уровень автоматизации растёт. Значит задачи электроники меняются.


      1. Holmogorov Автор
        09.09.2022 15:31

        В 737-й серии изначально был двухчленный экипаж - КВС и "правак" (2-й пилот). Усиленный трехчленный экипаж (2 КВС + 2-й пилот) использовался только на длинных рейсах, где требовалась замена одного из пилотирующих членов кабинного экипажа в полёте. А, ну и проверяющие-инструкторы еще. И вывозные полеты при вводе в строй, или "покатушки" на новые аэродромы.


        1. Tarakanator
          09.09.2022 15:53

          Удивительно... оказывается двухчленный экипаж был уже на первой версии.


  1. siberiano
    09.09.2022 16:37

    Читаю в Википедии описание STS-26 (https://en.wikipedia.org/wiki/STS-26), там ничего про 4 августа 1988 не упоминается вообще. Только про отложенный на 40 минут старт. Не ошиблись в датах и номерах?


    1. Holmogorov Автор
      09.09.2022 16:53
      +2

      Вот заметка про этот инцидент. Вот в этой газете от апреля 1988 на стр. 3 (заметка Latest on the Space Shuttle) Джеймс Харрингтон, зам руководителя программы шаттлов Космического Центра Кеннеди, говорит, что не ожидает проблем с пуском "Дискавери", запланированным на 4 августа. Но проблемы таки случились. Старт в сентябре вроде бы был отложен по погодным условиям (ветер).


      1. siberiano
        10.09.2022 18:00

        ясно, спасибо!


    1. Holmogorov Автор
      09.09.2022 18:30

      Ну и вообще, отмены и переносы пусков челноков были довольно-таки обычным делом. Наверное, проще вспомнить миссии, запуски которых не откладывались и не переносились, чем наоборот.


  1. a2v86
    10.09.2022 08:10
    +1

    У нас препод по джаве и ооп рассказывала что когда еще работала в европейском космическом агентстве , в 90х они работали над разработокой ПО для метео спутника, так вот , писали на Джаве , выбор пал из за защищённости языка : байт код верификация,нет прямого доступа к памяти т.д.

    А еще лично люблю читать статьи про несанкционированные подключения к спутникам что тоже советую почитать: старлинков, метео спутников и т.д

    Статья понравилась.


  1. triplebanana
    10.09.2022 11:02
    +2

    Кстати, а где можно почитать про бортовой компьютер МИРа? Если со всеми схемотехническими подробностями - то было бы вообще здорово.


  1. jok40
    11.09.2022 15:56

    В статье приведена картинка платы памяти на ферритовых колечках объёмом 4096 бит. Чтобы из таких плат набрать

    106 496 полных слов по 32 бита
    потребуется 106496*32/4096=832 таких плат. Шаттл возил с собой такую кучу плат? Правда что-ли?


    1. Holmogorov Автор
      11.09.2022 18:26

      Подскажите пожалуйста, а где конкретно в статье сказано, что плата с картинки - именно с шаттла? Спасибо!


      1. jok40
        11.09.2022 22:45

        Нигде не сказано. Но если в статье пишется о том, что использовалась память на ферритовых кольцах и тут же приводится фото, то это подразумевается по умолчанию. Уточнять надо, в таком случае, что, мол, фотка от подобной памяти, но не такой, какая использовалась на самом деле. Вопрос, кстати, остаётся открытым — так какая использовалась на самом деле? Если и впрямь на колечках, то тут как ни крути, как ни верти должна быть плата (или куча плат) с 106496*32=3407872 колечек (минимум).


        1. Holmogorov Автор
          12.09.2022 06:33

          Исправляюсь: уважаемый jok40, это фотка от подобной памяти, но не такой, какая использовалась на самом деле. Да, использовалась куча плат, даже устанавливались дополнительные "бутерброды", соединенные шинами с АР-101:

          <quote>на корабле были смонтированы дополнительные модули, а не умещающийся в них софт можно было при необходимости загрузить с магнитной ленты. </quote>


  1. victor_1212
    11.09.2022 21:26
    +3

    > Всего в каждом челноке было установлено 5 ЭВМ AP-101 в качестве компьютеров общего назначения. Один компьютер отвечал за управление полетом, второй — заведовал обеспечением жизнедеятельности, обсчитывал навигацию и обрабатывал данные. Параллельно с ними трудились два других компьютера IBM AP-101, полностью дублирующих функции первой пары на случай отказа.

    небольшое дополнение - насколько знаю эта конфигурация относится к предложениям около 1970 года, т.е. около 10 лет до первого полета, в дальнейшем было сделано немного иначе:

    1. четыре IBM AP-101 работали под управлением Primary Avionics Software System (PASS), пятая резервная под управлением Backup Flight System - совсем другая OS и очень ограниченная функциональность, типа несколько вариантов прерывания последовательности выведения на орбиту, и управление спуском с орбиты,

    2. PASS использует собственную OS - Flight Computer Operating System (FCOS), со своим UI, и applications обеспечивающие выведение и спуск с орбиты, навигацию, управление полезным грузом и пр., разные фазы полета требовали перезагрузки applications с накопителя (MMU) в соответствии с фазами подготовки и полета - operational sequence (OPS1, OPS2 и т.д см картинку ниже), данные о состоянии системы сохранялись резидентными,

    3. FCOS использовала два разных рабочих цикла 40ms и 960ms, и управление приоритетами процессов, у каждого режима работы свой отдельный scheduler,

    4. защита от возможных сбоев на критичных режимах достигалась синхронной работой всех 4 AP-101, причем синхронизация состояния cpu и результатов делалась при каждом i/o и переключении процессов, шины синхронизации cpu были 3х битовые, накладные расходы при этом были на уровне всего 5% времени cpu, т.к. дополнительно результаты i/o сравнивались непосредственно на исполнительных устройствах, каждое из которых имело 4 интерфейса с голосованием, в некритичных режимах можно было менять конфигурацию типа 2+1+1 под разные задачи например связанные с полезной нагрузкой,

    5. программы были отработаны в реальном времени на аппаратуре модифицированного F-8 (Crusader), и наземных комплексах, Draper Lab (=MIT Instrumentation Lab, разработчик навигации для Apollo) на ранних этапах отвечала за методологию программирования, тестирования и сертификации, за implementation отвечали IBM, и Rockwell, HAL/S cross compiler для IBM 370 написала Intermetrics (проект получивший развитие)