車載システムにおける高信頼性と電力管理機能の実現 ――ソフトウェアにもフェイル・セーフの考えかたが必須
1 ソフトにおけるフェイル・セーフ機能とは
車載システムでは高信頼性が要求されます.これはあたりまえの話といえますが,では実際にどのようなことが求められるのでしょうか.ひと言で言うと,「システムの機能が『停止』しない」という点に集約されます.
ソフトウェア・システムの場合,完全にバグを除去することはかなり難しいことです.しかし,かりにバグが原因のトラブルが発生したとしても,システムとしての機能は継続しなければなりません.自動車に限らず,機械分野においてフェイル・セーフという機能は重要です.このことは,ソフトウェアにも求められます.
●ソフトウェアの信頼性を示す三つの指標
高信頼性を実現するための基本的な項目は次の三つです.
1)堅ろうさ
同じレベルの障害が発生したとき,システムがダウン(停止)する場合としない場合があります.このとき,停止しないシステムのほうが「より頑健である」,あるいは「堅ろうさを持っている」と言います.
ここで,汎用OSの基本的な障害であるメモリの不正アクセスを考えてみましょう.メモリ障害が検知されたとき,汎用OSでは不正アクセスを行ったプロセスがセグメント・フォールト注1で停止します.この場合,被害はユーザ・プロセスにのみ限定することができ,ほかのプロセスは走行しています.つまり,メモリ障害の検知機能を持ったOSは堅ろうさを持っていると言えます.
注1;CPUが検知する基本的な障害によってアクセスできない領域をプログラム・コードがアクセスした場合,通常,CPUはセグメント・フォールト用のトラップ・ベクタにジャンプする.それ以降はOSが受け取り,セグメント・フォールト障害として対応する処理(シグナル通知)を行う.
2)異常の検知
上記のメモリの不正アクセスの例では,メモリ障害を検知する機能が重要な役割を果たしています.ここでは,アルゴリズム的なバグを考えてみましょう.あるコード内でループとなり,次のステップに移らないようなケースがあります.この場合,プログラムとしては動作を継続していますが,動作そのものは異常になっています.
物理的な異常検知はOSの機能で実現することが可能ですが,システム的な異常(例えば,ハードウェアにアクセスする順番やタイミングの異常)を検知する場合,プログラムの中になんらかの機能を組み込む必要があります.システムを構築するたびに検知機能を組み込むのではなく,フレームワーク注2として提供された環境を使うことができれば,ソフトウェア開発者の手間を軽減できます.
注2;ソフトウェア・システムを設計,実装する際の「枠組み」を指す. 実装におけるソフトウェア部品(ライブラリ,マネージャ)も含む.