1. サービスコール型プログラミング
サービスコールとは?
OSのもつ機能を要求するときに使うコマンドです。コマンドには相手先を指定したり、時間などの値を指定します。コマンドに応じて指定するものが異なります。μITRONではVer.3まではシステムコールと呼ばれていました。
サービスコール型プログラミングとは?
OSの機能をコマンドで要求しながら処理を行うプログラミング方式です。コマンドで要求することをサービスコールの「発行」といいます。
C言語では、決められたサービスコール用の関数を引数付きでコールすることでOSに処理を要求します。関数の戻り値としては要求の結果(依頼がOKかNG かを表す数値で返す)や割り当てられたID番号などです。サービスコールによっては引数で指定したメモリ番地(アドレス)にデータを入れて返すものもあります。
通常の関数と異なるところは、呼び出された関数の処理が終了しても呼び出し元に戻るとは限らない点です。自タスクを待ち状態にしたり、休止状態にするサービスコールを発行した場合はOSのスケジューラが起動して他のタスクに実行が移ります。待ちが解除されて次にディスパッチされるまでは発行したサービスコールから復帰できません。逆に言えば、サービスコールを発行せずに処理を続ける限りは他のタスクに実行が移ることはありません。なぜならスケジューラが機能できないからです。
実行中タスクでサービスコールを発行しなくとも唯一他のタスクに実行が移る場合があるのは、割込みハンドラからサービスコールが発行された時です。割込みをマイクロプロセッサに対して禁止しない限りは、強制的に割込みハンドラに実行が移ります。ただし、現在実行中のタスクの優先度が他よりも高ければ他のタスクに実行が移ることはありません(割込みハンドラとサービスコールの処理は実行されますが最優先タスクのため再びディスパッチされます)。 この場合、割込みハンドラから起動されたタスクは、実行の待ち行列に入ります。
2. イベントドリブン型プログラミング
イベントドリブン型とは?
関連する事象(イベント)が発生するごとにタスクの状態を変化させながら動作させるプログラムのことをいいます。
イベントには、タイマーイベントや割込みイベントなど外部の状態の変化をトリガーにするものや、別のタスクからのメッセージ送信やイベントフラグのセット、資源開放、エラー発生などシステム内部の状態の変化をトリガにするものがあります。組込みシステムではこれらのイベントをトリガーにして、起動したり、休止したり、待ちに入ったり、待ちが解除になったりしながらプログラムが動作します。ここが業務ソフトのデータ(帳票)駆動型と異なるところです。パソコンなどのウインドウベースのアプリケーションでは、一つ一つのウインドウにあるボタンやテキストボックスなどが"クリックされた"とか"表示が更新された"といったイベントをOSが監視し、発生すると該当プログラムを起動します。これもイベントドリブン型プログラミングと呼びますが、リアルタイムOS のものとは異なります。
3. ドライバ型プログラミング
ドライバ(driver)とは? 通信機器など個別のハードウェアを動作させるソフトウェアのことをいいます。
個別のハードウェアを提供するメーカは自社製品用のドライバをOSごとに用意しています。アプリケーション開発者はそれをOSに組み込んで使用します。開発者は標準的なAPI(Application Programing Interface)関数を通してハードウェアを操作することができます。ハードウェア固有の知識または面倒な割込み処理を理解しなくとも先端的な機器を扱えるようになります。また、提供されたハードウェアでなくともドライバ型のソフトウェア構造にすることによって、ソフトウェアの再利用が可能となり、アプリケーション開発者とハードウェア知識を必要とするドライバ開発者を分けることができるようになります。