Космічна помилка: 370.000.000 $ за Integer overflow

Пуск.
37 секунд польоту… бабах!
10 років і 7 мільярдів доларів, витрачених на розробку.
Чотири півторатонних супутника начучной програми Cluster (вивчення взаємодії сонячного випромінювання з магнітним полем Землі) і ракета-носій Ariane 5 перетворилися в «конфетті» 4 червня 1996 року.
А провину звалили на програмістів.



Попередня модель — ракета Ariane 4 — успішно запускалася більше 100 разів. Що пішло не так?

Щоб штурмувати небо, потрібно добре знати мову Пекла.

imageДосьє
Ariane 5 («Аріан-5») — європейська одноразова ракета-носій, що входить в сімейство Ariane (перший запуск відбувся в 1979 р.). Використовується для виведення на навколоземну орбіту середніх або важких космічних апаратів, може одночасно запускати два-три супутника і попутно до восьми мікросупутників.

Історія проекту
Створена у 1984-1995 рр… Європейським космічним агентством (ЄКА; ESA), основний розробник — Національний центр космічних досліджень Франції (CNES). Учасниками програми є 10 європейських країн, вартість проекту — 7 млрд доларів США (46,2% — внесок Франції).

У створенні ракети брали участь близько тисячі промислових фірм. Основний підрядник — європейська компанія Airbus Defence and Space («Ербас дифенз енд спейс»; підрозділ Airbus Group, «Ербас груп», Париж). Маркетингом Ariane 5 на ринку космічних послуг займається французька компанія Arianespace («Арианспейс»; Еврі), з якої ЄКА підписав 25 листопада 1997 р. відповідну угоду.

Характеристики
Ariane 5 являє собою двоступеневу ракету-носій важкого класу. Довжина — 52-53 м, максимальний діаметр — 5,4 м, стартова маса — 775-780 т (залежно від конфігурації).

Перша ступінь оснащена рідинним ракетним двигуном Vulcain 2 («Вулкан-2»; у перших трьох модифікаціях ракети використовувався Vulcain), друга — HM7B (для версії Ariane 5 ECA) або Aestus («Аэстус»; для Ariane 5 ES). Vulcain 2 і HM7B працюють на суміші водню і кисню, виробляються французькою компанією Snecma («Снекма»; входить в групу Safran, «Сафран», Париж).

У Aestus використовується долгохранимое паливо — тетраоксид азоту і монометилгидразин. Двигун розроблений німецькою компанією Daimler Chrysler Aerospace AG (DASA, «ДАС», Мюнхен).

Крім того, до першої ступені кріпляться два твердопаливних прискорювача (виробник — Europropulsion, «Европропелжн»; Сюрен, Франція; спільне підприємство групи Safran і італійської фірми Avio, «Авіо»), які забезпечують понад 90% тяги на початку пуску. У варіанті Ariane 5 ES друга щабель може бути відсутнім при виведення корисного навантаження на низьку опорну орбіту.


Бортові комп'ютери
www.ruag.com/space/products/digital-electronics-for-satellites-launchers/on-board-computers

Розслідування
На наступний день після катастрофи Генеральний директор Європейського Космічного Агентства (ESA) і Голова Правління Французького Національного Центру з вивчення Космосу (CNES) видали розпорядження про утворення незалежної Комісії з Розслідування обставин і причин цієї надзвичайної події, в яку увійшли відомі фахівці та науковці з усіх заінтересованих європейських країн.

13 червня 1996 р. Комісія приступила до роботи, а вже 19 липня було оприлюднено її вичерпний доповідь (PDF), який відразу ж став доступний в Мережі.

У комісії були дані телеметрії, траєкторні дані, а також запис оптичних спостережень за ходом польоту.
Вибух стався на висоті приблизно 4 км, і уламки були розкидані на площі близько 12 кв. км. в савані і болотах. Були заслухані свідчення численних фахівців і вивчені виробнича і експлуатаційна документації.

image

Технічні подробиці аварії
Положення та орієнтація ракети-носія в просторі измерлись Навігаційною Системою (Inertial Reference Systems — IRS), складовою частиною якої є вбудований комп'ютер, який обчислює кути і швидкості на основі інформації від бортової Інерціальної Платформи, обладнаної лазерними гироскопами і акселерометрами. Дані від IRS передавалися по спеціальній шині на Бортовий Комп'ютер (On-Board Computer — OBC), який забезпечував необхідну для реалізації програми польоту інформацію і безпосередньо — через гідравлічні і сервоприводи — керував твердопаливними прискорювачами і криогенним двигуном типу Вулкан (Vulkain).



