今回は、オペレーティングシステムの役割の一つであるタスク管理について解説します。
オペレーティングシステムとは?大事なところだけ解説!タスクとは、OSから見た仕事の単位のことで、プロセスとも言います。
反対に、OSからではなくアプリケーション(利用者)から見た仕事の単位をジョブと言います。
利用者からコンピュータに投入されたジョブは、いくつかのタスクに分解されて、コンピュータ内で処理されます。
お客さんが、料理(ジョブ)を注文すると、厨房は”卵を割る”、”フライパンを温める”などといった作業(タスク)に分解して調理するといったイメージです。
オペレーティングシステムは、そんなタスクに対して管理を行っています。
タスク管理では、タスクの生成から消滅までを、3つの状態で管理しながらCPUを有効活用しています。
- 実行可能状態
- 実行状態
- 待ち状態
CPUリソースさえ確保できれば、タスクを実行可能な状態です。
CPUリソースを含む実行に必要なすべてのリソースが確保され、タスクを実行している状態です。
CPU以外に実行に必要なリソースが確保されていない状態です。
入出力データ待ちも含みます。
①生成された直後のタスクは実行可能状態になります。
②実行可能状態のタスクから実行するタスクを選択して、そのタスクにCPUを割り当てると実行状態に遷移します。
③実行状態中に、他の優先度が高いタスクが実行可能状態になると、割り込みが発生し、優先順位の高いタスクにCPUが割り当てられます。そして実行状態のタスクは、実行可能状態に遷移します。
④実行状態中に、入出力待ちなどの割り込み処理が生じた場合は、入出力処理が完了するまで待ち状態に遷移します。
⑤入出力処理が完了すれば実行可能状態に遷移します。
タスクの状態遷移からわかるように、CPU割り当てを待っている実行可能状態や、他の割り当てを待っている待ち状態は、複数のタスクが並んでいます。
そこで、どのタスクから実行状態へ遷移していくのがコンピュータにとって最も効率的なのかを考える必要があります。
タスクのスケジューリングアルゴリズムの効率化の指標は、大きく分けて応答時間とスループットの2つあります。
応答時間の定義は、対処売りがバッチ処理か対話処理かどうかで異なります。
バッチ処理の場合、ジョブを投入してから結果を受け取るまでの時間と定義され、ターンアラウンドタイムといいます。
対話処理の場合、端末からの命令を入力した後に、コンピューターシステムから結果を受け取るまでの時間と定義され、レスポンスタイムといいます。
単位時間に行われるユーザーに有益な仕事量のことです。
ただし、タスクを切り替えるときのオーバーヘッドなど、ユーザーの仕事に直接関係しない仕事は仕事量には含まれません。
タスクのスケジューリングアルゴリズムには、複数の方式があります。
アルゴリズムの評価の指標は、応答時間とスループットの二つですが、どの方式がより良いのかは目的によって異なる為、一概にこれが良いという方式はありません。
今回は、4つのタスクスケジューリング方式について説明します。
- 到着順方式
- 処理時間順方式
- 優先度順方式
- ラウンドロビン方式
この方式では、実行可能待ち行列の先頭にあるタスクから順に、CPUを割り当てます。
一般の行列で普通に使われているスケジューリングです。
最初に並んだタスクが、最初にCPUリソースを獲得することが出来ます。
CPUリソースを獲得したタスクは、そのタスクが囚虜するまでPCUリソースを占有して実行し続けます。
この方式の特徴としては、公平さと単純さが挙げられます。
早く並んだタスクが早く事項される方式は、非常に公平であり、かつスケジューリングアルゴリズムの実装も非常に容易です。
一方、スケジューリング性能の面では、必ずしも優れていると限りません。
例えば、勝利時間をそれぞれ1秒、1秒、1秒、100秒必要と四つのタスクが、この順番で、ほぼ同時に到着した場合と、逆の順番で到着した場合を考えます。
前者の場合は、それぞれのターンアラウンドタイムは、1秒、2秒、3秒、103秒であり、平均は27.75秒となります。
後者の場合は、それぞれのターンアラウンドタイムは、100秒、101秒、102秒、103秒となり、平均は101.5秒となります。
つまり、ほぼ同時に到着した四つのプロセスのターンアラウンドタイムが、実行順により約4倍の差がつくことになります。
この方式では、処理予定時間が最も短いタスクから順に、CPUを割り当てます。
タスクの処理時間を考慮し、タスクの処理時間の少ないプロセスから順にCPUリソースを獲得していきます。
この方式は、理論上応答時間を最短にするスケジューリング方式です。
待ち行列中のタスクは処理時間順にソートされており、新しく到着したタスクは処理時間順で並んだ待ち行列中の適切な位置に挿入されます。
処理時間順スケジューリングの拡張として、現在実行中のプロセスの残り処理時間よりも、短い処理時間を持つプロセスが到着した場合、実行中のプロセスのCPUリソースを強制的に取り上げ(プリエンプション)、残り処理時間の短いタスクを実行するスケジューリング方式があります。
しかし、あらかじめタスクの処理時間を知ることは不可能であるため、この方式を実装することはできません。
この方式では、優先度の高いタスクから順に、CPUを割り当てます。
優先度は、大きく分けて次の2つがあります。
タスクの生成時にあらかじめ指定した優先度によってタスクの終了までのスケジューリングを行います。
タスクの実行中に優先度を変化させてスケジューリングを行います。
この方式は、実行可能待ち行列の先頭にあるタスクから順に、CPUを割り当て、一定時間(クオンタイム)が経過した場合は、実行を中断して、実行可能待ち行列の最後尾に加えます。
イメージとしては、握手会のような感じで、割り当てられた時間(クオンタム)を使い果たしたら、強制的に実行は中断されます。
またクオンタムを無限大にすると、到着順方式になり、短くするとすべてのタスクにCPUリソースが割り当てられる感覚が短くなるため、処理時間の短いプログラムが有利になります。
クオンタムが無限小の場合を、プロセッサ等分割方式といいます。
割り込み処理とは、実行中のプログラムを一時中断し、制御プログラムを移して、必要とする別の処理に切り替えることです。
割り込みが発生すると、割り込みが発生したときに実行していた命令の次の命令アドレスが退避され、割り込み処理が実行されます。
割り込み処理が完了すると、退避されていたアドレスが復帰され、割り込み直前に実行していたプログラムの実行が再開されます。
割り込み処理は、大きく2種類に分けられます。
- 内部割込み
- 外部割込み
内部割込みとは、実行中のプログラムが原因で起こる割り込みのことです。
CPUの実行モードは2種類あり、その一つがスーパーバイザモードです。
スーパーバイザモードとは、オペレーティングシステムを実行するモードです。
もう一つのモードはユーザモードで、ユーザの作成した応用プログラムを実行するモードです。
スーパーバイザコール割り込みとは、ユーザプログラムがオペレーティングシステムに対して処理を依頼する際に発生する割り込みです。
CPUが有するすべての命令とオペレーティングシステムが管理するすべてのリソースを扱うことが可能です。
プログラムチェック割り込みとは、実行中のプログラムで異常が起こったとき(ゼロによる除算、演算時のオーバーフロー、不正アドレスへのアクセスなど)に発生する割り込みのことです。
外部割込みとは、実行中のプログラム以外が原因で起こる割り込みのことです。
入出力割込みとは、様々な入出力装置から発生する割り込みのことです。
たとえば、キーボードからの入力時に、スーパーバイザコールなどにより入出力操作が実行された後、その操作が終了した時点で発生する割り込みなどが挙げられます。
タイマー割り込みとは、TSSにおいて、各プロセスに割り当てられた九オンタイムの終了時など、時間を制御するインターバルタイマーによる割り込みのことです。
TSSとは、メインフレームなどの大型コンピューターに複数の端末が接続された環境で用いられたコンピューターの処理形態の一つです。
マシンチェック割り込みとは、コンピューターシステム内において。ハードウェアによって通知される異常時に発生する割り込みのことです。
異常時としては、冷却装置の異常、電源装置の異常などが挙げられます。
リスタート割り込みとは、コンピューターシステムをリスタートする際に発生する割り込みのことです。
この処理は、タスクの状態遷移図の④のときの詳細になります。
割り込みが発生すると、実行中のタスクが中断され、割り込み処理ルーチン(割り込みハンドラ、割り込み処理プログラム)が実行されます。
具体的には以下のような流れです。
①実行中のタスクAが入出力命令を実行し、割り込みが発生する。
②割り込み処理ルーチンが、CPUのレジスタ情報などタスクの再実行に必要な情報(PSW)を主記憶内に転送する。
③CPUスケジューラーが、次に実行するタスクを決定する。
④割り込み処理ルーチンが、CPUスケジューラーに選ばれたタスクのPSWをCPU内に転送する。
⑤実行可能状態にあるタスクBを再開する。
このような一連の処理のことを、コンテキスト切り替えといいます。
PSWとはタスクの再実行に必要な情報のことで、以下の情報を含みます。
- プログラムカウンタ
- スタックレジスタ
- 汎用レジスタ
- 割り込みマスク
これらの情報は、まとめてプログラム状態語と呼ばれ、主記憶内のプロセス制御ブロック(PCB)という領域に保存されます。
今回は、オペレーティングシステムの役割の一つであるタスク管理について解説しました。
このサイトでは、ITに関する記事を投稿しています。
ぜひ他の記事もご覧ください。