I-26-3. タスク優先順位制御とカーネルによる時間管理方法

タスクの優先度とその制御仕様について、実装パターンと設計内容、特徴、手順を説明する。実際のタスク制御を行うカーネルが時間制御方法としてどのような管理手法を用いているかについても触れる。

【学習の要点】

* カーネルは優先度を設定してタスクの優先度順実行を制御する。

* カーネルによる時間管理には、プロセス実行を時分割で切り替えるタイムスライス方式、割り込み等のイベントを受けてタスクを切り替えるプリエンプティブ方式などがある。

図I-26-3. プリエンプティブ方式とタイムスライス方式

【解説】

1) タスクの優先順位

カーネルは優先度を設定してタスクの優先度順実行を制御する。

* プログラムのリエントラント性と優先度

- リエントラント(再入可能)とは、プログラムに含まれるあるルーチンの実行中に同じルーチンが呼び出されても正しい結果を返せることを指す。

- C言語の場合、スタティック変数の更新を行わない関数はリエントラント性が保証される。

* 同期/排他制御と優先度

- リエントラントでないルーチンを使う前後で排他制御を用いると、そのルーチンはリエントラントルーチン同様に、複数のプログラムから利用できる。

- 上述の使い方のできるライブラリを特に、スレッドセーフライブラリ(Thread Safe Library)と呼ぶ。

2) カーネルによる時間管理

* カーネルによる時間管理には、タスクの実行を時分割で切り替えるタイムスライス方式、割り込み等のイベントを受けてタスクを切り替えるプリエンプティブ方式などがある。

- タイムスライス方式

複数のタスクを平等に実行させるための方式。タイムスライスという単位時間でタスクを切り替えて実行する方式である。

- プリエンプティブ方式

外部からの割り込みが発生すると、スケジューリングを行い、優先度に応じて処理を切り替える方式である。

- フィードバック待ち行列

優先度のある待ち行列にタスクを並べ、順に処理を行う。その際、一定時間内に処理が終わらない場合、優先度を落とす方式である。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。