車載システムにおける高信頼性と電力管理機能の実現 ――ソフトウェアにもフェイル・セーフの考えかたが必須
3)異常からの復旧
異常が検知され,その異常が発生したプログラムを停止させた後は,復旧作業が必要となります.復旧手段のいちばんシンプルな例として,ハードウェアのウォッチドッグ・タイマを考えてみます.これは,ソフトウェアからの一定時間の反応がなくなると,強制的にリセットをかける回路をシステムに組み込むことで実現されます.この方法は,一見,乱暴にみえますが,システムを「停止させない」という点では,最後の「とりで」としてもっとも信頼できる手段となるわけです.
ウォッチドッグ・タイマの機能は,次の二つに分けることができます(図1).
- 異常の検知:ソフトウェアからの反応が一定時間ない
- 異常からの復旧:システムに対する物理的リセットの発生
実際には,図1(b)のようにソフトウェアからの周期的なアクセスとCPUのリセット端子をつなぐ簡単な回路で実現できます.このため,さまざまなシステムに搭載されています(かりに搭載されていないとすれば,信頼性の最後のとりでを持っていないとも言える).
ここで問題となるのは,リセットによる異常復旧にかかる時間です.ポート・アクセスのみのシンプルな組み込みシステムなら,リセット,リブート,システムの再スタートにかかる時間はさほど大きくありません.しかし,現在の組み込みシステムでは各種デバイス,ネットワーク,マルチプロセスの環境が複雑に絡み合っており,システムが要求する以上の復旧時間がかかります.
ここで,構造(カーネル)の異なる以下の二つのOSについて,復旧時間の違いを考えてみます.
- モノリシック・カーネルOS
- マイクロカーネルOS
モノリシック・カーネルでは,簡単に言うとドライバとシステム・サービスがカーネルに組み込まれています.この構造では,アプリケーションに異常が発生した場合はアプリケーションを停止して再起動すればよいのですが,システム・サービスやドライバの異常については,カーネル自体が停止してOSをリブートしなければ復旧できません(表1(a)).UNIX,組み込みLinuxなどの汎用OSがこのタイプとなります.
これに対して,マイクロカーネルでは,ドライバとシステム・サービスはカーネルの外に通常のアプリケーションと同じレベルで存在します.この構造をとると,アプリケーション,システム・サービス,ドライバのどれが異常停止しても,問題となる箇所だけを再起動すれば復旧できます(表1(b)).ただし,もっとも深いレベルで問題が発生したときは,OSのリブートが必要になります.筆者ら(カナダQNX Software Systems社)が開発したリアルタイムOS「QNX」がこのタイプです注3.
注3;マイクロカーネルのOSとしては,QNXのほかに,「BeOS」や「Chorus」,「Mach」,「NeXT」,「Mac OS X」などがある.
〔図1〕ウォッチドッグ・タイマ ウォッチドッグ・タイマは,ソフトウェアから一定時間の反応がなくなると,システムに対して強制的にリセットをかける.
〔表1〕OS構造による復旧作業の違い
(a)モノリシック・カーネルの場合
異常発生箇所
|
現 象
|
対 応
|
アプリケーション | アプリケーションの停止 | アプリケーションの再起動 |
システム・サービス | カーネルの停止 | OSのリブート |
ドライバ | カーネルの停止 | OSのリブート |
(b)マイクロカーネルの場合
異常発生箇所
|
現 象
|
対 応
|
アプリケーション | アプリケーションの停止 | アプリケーションの再起動 |
システム・サービス | サービスの停止 | サービスの再起動 |
ドライバ | ドライバの停止 | ドライバの再起動 |