2010-06-20 3 views
31

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

Я никогда не строил никаких «реальное время» систем типа, и это вопрос, который пришел на ум после прочтения этой статьи:

http://pluto.jhuapl.edu/overview/piPerspective.php?page=piPerspective_05_21_2010

«Одним из первых крупных вещей, которые мы» LL делать, когда мы просыпаемся корабль на следующей неделе будет загружать почти 20 мелких исправления ошибок и другие улучшения кода нашей защиты от замыкания на (или «автопилот ответа») программное обеспечение «.

+0

Хороший вопрос! Принимая «мышление вне коробки» на следующий уровень: пространство - последняя граница ;-). –

+0

Не прямой ответ на вопрос, но интересный для пошагового описания устранения неполадок: http://spaceflightnow.com/mars/mera/040126spirit.html – starblue

+0

Спасибо вам большое за ваш вклад. Однако что мне делать? Все ваши ответы превосходны и полезны. Я не знаю, кто должен отметить правильный ответ? Не говоря уже о том, что на самом деле нет «правильного» ответа на этот вопрос, и все поднятые вопросы действительны. –

ответ

14

Я был разработчиком программного обеспечения для систем телефонной связи общего пользования, которое имеет довольно серьезные ограничения на надежность, доступность, живучесть и производительность, которые подходят для систем космических аппаратов. Я не работал на космических аппаратах (хотя я работал со многими бывшими челночными программистами в то время как в IBM), и я не знаком с VXworks, операционной системой, используемой на многих космических аппаратах (включая марсоходов Rover, которые имеют феноменальную операционную запись).

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

Обязательно, чтобы программное обеспечение исправления (и исправления) было интегрировано в операционную систему.

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

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

Отказоустойчивая конструкция системы, включая разработку программного обеспечения, имеет важное значение. Я не знаю конкретно о системах космических аппаратов, но что-то вроде кластеров с высокой доступностью, вероятно, является стандартным, с добавленной возможностью запуска как синхронизированной, так и несинхронизированной и с возможностью передачи информации между сторонами во время перехода на другой ресурс. Дополнительным преимуществом этой системы является то, что вы можете разделить систему (при необходимости), перезагрузить неактивную сторону с новой загрузкой программного обеспечения и протестировать ее в производственной системе без подключения к системной сети или шине. Когда вы удовлетворены тем, что новое программное обеспечение работает правильно, вы можете просто переустановить его.

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

В целом, эти системы разработаны с нуля (аппаратное обеспечение, операционная система, компиляторы и, возможно, язык программирования) для этих сред. Я бы не считал Windows, Mac OSX, Linux или любой вариант unix достаточно надежным. Частью этого являются требования к реальному времени, но весь вопрос о надежности и живучести столь же критичен.

ОБНОВЛЕНИЕ: Как еще одна достопримечательность, вот blog by one of the Mars rover drivers. Это даст вам представление о повседневной жизни, связанной с эксплуатацией космического корабля. Аккуратно!

+1

Это оригинальная демонстрация Erlang, которая представляет некоторые из этих идей. http://video.google.com/videoplay?docid=-5830318882717959520# – liori

3

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

http://www.boulder.swri.edu/pkb/ssr/ssr-fountain.pdf

отметить:

  • резервируемых процессоров
  • Команда переключения с помощью карты восходящей линии связи, которая не требует процессора помощи
  • Время отставали правила
5

I» никогда не создавайте систему в режиме реального времени, но в этой системе я подозреваю, что их система m не будет иметь механизм защиты памяти. Они не нуждаются в нем, так как они сами написали все свое программное обеспечение. Без защиты памяти для программы будет записано место для записи другой программы, и это может быть использовано для горячего исправления запущенной программы (запись самомодифицирующего кода в прошлом была популярной техникой, без защиты памяти те же методы, используемые для самомодифицирующего кода, могут использоваться для изменения кода другой программы).

Linux смог выполнить незначительное исправление ядра без перезагрузка в течение некоторого времени с помощью Ksplice. Это необходимо для использования в ситуациях, когда время простоя может быть катастрофическим. Я никогда не использовал это сам, но я думаю, что техник, которую они используют, в основном это:

Ksplice можно применить патчи к ядру Linux без перезагрузки компьютера. Ksplice принимает в качестве входной единый diff и исходный исходный код ядра и обновляет текущее ядро ​​в памяти . Использование Ksplice не требует любой подготовки до того, как система загрузится (загрузочное ядро ​​ не обязательно должно быть специально составлено ). Для того, чтобы генерировать обновление, Ksplice должно определить, какой код в ядре был изменен с помощью исходного кода patch. Ksplice выполняет этот анализ на уровне объектного кода ELF, а не , чем на уровне исходного кода C.

Чтобы применить патч, Ksplice first замораживает выполнение компьютера, так что - единственная программа, работающая. Система проверяет, что процессоры находились в середине выполнения функций, которые будут изменены патчем . Ksplice изменяет начальные измененных функций так, чтобы они вместо этого указывали на новые обновленные версии этих функций и изменяли данные и менялись структуры в памяти, которые должны быть изменены . Наконец, Ksplice возобновляет каждый процессор, работающий там, где он оставил .

(из Википедии)

2

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

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

1

Одним из подходов, которые использовались в прошлом, является использование LISP.

Смежные вопросы