Mars Global Surveyor の通信途絶の真の原因はソフトウェア更新時の人為ミスか
昨年 11 月,NASA の火星探査機 Mars Global Surveyor (MGS) が突如通信を途絶した.運用中の他の探査機などを総動員して懸命の捜索が続けられたが,MGS からの通信は二度と戻らなかった.
12 月には ESA の Mars Express によって MGS らしきものがとらえられたが,姿勢を喪失していると推測され,復旧の見込みはほぼゼロとなった.当初,老朽化が原因の可能性が高いとされてきたが,ここへ来て 1/10 に NASA の調査で人為ミス説が浮上した.- http://www.spaceref.co.jp/news/5Fri/2007_01_12mars3.html
- http://www.spaceref.com/news/viewnews.html?id=1185
NASA の John McNamee が語ったパブリックコメントによると,
- 昨年 6 月にソフトウェア (2 台の CPU 同期用) を送信した際,アドレスが 2 箇所間違っていてメモリが上書きされた
- 探査機は異状事態モードに移行した
- バッテリのラジエータが太陽の方を向いてしまって過熱し,バッテリが逝った
- 自分は MGS に関わっていないし,かつて関わったこともないが,似たアーキテクチャを扱ったことがある.
- NASA は現在調査委員会を招集している段階であり,したがって調査が終了しないうちは以下は全て仮説である.
- 以下の情報の一部は過去に MGS に関わっていた友人から得たものなので,MGS 特有の話については基本的に 2 次情報である.
- MGS の搭載電子機器は,Mars Observer (MO) という探査機のフライトモデル予備機を流用したものであり,MO は Satcom-K や DMSP / TIROS といった衛星に基づいて作られている.つまり MGS (1996 打上げ) のエレクトロニクスとソフトウェアアーキテクチャは 1980 年代初期のものである.
- MGS に搭載されている多くのコンピュータのうち,SCP (Spacecraft Control Processor) と呼ばれる 2 台のメインコンピュータのメモリはわずか 128KB RAM であった (今時の携帯電話のメモリより遥かに少ない).
- SCP は Marconi 1750A マイクロプロセッサをベースとしていた.当時,国防総省は衛星ソフトウェア関連コスト削減のために 1750A の軍用規格で命令セットの仕様を定めており,当時の衛星の多くは 1750A を用いていた.その後次第に Intel *86 や IBM PowerPC などの商用アーキテクチャが国防総省や宇宙関連でも使われるようになり,1996 年以降は 1750A は使われていない.
- 1750A のプログラミング手段としては,アセンブラ,JOVIAL (空軍特有の言語),Ada か C,の 3 つの方法がある.MGS ではアセンブラと JOVIAL が使われていた.どちらも obsolete な言語であり,経験者を探すのが年々難しくなっている.
- Mars Pathfinder 以前の探査機は OS を積んでいない (そこまで計算資源に余裕がなかった).よって,メモリ管理は「人間が手動で地上から」行うことになる.
- 近年の衛星では,プログラム中の定数パラメータはオンボードのデータベースかファイルに格納されている.しかし MGS にはそもそも OS がなく,データベースもファイルシステムも存在しない.なので地上の人間が「メモリのどこにどんなパラメータが格納されているか」を常に追跡しつづけなければならない.
- MGS のメモリはワード (16 バイト) 単位でアドレシングを行うようになっている.単精度整数型は 1 ワードだが,倍精度整数型や浮動小数点型などは 2 ワード,もっと複雑なデータ型の場合はそれ以上のワード数をもってメモリ内に格納されている.
- ここで問題になるのがビッグエンディアン/リトルエンディアンである.つまり,2 ワード以上のサイズのデータをメモリ内に格納する時,どっちのワードをどっちに格納するか? ということである.この件が今回の MGS 通信途絶に関係していたかどうかはわからないが,ともかく地上の人間がパラメータを更新する際,相当注意して作業しないと容易に混乱が起こり得る (地上系システムと衛星系システムとでエンディアンが違うことさえありうるらしい!).
- 2006 年夏,冗長系をなしている SCP の 1 台 (SCP-1) に問題が起こったため,バックアップである SCP-2 に切替えた.SCP-1 のメモリの内容に欠陥があったので,その後数ヵ月をかけて大量のコマンドを送信して欠陥を修復する作業が行われた.
- この作業を行っていたのはたった一人だった.彼は 1750A や JOVIAL を扱った経験がわずか数ヵ月と浅かった.ミッション初期からずっとこの作業を行っていた人間が退職したため,彼が投入されたのだ.
- この新人がパラメータを更新している時,2 ワードパラメータの開始アドレスをうっかり間違えた.
- アドレスが 1 つずれたことによって,更新していたパラメータが余計に破損しただけでなく,近傍のメモリの内容も破損してしまった.その中には,異状事態モード時の太陽電池アレイの姿勢や,太陽電池アレイの機構に関するパラメータが含まれていた.
- 2006 年夏のこのミスは数ヵ月誰にも気付かれなかった.11/5 の合運用からの復帰の際,太陽電池アレイを正しい向きに直すコマンドが送信された.この結果,一つの太陽電池アレイ機構が端まで動いた.通常はこれは全く問題ではない.しかしパラメータが破損していたため,衛星は太陽電池アレイが限界までねじれていることに気付かず,モータが故障したと判断して異状事態モードに移行した.
- この過程で太陽がバッテリラジエータに直接当たってしまい,バッテリは過熱して破損した.他のバッテリは既に経年劣化しており,食の間に十分な電力供給をすることができなかった.
参考: Mariner 1,Mercury,Mars Climate Orbiter のソフトウェアバグ [2005-12-13]
追記 (2007-04-19): あれ,Geek Counterpoint Blog の当該記事がなくなっちゃってますね.がーんん.まさか消されたのか.
関連記事: 宇宙開発をめぐる噂の真相シリーズ
- 第 1 弾: 宇宙開発におけるソフトウェアバグ [2005-12-13]
- 第 2 弾: チャレンジャー号の都市伝説 [2006-05-18]
- 第 3 弾: 「一方ロシアは鉛筆を使った」の真実 [2006-07-31]
- 第 4 弾: Mr. Gorsky の真相 [2006-11-18]
- 第 6 弾: ガチャピンは本当に宇宙へ行っていた [2007-08-25]
- 第 7 弾: ガチャピン「また宇宙に行きたい」 [2008-05-23]