Для забезпечення надійності Системи Управління Польотом використовувалося дублювання обладнання. Тому дві системи IRS (одна — активна, інша — її гарячий резерв) з ідентичним апаратним і програмним забезпеченням функціонували паралельно. Як тільки бортовий комп'ютер OBC виявляв, що «активна» IRS вийшла із штатного режиму, він зразу ж переключається на іншу. Бортових комп'ютерів теж було два.

Значущі фази розвитку процесу



За 7 хвилин до запланованого старту було зафіксовано порушення «критерію видимості». Тому старт був перенесений на годину.

H0 = 9 год. 33 хв 59 сек. місцевого часу «вікно запуску» було знову «спіймано» і був, нарешті, здійснено сам запуск, який походив штатно аж до моменту H0+37 секунд.

В наступні секунди відбулося різке відхилення ракети від заданої траєкторії, що і закінчилося вибухом.

У момент H0+39 секунд з-за високої аеродинамічній навантаження внаслідок перевищення «кутом атаки» критичної величини на 20 градусів відбулося відділення стартових прискорювачів ракети від основної її ступені, що і послужило підставою для включення Системи Автоподрыва ракети.

Зміна кута атаки сталося з причини нештатного обертання сопел твердопаливних прискорювачів, таке відхилення сопел прискорювачів від правильної орієнтації викликала в момент H0 + 37 секунд команда, видана Бортовим Комп'ютером на основі інформації від активної Навігаційної Системи (IRS 2).

Частина цієї інформації була в принципі некоректною: те, що інтерпретувалося як польотні дані, насправді було діагностичною інформацією вбудованого комп'ютера системи IRS 2.

Вбудований комп'ютер IRS 2 передав некоректні дані, тому що діагностував нештатну ситуацію, «піймавши» виключення (exception), викинуте одним з модулів програмного забезпечення.

При цьому Бортовий Комп'ютер не міг перейти на резервну систему IRS 1, так як вона вже припинила функціонувати протягом попереднього циклу (посів 72 мілісекунд) — з тієї ж причини, що і IRS 2.

Виняток, «викинуте» однією з програм IRS, стало наслідком виконання перетворення даних з 64-розрядного формату з плаваючою точкою в 16-розрядне ціле зі знаком, що призвело до «Operand Error».

Помилка сталася у вікні, призначеному винятково для виконання «регулювання» Інерціальної Платформи. Причому цей програмний модуль видає значущі результати тільки до моменту H0+7 секунд відриву ракети зі стартового майданчика. Після того, як ракета злетіла, ніякого впливу на політ функціонування даного модуля надати не могло.

«Функція регулювання» дійсно повинна була (згідно з встановленими для неї вимогами) діяти ще 50 секунд після ініціації «польотного режиму» на шині Навігаційної Системи (момент H0-3 секунд), що вона і робила.

Помилка «Operand Error» сталася через несподівано великий величини BH (Horizontal Bias — горизонтальний нахил), порахувавши внутрішньою функцією на підставі величини горизонтальної швидкості», виміряної перебувають на Платформі датчиками.

Величина BH служила індикатором точності позиціонування Платформи. величина BH виявилася багато більше, ніж очікувалося тому, що траєкторія польоту Ariane 5 на ранній стадії істотно відрізнялася від траєкторії польоту Ariane 4 (де цей програмний модуль використовувався раніше), що і призвело до значно більш високою «горизонтальної швидкості».

Фінальним же дією, мав фатальні наслідки, стало припинення роботи процесора. Відповідно, вся Навігаційна Система перестала функціонувати. Відновити ж її дії виявилося технічно неможливо.

Цю ланцюг подій вдалося повністю відтворити за допомогою комп'ютерного моделювання, що — разом з матеріалами інших досліджень і експериментів — дозволило зробити висновок, що причини та обставини катастрофи повністю виявлені.

image

Причини і витоки аварії
Початкове вимога на продовження виконання операції регулювання після зльоту ракети було закладено більш ніж за 10 років до фатального події, коли проектувалися ще ранні моделі серії Ariane.
При деякому малоймовірному розвитку подій зліт міг бути скасований буквально за кілька секунд до старту, наприклад у проміжку H0-9 секунд, коли на IRS запускався «польотний режим», і H0-5 секунд, коли видавалася команда на виконання деяких операцій з ракетним обладнанням.

У разі несподіваного скасування зльоту необхідно було швидко повернутися в режим «зворотного відліку» (countdown) — і при цьому не повторювати спочатку всі настановні операції, в тому числі приведення до вихідного положення Інерціальної Платформи (операція, яка вимагає 45 хв. — час, за який можна втратити «вікно запуску»).

