Knigi-for.me

Коллектив Авторов - Цифровой журнал «Компьютерра» № 166

Тут можно читать бесплатно Коллектив Авторов - Цифровой журнал «Компьютерра» № 166. Жанр: Прочая околокомпьтерная литература издательство неизвестно, год неизвестен. Так же Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте knigi-for.me (knigi for me) или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.

Вывод? Хакер, для которого социальная справедливость — не пустой звук, должен держать рот на замке. Таким образом он не только улучшит ситуацию с безопасностью, но и выбьет табуретку из-под ног тех, кто манипулирует общественным мнением ради своей выгоды. Увы, Эндрю Арнхаймер, проповедующий antisec-истины со страниц популярных компьютерных журналов, сам им не следует.

Почему — это уже отдельный разговор. Но, полагаю, всё по той же древней причине: слава, слава…

В статье использованы иллюстрации Pinguino K, Bizinet


К оглавлению

Охота на инопланетные баги: почему космические компьютеры непохожи на обычные

Олег Парамонов

Опубликовано 28 марта 2013

Как сделать компьютер, который способен работать десятилетиями без техобслуживания и апгрейда? Это не праздный вопрос. Если в космическом аппарате, находящемся на другом краю Солнечной системы, сломается бортовой компьютер, то миссию, на которую потрачены сотни миллионов долларов и тысячи человеко-лет, придётся сворачивать, не доведя до конца. Разработка и поддержка вычислительных машин, которые требуют такой надёжности, — это мир, живущий по своим законам.

Ведущий специалист компании Wind River Systems по операционным системам Майк Делиман не раз вспоминал январь 2004 года, когда он получил срочный вызов из NASA. Его помощь потребовалась для того, чтобы разобраться в происходящем на Марсе.

На Марсе не происходило ничего хорошего. Вскоре после посадки марсоход Spirit прервал связь с центром управления полётами. Создатели аппарата сутками пытались его оживить, но без особого успеха. Он отказывался реагировать на команды с Земли. Данные телеметрии, описывающие его состояние, удалось скачать лишь на третий день, и они были безрадостными. Вместо того, чтобы перейти в режим сна, марсоход интенсивно расходовал заряд батареи. В NASA всерьёз опасались, что Spirit не удастся вернуть в строй.


Именно в этот момент к операции по спасению марсохода подключился Делиман. У него особый опыт в этой области: дело в том, что компания Wind River Systems разрабатывает операционную систему реального времени VxWorks, которую использует бортовой компьютер Spirit, а Делиман лично вносил в неё нужные NASA изменения. Лучше него в этой версии системы не разбирался никто.

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

К тому времени, когда Spirit отправили в космос, VxWorks успела стать главной системой американских межпланетных станций, но что ешё важнее, её использовал марсоход Sojourner, высадившийся на Марсе в 1997 году. Программное обеспечение Spirit и его двойника Opportunity представляло собой усовершенствованную версию софта Sojourner.

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

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

Взять хотя бы автоматическое управление памятью. Считается, что оно повышает надёжность программ, и это действительно так. Программисты — всего лишь люди, а людям свойственно допускать ошибки. Достаточно забыть освободить выделенную память в неподходящем месте, чтобы программа начала падать. Автоматическая «сборка мусора» исключает подобные ошибки.

Проблема в том, что попутно она делает работу компьютера непредсказуемой. Кто знает, когда системе вздумается почистить память? Вполне возможно, что именно в тот момент, когда контролируемому ей устройству каждая миллисекунда — на вес золота. Небольшая внезапная задержка — и пиши-пропало. Причём потом, при расследовании причин катастрофы, и концов не найдёшь: к запуску сборщика мусора могло привести такое сочетание условий, которое невозможно воспроизвести в лаборатории.

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

Новый марсоход Curiosity столкнулся с первыми значительными неполадками в начале марта. По необъявленной пока причине основной бортовой компьютер аппарата вошёл в безопасный режим и отказался продолжать работу. Через пару дней в NASA решили не рисковать и перевели управление Curiosity на запасной бортовой компьютер, точно такой же, как первый, но исправный. Впрочем, проблема в итоге оказалась несерьёзной. Сейчас марсоход по-прежнему использует запасной компьютер, но при необходимости может переключиться обратно.


В NASA выработали внушительный свод правил, которого нужно придерживаться при разработке программного обеспечения, контролирующего работу космических аппаратов. На первый взгляд, он напоминает руководства для программистов, которые есть в любой крупной компании, но если присмотреться, быстро замечаешь странности. Правила NASA запрещают даже самые основные приёмы, используемые программистами на Си.

В частности, выясняется, что приложения NASA, которые отправятся в космос, никогда не выделяют память динамически по мере надобности. Вся необходимая для работы память должна быть выделена один раз — при запуске. После этого нужно использовать то, что есть, и не просить большего. Это правило одним махом устраняет проблемы, связанные и с утечками памяти, и с непредсказуемым влиянием выделения и освобождения памяти на производительность.

Под запретом оказалась и рекурсия. Во-первых, Си плохо приспособлен для рекурсивных программ (они могут привести к переполнению стека). Во-вторых, условия её завершения сложнее проверить при помощи специальных инструментов, чем условия выхода из цикла.

Использование препроцессора жёстко ограничено. При вычислении выражений необходимо избегать побочных эффектов. Запрещён оператор goto (хотя как раз встраиваемые системы — тот редкий случай, когда он мог бы быть полезен, поскольку с его помощью удобно реализовывать конечные автоматы). Ограничено использование ссылок на функции, зато правильность всех данных без исключения должна проверяться в обязательном порядке.

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

В том злополучном январе, когда сломался Spirit, Майк Делиман и его коллеги из NASA, находящиеся в нескольких часовых поясах, несколько недель круглые сутки не отходили от компьютеров, пытаясь привести марсоход в рабочее состояние. «Я работал без выходных, по три раза вставал ночью, чтобы переговорить с нужными людьми, и прерывался только для того, чтобы перекусить, поспать, сходить в душ и погулять с собаками», — рассказывал Делиман в интервью ACM Queue.

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

Впрочем, если бы задача исчерпывалась поиском ответа на этот вопрос, она была бы куда проще. Тот моторчик мог и не иметь никакого отношения к делу. Есть тысяча причин, способных привести к сбою или же просто вывести компьютерное железо из строя (об этом варианте в NASA не хотели и думать).

Как определить, что именно произошло? Осмотреть сломанную машину нельзя, и с измерительными инструментами в неё не залезешь. Программу, которая на нём идёт, не запихнёшь в отладчик, чтобы узнать, в какой момент она отказывается продолжать работу. И даже когда такая возможность есть, экспериментировать с компьютером, который находится на другой планете, — слишком большой риск. В космосе нет команды «Отменить».


Коллектив Авторов читать все книги автора по порядку

Коллектив Авторов - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-for.me.