タスク管理〜基本情報技術者合格のための学習法〜

タスク管理基本情報

タスク管理

ジョブ管理は人から見た仕事の単位でしたが、タスク管理とは、コンピュータから見た仕事の単位です。タスクは、厳密には違いますが、プロセスと呼ばれます。
小さな最小単位の仕事や作業(タスク)を管理することをタスク管理と言います。

タスクとプロセスの違い
プロセス
プログラムを OS が管理する単位であり、 1 つのマシン上に複数のプロセスが存在します。
タスク
プログラムの実行単位であり、 1 つのプロセスには 1 つまたは複数のタスクが存在します。

ジョブステップはCPUで実行をするために、タスクに変換されます。

タスクの状態遷移

生成されたタスクには、次の3つの状態があります。

実行可能状態(READY)

タスクはいつでも実行が可能な状態にありますが、CPUの使用権が他のプログラムが実行されているため回って来ることを待っている状態です。
生成直後のタスクは、この状態になって、CPUの待ち行列に並んでいます。

実行状態 (RUN)

CPUの使用権が与えられて、実行中の状態です。

待機状態(WAIT)

入出力処理が発生したので、周辺機器への入出力要求の結果を待っている状態です。

タスクの状態遷移

ディスパッチャ

実行可能状態のタスクに対してCPUの使用権を割り当てることをデスパッチと呼びます。
このディスパッチを行う管理プログラムのことをディスパッチャと呼びます。

プリエンプション

実行中のタスクに割り当てられているCPUを奪うことです。奪われたタスクは動作を一時中断し、実行可能状態になります。

タスクスケジューリング

ディスパッチャで、どのタスクに使用権が割り当てられるかを決めるためには、タスクの実行順序を決める必要があります。。これをタスクスケジューリングと呼びます。

タスクスケジューリングにはさまざまな方式がありますが、いくつか紹介します。

到着順方式

タスクが実行可能状態になった順番に処理する方式です。
タスクに優先度の概念がありませんので、一旦実行すると途中で、CPUの使用権が奪われることはありません。(これをノンエンプティブ方式と呼びます。)
短所として処理時間の長いタスクがCPUを独占してしまう場合があります。

優先順(プライオリティ順)方式

タスクに優先順位を設定し、優先度の高い順にタスクを実行します。
実行中のタスクがある場合でも、実行中のタスクより優先度の高いタスクが追加されると「CPU」の使用権が優先度の高いタスクに奪われます。(これをプリエンプション方式と呼びます。)
短所として優先度の低いタスクの応答時間が極端に長くなる事があります。

動的優先度順方式

基本は優先度順方式と同じですが、待ち時間の長さに応じて優先度を徐々に上げていく方式です。

ラウンドロビン方式

各タスクにCPUを使用する時間を定め(タイムクォンタム)、その時間内に処理が終わらない場合は、次のタスクに使用権が与え、待ち行列の最後にまわす方式です
(これをプリエンプティブ方式と言います。)

多重待ち行列方式

ラウンドロビン方式に優先順位を加えたた方式です。

処理時間順方式

各タスクの処理時間が短いものから処理する方式です。

イベントドリブン方式

マウス操作によるイベントでCPUの使用権を切り替える方式です。

マルチプログラミング

タスクの管理の役割は、CPUの無駄な時間を減らすことです。つまり、遊休時間を最小限にすることが大事なのです。

遊休時間

CPUが遊んでいて使われていない状態のことです。アイドルタイムとも言います。

マルチプログラミング

つまり120msかかるタスクの中で、80msもの間CPUは仕事をせず遊んでい流のです!!

プログラムというものはCPUによる処理と入出力とが繰り返されながら動きます。なので、入出力が働いている時はCPUは基本働きません。
マルチ(多重)プログラミングと言うのは、複数のプログラムを見かけ上同時に実行して見せることでこうした遊休時間を減らし、CPUの効率を高めようとするものです。

例えば、次のような2つのタスクを実行した場合、マルチプログラミングでどのように効率が上がるのかと言いますと
どちらも120msかかるため、2つで240msかかる計算になります。
プログラムAはプログラムBよりも優先度が高いマルチプログラムで実行すると、次のようになります。

マルチプログラミング

マルチプログラミング

本来、240msかかるはずの2つのタスクが130msで終了できることがわかります。CPUの遊休時間は2つ合わせて160msあったのが50msまで短縮できています。さらに、この図を見る限り、もっと他のタスクも一緒に実行できそうです。これがマルチプログラミングの効果です。

割込み処理

実行中のタスクを中断して、別の処理に切り替え、そちらが終わるとまた元のタスクに復帰する…という処理のことを割り込み処理と呼びます。
割り込み処理は、実行中のプログラムが原因で生じる内部割り込みと、プログラム街の要因で生じる外部割り込みに分かれます。

内部割込み

種類説明
プログラム割込みゼロによる除算や桁あふれ(オーバーフロー)、仮想記憶において存在しないページへのアクセスが生じたり、書き込みできない主記憶装置に書き込もうとした記憶保護例外などの場合に生じる割込みです。
SVC(Super Visor Call)割込み入出力処理を要求するなど、カーネル呼び出し命令が発行された時に生じる割込みです。
[Super Visor(スーパーバイザー)]とはカーネルの意味です。

外部割込み

種類説明
入出力割込み入出力装置の動作完了時や中断時に生じる割り込みです
機械チェック割込み電源の異常や主記憶装置の障害など、ハーデウェアの異常発見時に生じる割り込みです。
コンソール割込みオペレータ(利用者)による介入が行われた時に生じる割り込みです。
タイマ割込み規定時間を過ぎた時に生じる割込みです。

コメント

タイトルとURLをコピーしました