今回はソフトウェアやジョブ管理とタスク管理について説明しようと思います。
用語
- ミドルウェア:OSとアプリの間
- 制御プログラム:コンピュータの補助をする管理プログラム
- API:アプリに標準化されたインターフェースを提供
- デバイスドライバ:周辺機器を制御するソフトウェア
- プラグアンドプレイ:プラグを刺すだけで簡単
- OSS:ソースコード公開のソフトウェア
- OSI:OSSを認定する非営利団体
- BSDライセンス・GPL:←を押して読む
- ジョブ:利用者から見た仕事の単位
- タスク:OSから見た仕事の単位
- ジョブ管理:キュー構造
- タスク管理:←押して図入りの方が見やすい
- マルチタスク:CPUのアイドルタイムにタスクを割り当てる
- プリエンプティブ方式:OSがCPUを管理
- ノンプリエンプティブ方式:OSがCPUを管理せずプログラムに任せる
- 割込み:実行中のプログラムを一時中断し、別の処理に切り替える
各種ソフトウェア
まずはOSについて説明していきます。OSは基本ソフトウェアとも呼ばれ、ハードウェアやアプリケーションソフトウェア(後述)を管理・制御するソフトウェアになります。代表的なものとしてWindowsやmac OS、Linuxなどがあります。
そして、このOS上で稼働する特定の業務を行うソフトウェアのことをアプリケーションソフトウェア(応用ソフトウェア)といい、単にアプリとも呼ばれています。メールソフトや表計算ソフトなどが例として挙げられます。また、OSとアプリケーションの間に位置し、データベースとのやり取りなどを行っているソフトウェアのことをミドルウェアといいます。例としてはDBMSなどがあります。下図がそれぞれの立ち位置を図として表したものです。
コンピュータの効率的な利用を行うための管理プログラムのことを制御プログラムといいます。主な機能として、ジョブ管理(後述)、タスク管理(後述)、記憶管理、ファイル管理などがあり、記憶管理とファイル管理は次回説明しようと思います。
APIとOSS
アプリケーションに共通の標準化されたインターフェースを提供するためにOSなどが用意する仕組みのことをAPI(Application Programming Interface)といいます。ソフトウェアの開発者は1から処理内容を記述する必要がなく、APIを介してOSの各機能を呼び出すことができ、効率よくソフトウェア開発を行うことができます。
PCに接続された周辺機器を制御するソフトウェアのことをデバイスドライバといいます。ハードウェアとOSなどのソフトウェアを繋げる役割があり、最近ではプラグを刺すだけで自動的に必要な設定を行ってくれるプラグアンドプレイという仕組みもあります。
ここからはOSS(Open Source Software)について説明していきます。OSSはソースコードを公開しているソフトウェアのことをいい、無保証を原則として誰でもソースコードを書き換えて再配布することができます。OSI(Open Source Initiative)というOSSを認定する非営利団体がOSSの最低条件を決めており、「配布先となる個人やグループ、利用分野を制限しない」、「再配布で追加ライセンスを要求しない」、「特定製品に限定したライセンスにしない」などがあります。OSSの例としては、LinuxやEclipse、MySQLなどが挙げられます。
OSSのライセンス条件の代表的なものにBSD(Berkeley Software Distribution)ライセンスとGPL(GNU General Public License)というものがあります。説明は以下になります。
- BSDライセンス:無保証であること、改変後の再配布の際に元のソフトウェアの著作権表示部分やライセンスの条文は残すこと。
- GPL:上記に加えて、著作権を保持したまま、複製や改変、配布を認め、そこから派生した二次著作物にはオリジナルと同じ配布条件を適応するという制約があり、これをコピーレフトという。
ジョブ管理とタスク管理
ここからはジョブ管理とタスク管理について説明していきます。まず利用者から見た仕事の単位のことをジョブ、OSから見た仕事の単位のことをタスクといいます。関係を表したものが下図になります。
ジョブ管理の機能にジョブのスケジューリングというものがあります。コンピュータに入ったジョブは入力待ち行列に、処理後は出力待ち行列に登録され、これらはキュー構造(先に入ったものが先に出る構造)になっています。また、低速な入出力装置と主記憶装置の間のデータ転送を補助記憶装置を介して行うことをスプーリングといいます。これは主記憶装置と入出力装置の速度が合わず、主記憶装置に待ち時間ができてしまい効率が悪くなるため、補助記憶装置を間に介して主記憶装置に待ち時間ができないようにする機能です。
タスク管理では、タスクの生成から消滅までを、実行可能状態、実行状態、待ち状態の3つの状態で管理を行います。説明と図が以下になります。
- 実行可能状態:CPUの使用権が割り当てられるのを待つ状態
- 実行状態:CPUの使用権が割り当てられて実行している状態
- 待ち状態:他のタスクが入出力装置を使っているので、処理が終わるまで待機している状態
- 生成された直後のタスクが実行可能状態へ
- 実行するタスクを選択し、CPUの使用権を割り当てる(ディスパッチ)ことで実行状態へ
- 他に優先度の高いタスクが実行可能状態になると、割込み(後述)が起きて現在実行状態のタスクは実行可能状態へ
- 入出力待ちが起きた場合に、処理が終わるまで待ち状態へ
- 入出力の処理が終わり、実行可能状態へ
タスク管理に関すること
まずはタスクのスケジューリングから説明していきます。複数のタスクから、どのタスクにCPUの使用権を割り当てるかを決める方式が以下の4つになります。
- 到着順方式:実行可能待ち行列の先頭から順に割り当てる
- 処理時間順方式:処理予定時間が最も短いタスクから順に割り当てる
- 優先度順方式:優先度の高いタスクから順に割り当てる
- ラウンドロビン方式:先頭から順に割り当て、一定時間(タイムスライス)が経過した場合は中断して実行可能待ち行列の最後尾に加える
CPUが何もしていない時間(アイドルタイム)にタスクを割り当てることで、複数タスクの並列処理をしているように見せる方式のことをマルチタスク、もしくはマルチプログラミングといいます。これを使うことで、複数タスクの処理が速くなりCPUの利用効率が上がります。また、タスクの実行方式に、OSがCPUを管理せずプログラムに任せるノンプリエンプティブ方式と、OSがCPUを管理するプリエンプティブ方式があります。現在はプリエンプティブ方式が主流です。
ここからは割込みについて説明していきます。実行中のプログラムを一時中断し、必要となる別の処理に切り替えることを割込みといいます。割込みの処理が終わると、切り替えられたプログラムは中断された場所から再開されます。割込みの中でも、実行中のプログラムが原因で起こるのを内部割込み、実行中のプログラム以外が原因で起こるのを外部割込みといいます。
まとめ
以上がソフトウェアとジョブ・タスク管理の説明でした。「APIとOSS」の説明では文字ばかりで少し読みにくいかもしれません…。
コメント