Web教材一覧ハードウェアとソフトウェア

タスク管理

OSの機能の一つであるタスク管理について学習します。多様な概念、用語が出てきますが、体系的に理解することが必要です。

キーワード

タスク管理、実行状態、待機状態、実行可能状態、ディスパッチャ、ラウンドロビン方式、割込み、内部割込み、スーパーバイザコール、外部割込み、タイマ割込み、プリエンプション


タスクの状態

複数のタスクがある場合、タスクの状態には次の3つの状態があります。(状態遷移図については、「オートマトンと状態遷移図」(hs-joutai-seni)参照)

実行状態(Run)
CPUが割り当てられ実行している状態
待機状態(Wait)
ファイルから読み込んだデータを処理するタスクのように、入出力が完了するのを待っている状態
実行可能状態(Ready)
CPUが割り当てられれば実行できるのだが、他のタスクがCPUを使っているので、自分に割り当てられるまで待っている状態

各タスクの状態、必要とする資源、優先度などの情報は、タスクコントロールブロック(TCB)に登録されます。そのTCBを用いて、実行可能状態にあるプロセス(タスク)の中から,次に実行するべきプロセスを選んだり、TCBの内容を更新する機能をタスクスケジューラ(ディスパッチャ)といいます。

各状態からの遷移は、次のように行われます。

●タスク実行中での高優先度タスクによる割込みの例
 タスクAの実行中に、Aよりも優先度の高いタスクBが到着すると、Aの実行を中断してBを実行するという割込みが発生します。このとき、Bは実行可能状態になり、Aが終了する(Aが消滅する)と直ちに実行状態に戻ります。
 このときBを待機状態にしたのでは、Aの終了後、待機状態にある他のタスクCが実行されてBの実行が遅れることもありますし、Bの実行が中断したときの情報を失ない、正しい実行ができなくなることもあります。

優先順位の方式

ディスパッチャが実行可能状態のタスクのなかから実行するタスクを選択する優先順位には、多様な基準があります。通常は、これらを組み合わせたり重みづけをしたりして、実行すべきタスクを決定します。

到着順方式
実行可能状態になった順に実行権を与える方式です。通常は到着順と一致します。
処理時間順方式
新しいタスクが実行可能状態になるたびに,各タスクの残りの実行時間を評価し,その時間が短いものから順に実行する方式です。「すぐ片付くことからやってしまおう」という発想で、対話型処理の平均応答時間を最小にするのに有効です。
優先度順方式
PCBに設定している実行優先順位に従って選択する方式です。優先順位の高いタスクはすぐに実行されますが、優先順位の低いタスクは、いつになっても実行されないという問題が発生するので、長く待たせれているタスクの優先度を上げるような工夫が必要になります。
実行中のタスクとの関係もあります。あるタスクが実行可能状態になったときに,そのタスクの優先度と,実行中のタスクの優先度とを比較して,実行可能状態になったタスクのほうが高ければ、それを実行状態にします(実行中のタスクは待機状態になります)。
ラウンドロビン方式
実行状態としたタスクが決められた時間内に待ち状態に選移しないとき、そのタスクはタイマ割込み(後述)などにより、実行可能状態に遷移します。このとき、待ち行列の最後尾に回す方式です。他のタスクへの迷惑は減少しますが、待ち行列が長いとき、処理時間の長いタスクは完了までにますます長時間かかることになります。

割込み

実行中のタスクを中断して他のタスクに実行権を渡すことを割込みといい、割込みのきっかけになる事象をトリガー(引き金の意味)といいます。割込みは多様なトリガーにより発生します。

内部割込み
実行中のタスク(プログラム)が原因で発生する割込み
プログラム割込み
演算命令での0除算、オーバーフローなど(プログラムエラーに起因することが多い)
仮想記憶方式での存在しないページへのアクセス(ページング)
スーパーバイザコール
システムコール、特権モード呼出し割込み、カーネル呼出し割込みともいいます。
通常のプログラムからはアクセスできない保護されたメモリ領域にアクセスすることや、保護されたレジスタを操作すること、CPUの動作モードを変更することなどを、OSの制御プログラムの特権機能が必要になったときに発生します。
外部割込み
実行中のプログラム以外の原因で発生する割込み
機械割込み
ハードウェアの障害、電源異常、パリティエラーなどによる割込み
コンソール割込み
オペレータの操作による割込み
入出力割込み
入出力処理の発生や終了による割込み
タイマ割込み
実行中のタスクがCPUを長時間占有すると、他のタスクに大きな影響を及ぼします。それを回避するために、インターバルタイマにより、一定時間を経過すると割込みを行い、他のタスクに実行権を渡して、自分は実行可能状態に遷移します(ラウンドロビンにすることが多い)。
実行中のアプリケーションから定期的に信号を送らせ、それは途絶えていればハングアップ状態と判断、割込みを掛ける仕組みをウォッチドッグタイマといいます。

関連用語

プリエンプティブ方式
マルチタスクOSで特定のタスクにCPUを長時間占有させず、複数のタスクに公平に実行時間を割り振ることができる処理方式です。現在のパソコンのOSは、ほとんどがプリエンプティブ方式になっており、本節の説明は、ほぼこの方式を前提にしています。
プリエンプション方式とノンプリエンプション方式
プリエンプション方式は、実行中のタスクが割込みにより中断されて、優先度の高いタスクに切り替わり、優先度の高いタスクの処理が終了すると、中断されたタスクの処理を再開する方式です。その割込みで重要なのがタイマ割込みです。
それに対して、ノンプリエンプション方式は、タイマ割込みを行わない方式です。この方式では、実行状態としたタスクが自ら待ち状態に遷移するか終了するまで,他のタスクを実行状態とすることができません。実行中のタスクが終了後、新しいタスクの処理が開始されます。実行中のタスクの処理時間短縮には有効ですが、いったんCPUを長く使うタスクが実行状態に入ると、他のタスクはなかなか実行されない欠点があります。
イベントドリブン方式とタイムスライス方式
イベントドリブン方式とは、「マウスがクリックされた」「キーボードから入力された」というような事象(イベント)が発生すると、それに応じて処理を行う方式です。グラフィカルユーザインターフェースを持ったプログラムではイベントドリブン方式が広く採用されています。
タイムスライス方式とは、タイムスライス(タイマ割込みでの「一定時間」のこと。数十ミリ秒)により、CPUの利用権を他のタスクに渡す方式です。タイムシェアリング方式ともいいます。タイムスライス方式は必要のないときも必要なときも、 常に一定のオーバーヘッドがかかりますが、多くのタスクを公平に処理するのに適しています。