人工呼吸器に見るセーフティ・クリティカル・システム設計 ――2重3重のバックアップで生命を守る
● 異常時に有効な自己診断
図4に示したアラームは,システム全体を25秒周期のウォッチドッグ・タイマで監視するのと同じ機能を果たします.もちろん,CPU基板にもウォッチドッグ・タイマを設け,異常動作に対してリセットが掛かるようにしています.しかし,CPUの動作そのものがおかしくなっているときに,「自身が異常と判断したら自らリセットする」というアルゴリズム自体,矛盾を含んでいます.真に有効な監視方法は何か?
と考えると,大変なことになってしまいます.以下に解説するのは「自身の異常を知る方法」として試みた例です.
人工呼吸器のプログラムはマルチタスク構成で,呼吸をつかさどるタスクが常時実行状態にあり,その上位レベルにアラームや動作パラメータ変更のためのユーザ・インターフェースのプログラムが随時実行されるという構成になっています.
プログラムが正常に実行されなければ,タスクの切り替えも正常に行われないでしょう.それなら,タスクをコントロールするメモリ領域におかしな値が書き込まれるかもしれないと考えられます.それを検出すれば,異常動作を見つけることができそうです.もし見つかったなら,すべてのタスクを再起動して,正常動作に戻せばよいでしょう.そのような考え方でシステムの骨組みを作りました.図5にその動きを示します.10秒ごとに,TCB(task control block)のチェック・サムを計算するタスクが,ほかよりも高い優先順位で実行されます.
図5 信頼性向上を狙ったマルチタスクの動き
各タスクが実行されると,タスクを制御するメモリ領域(TCB;task control block)に情報が書き込まれる.TCBのチェック・サムを計算するタスクを用意し,より高い優先順位で動作させる.チェック・タスクは定期的にTCBの正当性をチェックし,異常があればシステムを再起動する.