コンピュータシステム - 5.ソフトウェア - 1.オペレーティングシステム - 4.タスク管理

Last Update : January 02 2021 16:00:20

     

a. タスクと状態遷移

タスク
「タスク」とはコンピュータから見た仕事の単位(OSの下で実行される内部処理の単位)。
タスクは、プログラムの処理を細分化した処理単位です。


  1. タスクの生成・・・プログラムを実行したとき、タスクが生成される。生成されたタスクは実行可能状態の待ち行列に並ぶ。

  2. タスクの実行・・・実行可能状態のタスクのうち優先度の高いタスクにCPUを割り当て、そのタスクを実行状態に移す。このことをディスパッチという。ディスパッチを行うOSの機能をディスパッチャという。

  3. 入出力操作の要求・・・実行中のタスクに入出力の処理が発生した場合、入出力動作中はCPUを必要としないので、このタスクを実行待ち状態に移し、他のタスクを実行状態にする。
    タスクがスーパーバイザーコール割り込みを発生させ、入出力要求をした場合は、入出力の終了まで、待ち状態になる。

  4. 入出力(終了)割り込み・・・入出力動作が終了すると、入出力装置より入出力割り込みがかけられ、タスクは実行待ち状態から実行可能状態に移される。

  5. タイマ割り込み・・・ディスパッチャは複数のタスクを均等に実行するため、実行中のタスクがCPU使用時間を超えたり、優先度の高いタスクが実行待ち状態に現れると、現在のタスクを実行可能状態に戻し、優先度の高いタスクを実行状態に移す。

※「ディスパッチャ」とは、実行可能状態のタスクから優先順位の高いタスクを実行状態にしたり、実行状態のタスクを中断させたり、CPUの割り当ての切り替えを行うプログラムです。
CPUスケジューラともいう。
※「スーパバイザ(SV)」とは、不定期に発生するプログラム上の割込みの監視を行うプログラムを言う。

※「プロセス」これは、実行中のプログラムを指しタスクと同じ意味で使用される。プロセスは、UNIXで使用されていた用語。
※「スレッド」マルチスレッドOSにおけるプログラム実行の単位のことを言う。マルチスレッドOSでは、プログラム(プロセス)の中で複数のスレッドを実行することができる。

ポーリング制御
主となるシステムや機器が複数の別の機器やシステム・プログラムに対し一定のタイミングで順番に問い合わせ、応答があったり、条件を満たした場合に、送受信、処理を実行する仕組みのこと。
コンピュータと周辺機器が一つの通信路で繋がっている場合のように、複数のシステムが独立に動作して主システムと通信しているような状況では、各システムが自らのタイミングで通信を行うと処理や信号が他のシステムと競合して不具合を生じる場合がある。それを防ぐために主システム側から問い合わせるようにしている。


b. 多重(マルチ)プログラミング(マルチタスク)

マルチタスク
1つのコンピュータシステムにおいて、複数の処理(タスク)を同時に実行すること。このような処理を可能にするオペレーティングシステムは、マルチタスクOSなどと呼ばれる。
本来、コンピュータは、プログラムコードを逐次処理することしかできず、厳密にはまったく同時に複数の処理を行うことはできない。ただし逐次処理は非常に高速に実行されるため、あるタスクをごく短い時間だけ処理し、次に別のタスクを短時間だけ処理し…、ということを繰り返し行うことで、人間の目からはあたかも複数の処理が同時実行されているように見えるようになる。

マルチタスクの実現方式には、ノンプリエンプティブ(non-preemptive)方式とプリエンプティブ(preemptive)方式の2種類がある。

プリエンプティブ方式
プリエンプティブ方式では、同時実行されるタスクをオペレーティングシステムが完全に掌握し、ハードウェアタイマ割り込みにより、一定時間内(タイムスライス)に強制的にオペレーティングシステム(OS)に制御が移る。OS は一定の方式に従い次のタイムスライスを実行中のタスク・スレッド(マルチスレッドOSの場合)に CPU を割り当てる。タスクを強制的に切り替えていく。この方式では、オペレーティングシステムの負担が重くなるが、アプリケーションの自主性によらずにシステムを制御できるので、より信頼性の高いオペレーティングシステムを実現できるという長所がある。
タスクを切り替える間隔をタイムクウォンタムと呼ぶ。この時間が長ければ長い程、システムの負荷が低い。しかし、一定期間内で同時に処理できる数はタイムクウォンタムに反比例する。この為、サーバ向けの OS ではタイムクウォンタムは短くして応答を良くする様に調整される。
また、タスクの切り替え時、優先度に関係なく順番に CPU を割り当てる方式をラウンドロビン(巡回的並列処理)という。ラウンドロビン方式ではすべてのタスクが平等に扱われる。

ノンプリエンプティブ方式
ノンプリエンプティブ方式は、同時実行されるアプリケーションが、一定時間ごとに自主的に CPU を解放することで、他のアプリケーションが動けるようにするものである。協調的マルチタスクあるいは疑似マルチタスクと呼ばれることもある。この方式では、オペレーティングシステム側に強制力がなく、アプリケーションが何らかの理由で CPU を解放しなければ、永遠に他のタスクは実行されないという大きな欠点がある一方で、オペレーティングシステム側の処理はほとんど必要がなく、比較的低性能のシステムでも実用的な環境を実現可能という長所がある。


c. タスクスケジューリング

複数のタスクを効率的に切り換えてシステム資源を有効に利用し、スループットやレスポンスの向上を実現するためにスケジューリングが用いられる。適正なスケジューリングを行うためには、トリガと優先順位が重要になる。

