オリジナルOS「MicrOS」の設計と実装(4) ―― リアルタイム性の確保
● プリエンプティブ・スケジューリング
プリエンプティブ・スケジューリングとは,あるタスクが実行中にそれより高いタスクが実行可能状態になったときに優先度の高いタスクに切り替えて実行することです(図2).この動作のきっかけになるのは,割り込みの発生です(内部割り込みと外部割り込みのあるタスクが別のタスクを起動する場合,内部割り込みを使っていることが前提).
最初はタスクBが実行されていたが,ある瞬間にタスクAも実行可能になったとする.その場合,タスクAの方がタスクBよりも優先順位が高いので,タスクBの実行を中断し,タスクAを実行する.このように,実行権を横取りすることをプリエンプト(プリエンプション)と呼ぶ.
この二つのスケジューリングは,μITRON系のリアルタイムOSで採用されています.FCFSの代わりにラウンドロビン方式を採用しているリアルタイムOSもあります.ラウンドロビンとは,同じ優先度のタスクに対してはできるだけ並行して処理を進めていくように制御する方式です.
● MicrOSはFCFSとラウンドロビンの両方に対応
MicrOSはFCFSとラウンドロビンのどちらのスケジューリング方式でも選択できるようになっています.これを切り替えるのは簡単です.実行していたタスクをレディ状態に戻し,さらにプライオリティ・テーブルに戻すときにリンク・セルの先頭に戻すか最後尾に戻すかという違いだけです.このようなタイミングは,外部割り込み処理とタスクのウェイトを解除するようなシステム・コールが発行されたときだけです.いずれも__active関数をコールして処理しています.このなかでMicrOSの定義変数によって処理方法を切り替えることにより対処しています.
● リアルタイム性に関する議論
リアルタイムOSの定義がタスク・スケジューリングの部分だけであれば,一見,UNIX系OSのリアルタイムOS化はそれほど難しくないように思えます.しかし議論が沸騰しているところをみると,OSのリアルタイム性というのはそれほど単純でないのかもしれません.
「リアルタイム」は「時間的に処理を間に合わせる(時間通りに処理する)」という意味でした.しかし,特定のシステムを対象としていないOSに対して「リアルタイム」という形容を行うのは,無理があるのかもしれません.やはり,「リアルタイム・システムを制御することができるOS」程度に理解しておく方が安全なのかもしれません.
リアルタイム性が足りないと表現されたとき,それは単に処理が間に合っていないことが多く,システムのチューニングなどによって解決する場合もあるからです.
● 現実的な「リアルタイム性」の解釈
しかし,特定の組み込みOSのリアルタイム性について説明を求められたとき,上述のようなあいまいな表現は許されません.そんなときの答え方の一つをここに示しておきましょう.
リアルタイム性を,タスクが発生し,そのタスク処理を行い,結果を返すまでの時間と仮定します.これをOSの処理に当てはめれば,「割り込みが発生して,それを受け付け,割り込みを処理して,次の処理に移行できるまでの時間」と考えられます.この時間がある一定の時間内に収まっていれば,そのアプリケーション・システムのリアルタイム性が保証できることになります.