В 1971 году СССР доставили на Марс первые в мире планетоходы «на лыжах», которые должны были щупом (динамический пенетрометр и гамма-лучевой плотномер) ткнуть поверхность, и сказать — Марс твердый или жидкий пыльный. Первый аппарат разбился 27 ноября, второй совершил мягкую посадку 2 декабря, но марсоходик не смог выбраться из «скорлупы» посадочного модуля, поэтому попытку не засчитали.

Прошло 25 лет.
4 июля 1997 года на Марс прилетел американский аппарат и привез «пришельца» с первым багом.


Кадр из к/ф «Марсианин». Главный герой держит в руках марсоход Sojourner

Проект был под угрозой, но мощные инструменты отладки операционной системы и отличная работа программистов на Земле (парни, что надо) позволили в кратчайшие сроки все быстренько исправить.


Соджорнер (Sojourner)


image


Стоимость программы была относительно невысокой — 265 млн $.
Марсоход проработал в течение 83 сол.

Название марсохода, Соджорнер, дословно означает «временный житель» или «проезжий», оно было дано победителем голосования — 12-летним мальчиком из штата Коннектикут, США. Марсоход назван в честь женщины-борца с негритянским рабством — Соджорнер Трут.

image


Результаты миссии:

  • 2.3 миллиарда бит информации
  • 16500 изображений с посадочного модуля
  • 550 изображений с марсоходика
  • 15 химических анализов камней и пыли
  • много климатических данных
  • пища для размышления тестировщикам

Priority inversion


image


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

image

Компьютер на посадочном модуле — радиозащищенный IBM Risc 6000 Single Chip (Rad6000 SC) 20 MIPS CPU с 128 MB RAM и 6 MB EEPROM. Операционка — VxWorks.

image

На ровере был 0.1 MIPS Intel 80C85 CPU с 512 KB of RAM и 176 KB твердотельной флэш-памяти.


На 1553 шине висят 3 таска с различными приоритетами.

При сборе метеорологических данных ровер завис и стал перезагружаться. Инженеры на Земле достали копию софта и стали разбираться в чем дело. Копаясь в подробных логах, за 18 часов инженеры поняли в чем дело.
image


image


Оставалось только подправить пару флагов для семафора.

Как исправляли баг


No, we did not use the vxWorks shell to change the software (although the shell is usable on the spacecraft). The process of «patching» the software on the spacecraft is a specialized process. It involves sending the differences between what you have onboard and what you want (and have on Earth) to the spacecraft. Custom software on the spacecraft (with a whole bunch of validation) modifies the onboard copy. If you want more info you can send me email.

Процесс «исправления» ПО на космическом корабле является специализированным процессом. Он включает в себя отправку различий между тем, что вы имеете на борту и тем, что вы хотите (и имеете на Земле) космическому кораблю.

Софт на космическом корабле изменяет встроенную копию. Если кто хочет подробностей, автор софта предлагает написать ему на почту glenn.e.reeves@jpl.nasa.gov.

— Глен Ривз, тимлид разработчиков софта для Mars Pathfinder


How the patch was uploaded?

VxWorks contained a C language interpreter to execute statements on the fly during debugging. The JPL engineers decided to launch the spacecraft with this feature still enabled. A short C program was uploaded to the spacecraft, which when interpreted, changed the values of the mutex flag for priority inheritance from false to true. No more system reset occurred!



Глен Ривз на фоне дубликата Mars Pathfinder, инженер, который нашел и исправил баг

Баг был обнаружен при тестах на Земле еще до запуска, но ему присвоили низкий приоритет.

Подробности


image



Презентация китайского эксперта




Заключение


Глен Ривз благодарит разработчиков операционки из фирмы Wind River, за то что они разработали систему, позволяющую дебажить даже в таких аварийных ситуациях. Интересно отметить, что баг был обнаружен на Земле, но «дедлайны» и «приоритеты» заставляют запускать в космос аппараты, заведомо зная, что есть «слабые места».
Поделиться с друзьями
-->

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


  1. beldeveloper
    09.12.2016 17:52
    +4

    2.3 миллиарда бит информации это всего ~274 МБ.


    1. foxin
      09.12.2016 18:04

      По $1 за каждый байт информации


      1. MagisterLudi
        09.12.2016 20:11

        20 лет назад…


  1. dmitry_ch
    09.12.2016 18:32
    +2

    Баг был обнаружен при тестах на Земле еще до запуска, но ему присвоили низкий приоритет.

    Вот это то, что называют Epic fail. Не смогли бы пропатчить — рыдали бы над списком низкоприоретеных багов!

    Custom software on the spacecraft (with a whole bunch of validation) modifies the onboard copy. If you want more info you can send me email.


    Прямо просится «я в ответ пришлю резюме».


  1. s0cr4t
    09.12.2016 20:11
    +3

    Как в бородатом анекдоте: реклама производителей советского авто: «мы подрезаем ремень генератора уже на заводе, чтобы вы знали точно, где искать поломку»


  1. r3l0c
    09.12.2016 20:11
    +1

    Почему багу присвоили низкий приоритет? Мне кажется на подобной технике вообще все баги должны исправляться в любом случае.


    1. zapimir
      09.12.2016 21:31
      +4

      Просто для полетов на Марс «окно» открывается раз в 2 года, можно банально не успеть, и придется отодвигать полет на 2 года.


  1. avk123
    09.12.2016 20:11
    +1

    но марсоходик не смог выбраться из «скорлупы» посадочного модуля

    Вообще-то, марсоходик был размещён снаружи раскрытого модуля, а не «скорлупе», и развернуться должен был до начала передачи сигнала.


  1. CTAPOBEP
    10.12.2016 08:35
    +3

    Называется, прочитай статью и проникнись понятием 'удаленная отладка'. И главное-то не написали — PVS-Studio нашел бы эту ошибку?


    1. Andrey2008
      10.12.2016 10:43
      +7

      Подобные ошибки — это сфера динамических анализаторов.


  1. Frankenstine
    12.12.2016 10:04
    +1

    Так и не понял в чём баг был.