Було обґрунтовано, що у випадку події скасування старту період 50 секунд після H0-9 буде достатнім для того, щоб наземне обладнання змогло відновити повний контроль за Інерціальної Платформою без втрати інформації — за цей час Платформа припинить почалося було переміщення, а відповідний програмний модуль всю інформацію про її стан зафіксує, що допоможе оперативно повернути її в початкове положення (це у випадку, коли ракета продовжує перебувати на місці старту). Одного разу, в 1989 році, при старті під номером 33 ракети Ariane 4, ця особливість була з успіхом задіяна.



Однак, Ariane 5, на відміну від попередньої моделі, мав вже принципово іншу дисципліну виконання передполітних дій — настільки іншу, що робота фатального програмного модуля після старту взагалі не мала сенсу. Однак, модуль повторно використовувався без будь-яких модифікацій.

Мова АДА


Розслідування показало, що в даному програмному модулі були присутні цілих сім змінних, втягнутих в операції перетворення типів. Виявилося, що розробники проводили аналіз всіх операцій, потенційно здатних генерувати виключення, на вразливість.

Це було цілком свідомим рішенням додати належний захист до чотирьох змінних, а три — включаючи BH — залишити незахищеними. Підставою для такого рішення була впевненість в тому, що для цих трьох змінних виникнення ситуації переповнення неможливо в принципі.

Впевненість ця була підкріплена розрахунками, показують, що очікуваний діапазон фізичних польотних параметрів, на підставі яких визначаються величини згаданих змінних, такий, що до небажаної ситуації привести не може. І це було вірно — але для траєкторії, розрахованої для моделі Ariane 4.

А ракета нового покоління Ariane 5 стартувала по зовсім іншій траєкторії, для якої ніяких оцінок не виконувалося. Між тим вона (укупі з високим початковим прискоренням) була така, що «горизонтальна швидкість» перевершила розрахункову (для Ariane 4) більш ніж у п'ять разів.

Захист для всіх семи (включаючи BH) змінних не була забезпечена, тому що для комп'ютера IRS була продекларована максимальна величина робочого навантаження до 80%. Розробники повинні були шукати шляхи зниження зайвих обчислювальних витрат і вони послабили захист там, де теоретично небажаної ситуації виникнути не могло. Коли ж вона виникла, то вступив в дію такий механізм обробки виняткової ситуації, який виявився абсолютно неадекватним.

Цей механізм передбачав наступні три основні дії.

  • Інформація про виникнення нештатної ситуації повинна бути передана по шині на бортовий комп'ютер OBC.
  • Паралельно вона — разом з усім контекстом — записувалася в перепрограммируемую пам'ять EEPROM (яку під час розслідування вдалося відновити та прочитати її вміст).
  • Робота процесора IRS повинна була аварійно завершитися.
Останню дію і виявилося фатальним — саме воно, те, що сталося в ситуації, яка насправді була нормальною (незважаючи на згенероване з-за незахищеного переповнення програмне виняток), і призвело до катастрофи.



Висновки
Дефект на Ariane 5 не був викликаний однією причиною. В ході всієї розробки і процесів тестування існувало багато стадій, на яких цей дефект міг бути виявлений.

  • Програмний модуль був повторно використаний в новому середовищі, де умови функціонування відрізнялися від вимог програмного модуля. Ці вимоги не були переглянуті.
  • Система виявила і розпізнала помилку. До нещастя, специфікація механізму обробки помилок була невідповідну і викликала остаточне руйнування.
  • Помилковий модуль ніколи належним чином не тестувався в новому оточенні — ні на рівні обладнання, ні на рівні системної інтеграції. Отже, помилковість розробки і реалізації не була виявлена.




Із звіту комісії:
Головним завданням при розробці Ariane 5 є ухил у бік зменшення випадкової аварії. Виникло виняток, пояснюється не випадковою аварією, але помилкою конструкції. Виняток було виявлено, але опрацьовано невірно, оскільки була прийнята точка зору, що програму слід розглядати як правильну, поки не показано зворотне. Комісія дотримується протилежної точки зору, що програмне забезпечення потрібно вважати помилковим, доки використання визнаних в даний час найкращими практичних методів не продемонструє його правильність.


Щасливий кінець



Незважаючи на фэйл, побудували ще 4 супутника Cluster II і вивели на орбіту ракетою Союз-У/Фрегат в 2000 році.

Аварія при запуску привернула увагу громадськості, політиків і керівників організацій до високих ризиків, пов'язаних з використанням складних обчислювальних систем, що сприяло збільшенню інвестування в дослідження, спрямовані на підвищення надійності систем з особливими вимогами до безпеки. Наступний автоматичний аналіз коду Ariane (написаний на Ada) став першим випадком застосування статичного аналізу в рамках великого проекту з використанням методики абстрактної інтерпретації.

Джерела
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.