トリガ
タスクを切り替えるタイミング。トリガにはイベントドリブン方式とタイムスライス方式がある。

  • イベントドリブン方式
    システムの状態に変化が生じたときCPUを別のタスクに切り替える方式である。切替のイベントには、入出力の完了、入出力要求の発生、新しいタスクの到着、タスクの完了等がある。
  • タイムスライス(時分割)方式
    システムの状態変化と無関係に周期的にタスクを切り替える方式で、各タスクに割り当てられたタイムスライス(タイムクォンタム・一定時間)を利用して行う。一般的にはタイムスライスの大きさは数十ミリ秒から数百ミリ秒の範囲を用いる。

優先度
実行するタスクを選択するときの基準
マルチプログラミングでは、ディスパッチャが複数のタスクの中から実行を許可するタスクを選択し、CPUを割り当てる。この割り当て方法に複数の方式がある。

  • 優先度順方式
    各タスクに優先順位が付けられる。後に到着したタスクの優先順位が処理中のタスクより高ければ、処理中のものを中断し、到着タスクを処理する。
    ただし、優先度順の場合は、次々に優先度の高いタスクが発生すると、優先度の低いタスクは順番が回ってこないスタベーションの状態になり、エイジングにより優先度の低いタスクの優先度を高める解決策が必要になる。

  • 到着順方式
    タスクは優先順位を持たず、到着順に実行可能なタスクを実行する方式。First Come First Served (FCFS) 方式とも呼ばれる。

  • ラウンドロビン方式
    トリガとして一定時間ごとに処理するタイムスライス方式を採用。 各タスクを待ち行列に置かれた順にタイムクォンタムずつ処理し、終了しないときは同じ優先順位の待ち行列の最後尾につなぐ。

  • 処理時間順方式
    処理時間の短いタスクを先に実行する方式。SJF方式(Shortest Job First)または、SPT(Shortest Processing Time First)方式とも呼ばれる。

  • フィードバック待ち行列方式
    一定時間内に処理が終了しない場合は、順次優先度を落としていく方式。 優先度毎に待ち行列をつくり、同じ優先度のタスクではラウンドロビン方式で実行する。

  • 動的優先順位方式
    長く実行を待っているタスクに実行のチャンスを与えるために、優先順位を動的に変更する方式。 各タスクの処理時間に比例して、タイムクォンタム(CPU割当て時間)を変更する。

  • デットラインスケジューリング
    デットラインスケジューリングは限られた時間内に処理を完了しなければならないアプリケーションに対するもので航空機制御、原子力発電制御、リアルタイム処理などに用いられる。特徴としては処理の完了すべき時間が設定され、その時間に近づくにつれて優先度を高くするので順位が動的に変化することである。



d. プログラムの種類

再使用不可能プログラム
実行中にプログラムの値が変更されるため、再度実行する場合はロードする必要がある。

再使用可能プログラム(リユーザブル)
一度実行したあと、再度繰り返して使用できるプログラム。実行中に変更した値が初期状態に戻るため再ロードする必要がない。
再使用可能プログラムでは、プログラムの実行中にある変数を変更しても、プログラムの最後(または最初)でリセットする。このため次のタスクは、一度使われたプログラムをそのまま再使用することができる。 再使用可能プログラムには以下の2種類があります。

  1. 逐次再使用可能プログラム
    1つのタスクの終了後、再ロードすることなく繰り返し使用することのできるプログラム。
    プログラムの実行によって変化しない作業部分と、プログラムの実行によってリアルタイムに変化するデータ部分とが、メモリ上に混在しているため、 逐次再使用可能プログラムでは、他のタスクがプログラムを使用している間は、次のタスクは同じプログラムを使うことができない。プログラムは複数のタスクを1つ1つの順番に実行する。

  2. 再入可能プログラム(リエントラント)
    タスクごとにデータ領域を持つことによって複数のタスクを並行して実行できるプログラム。
    再入可能プログラムでは、あるタスクがプログラムを使用している最中でも、次のタスクが同じプログラムを使用することができる。プログラムは複数のタスクを並列に処理する。
    プログラムの実行によって変化しない作業部分と、プログラムの実行によってリアルタイムに変化するデータ部分とが、メモリ上で分離されており、またタスクごとにデータ領域を用意できるためである。

再配置可能プログラム(リロケータブル)
主記憶上のどの位置に読み込まれても実行できるもの。「ペースアドレス指定方式」であることが必要。
再配置可能プログラムでは、命令のアドレス部が、相対アドレスで記述されている。このため、このプログラムを実行する際には、この相対アドレスに先頭アドレスを加算して有効アドレスとすればよい。すなわち、コードを書き換えることなくそのまま使える。

再帰プログラム(リカーシブ)
自分自身を呼び出して使うことのできるプログラム。
直接または間接的に自分自身を呼び出すことが可能なプログラム。代表的な再帰プログラムには、階乗計算プログラムなどがある。
再帰プログラムでは、処理に必要なデータを一時的に記憶しておくためにスタック領域を使用する。


  [ 例題 ] 
  1. 平成30年度秋期 問18  ラウンドロビン
  2. 平成28年度春期 問16  プリエンプティブなスケジューリング
  3. 平成27年度春期 問07  再入可能プログラム
  4. 平成27年度春期 問19  タスクスケジューリング
  5. 平成26年度秋期 問17  タスク
  6. 平成22年度春期 問08  再入可能プログラム
  7. 平成22年度秋期 問20  タスク
  8. 平成20年度春期 問28  タスクスケジューリング
  9. 平成20年度秋期 問29  タスクの状態遷移
  10. 平成20年度秋期 問32  スケジューリング


     

www.it-shikaku.jp