オリジナルOS「MicrOS」の設計と実装(4) ―― リアルタイム性の確保
● タスク方式の場合
タスク方式は,割り込み処理中に割り込み処理タスクをアクティブにするだけの処理を行うことを前提とします.この方式を採用しても,すべての割り込みをタスク方式にするわけではありません.少なくともタスクをアクティブにする処理量とタスク・スイッチでタスクを実行するのに要する処理量を加えた処理量以下で処理できる割り込みについては,割り込み処理の中で処理した方が効果的です.
タスクをアクティブにする処理は,割り込み禁止で行わなければなりません.この処理を多重割り込みの中でコールしても,外部割り込み発生からeiにする間(その前にシステム・コールなどによる割り込み受け付けの遅れがある)に発生した割り込みを受け付けるだけで,数ステップ後には割り込み禁止になるため,多重割り込み処理の効果は薄くなります.従って,割り込み処理の主要部分をタスクで処理する場合,多重割り込み処理を使わない方が効率的と判断できます.
この方式の利点は,使用するスタック量の推定が容易であり,割り込み処理にかかる処理時間の確定が容易な点の二つです.また,多少ですが割り込み処理の共通部分の処理ステップを減らせます.
● 割り込み処理方式の場合
割り込み処理方式をすべての割り込みに適用できるのは,割り込み処理の処理量が処理能力の限界を超えない場合に限られます.この割り込み処理方式を採用したとき,割り込み処理が多少長めになったとしても処理できなければなりません.しかし,重要な割り込みの処理が遅れてしまう可能性があるので,多重割り込みのもとで処理すべきでしょう.
この方式の利点は,割り込み発生に対して早めにそれを受け付けられることです.また,多重割り込み状態の処理量は,多重でない場合に比べると少なくて済むため,比較的たくさんの割り込みが発生するようなシステムに向いているといえるでしょう.多重度に制限を付けることでスタック量の推定は可能ですが,多重割り込みを使わない場合に比べるとより多くのスタック量を必要とします.
● 多重割り込みの採用の可否――割り込みの頻度で決定
以上述べてきたことから,多重割り込みを採用するかは,割り込みの発生頻度によって決定するのが良いと判断できます.割り込み発生頻度の比較的高いシステムでは,多重割り込みを使って処理します.そのときは割り込みの処理に割り込み処理用のタスクを定義しないで,できるだけ割り込み処理の中で処理した方がよいでしょう(できない場合がある.例えば割り込み処理が長すぎて別の割り込みの阻害原因になる場合など).その方が割り込み処理にかかる全体の処理量が少なくなります(この処理方法は,割り込み処理方法について一般にいわれていることとは逆になる).
割り込み発生頻度の比較的低いシステムでは多重割り込みは使わずに,処理量の多い割り込み処理は割り込み処理タスクを作って,タスクで処理するようにします(表2).このときも,割り込み処理の処理量がタスクをアクティブにする処理量とタスク・スイッチしてタスクを実行状態にする処理量を加えた処理量より小さければ,割り込み処理の中で処理すべきです.
発生頻度 | 多重割り込みの採用 | 割り込み処理タスク定義 |
高 | ○ | × |
低 | × | ○ |
このようにすると,割り込み発生頻度の高低はどのように決めべきかが問題になります.しかし,これに対して明確に答えるのはかなり難しいと言わざるをえません.ただ,こうしたことを判断するときは,割り込み発生頻度を単に割り込み数でカウントするのではなく,その処理時間を含めた単位時間当たりの割り込み処理時間の合計で判断すべきだということを付け加えておきます.また,組み込みOS側の態度としては,多重割り込み処理を組み込んでおき,必要に応じてそれが選択できるような構造が望ましいといえるでしょう注1.
注1;V850-MicrOSは多重割り込み処理を組み込んでいない.その点では組み込みOSとしては望ましくはない.
たぐち・のぶお