﻿# Первый баг на Марсе

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


> Статья впервые была \[опубликована\]\(https://habr\.com/ru/company/pvs\-studio/blog/315496/\) на русском языке на сайте habrahabr\\\.ru\\\. Статья и её перевод размещаются на нашем сайте с согласия автора\\\.

**Прошло 25 лет\.**

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

![0462_Bug_on_Mars_ru/image1.png](https://import.viva64.com/docx/blog/0462_Bug_on_Mars_ru/image1.png)

_Кадр из к/ф "Марсианин"\. Главный герой держит в руках марсоход Sojourner_

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

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

![0462_Bug_on_Mars_ru/image2.png](https://import.viva64.com/docx/blog/0462_Bug_on_Mars_ru/image2.png)

Стоимость программы была относительно невысокой — 265 млн $\.

Марсоход проработал в течение 83 сол\.

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

![0462_Bug_on_Mars_ru/image3.png](https://import.viva64.com/docx/blog/0462_Bug_on_Mars_ru/image3.png)

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

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

## Priority inversion

[Инверсия приоритета](https://en.wikipedia.org/wiki/Priority_inversion) происходит тогда, когда два или несколько потоков с различными приоритетами находятся в споре, который из них должен быть обслужен процессором\.

![0462_Bug_on_Mars_ru/image4.png](https://import.viva64.com/docx/blog/0462_Bug_on_Mars_ru/image4.png)

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

![0462_Bug_on_Mars_ru/image5.png](https://import.viva64.com/docx/blog/0462_Bug_on_Mars_ru/image5.png)

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

![0462_Bug_on_Mars_ru/image7.png](https://import.viva64.com/docx/blog/0462_Bug_on_Mars_ru/image7.png)

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

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

![0462_Bug_on_Mars_ru/image8.png](https://import.viva64.com/docx/blog/0462_Bug_on_Mars_ru/image8.png)



![0462_Bug_on_Mars_ru/image9.png](https://import.viva64.com/docx/blog/0462_Bug_on_Mars_ru/image9.png)

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

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

_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](mailto: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\!_

![0462_Bug_on_Mars_ru/image10.png](https://import.viva64.com/docx/blog/0462_Bug_on_Mars_ru/image10.png)

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

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

## Подробности

![0462_Bug_on_Mars_ru/image11.png](https://import.viva64.com/docx/blog/0462_Bug_on_Mars_ru/image11.png)

* [The Mars Pathfinder Mission Status Reports — First Week](http://www.oarval.org/missionsr1.htm)
* [The Mars Pathfinder Mission Status Reports — Second Week](http://www.oarval.org/missionsr2.htm)
* [The Mars Pathfinder Mission Status Reports — Third Week](http://www.oarval.org/missionsr3.htm)
* [What really happened on Mars?](https://www.microsoft.com/en-us/research/people/mbj/?from=http%3a%2f%2fresearch.microsoft.com%2fen-us%2fum%2fpeople%2fmbj%2fmars_pathfinder%2fauthoritative_account.html)
* [A Conversation with Glenn Reeves](https://www.drdobbs.com/a-conversation-with-glenn-reeves/184411097)

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

[http://www\.slideshare\.net/jserv/priority\-inversion\-30367388](https://www.slideshare.net/jserv/priority-inversion-30367388)

## Заключение

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