基本情報技術者 ~ソフトウェア[2]~



f:id:potato_head0809:20210116010233p:plain




こんにちは!ポテトヘッド(@potato_head0809)です!



前回はOSについて全体的に触れていきました。



前回の記事を見ていない方はこちらからご覧になってください!



 

potato-head0809.hatenablog.com

 



今回はOSの中核である制御プログラムで少し触れた、



「ジョブ管理」について触れていこうと思います!



f:id:potato_head0809:20200915073246p:plain



では、早速始めましょう!



ジョブ管理



ジョブとは、例えば自分がして欲しいと思う処理があったとします。



その内容をジョブ制御言語(JCL)で記述した指示書を作成し、



コンピュータに投入します。



この一連の流れが「ジョブ」ということになります。



文章だけでは分かりづらいと思いますので、



以下の図を見てください。



f:id:potato_head0809:20200915073148p:plain




コンピュータに投入されたとき、カーネルが働いています。



ジョブの順番を管理したり、CPUに割り当てたりしています。



f:id:potato_head0809:20200915074147p:plain



利用者から見た仕事の単位が「ジョブ」です。



ジョブを効率良く処理できるように、OSは実行スケジューラを管理します。



ジョブ管理の流れ



では、ジョブ管理の流れについて見ていきましょう。



ジョブ管理はカーネルが持つ機能の一つです。



この機能で利用者との間を橋渡しする管理プログラムがあります。



それは、「マスタスケジューラ」というものです。



f:id:potato_head0809:20200915073830p:plain




このマスタスケジューラは、ジョブの実行をジョブスケジューラに依頼します。



マスタスケジューラ自身は実行状態の監視に努めて、



必要に応じて各種メッセージを利用者に届けます。



続いては、依頼を受け取ったジョブスケジューラについて見ていきましょう。



以下の流れでジョブを実行しています。



f:id:potato_head0809:20200915075058p:plain




「リーダ」は依頼されたジョブを入力してジョブ待ち行列に登録し、



「イニシエータ」は優先度の高いジョブを持ってきて、



ジョブステップに分解します。



「ターミネータ」は実行を終えたジョブに割り当てられていた



ハードウェア資源を解放して、ジョブの結果を出力待ち行列に登録します。



「ライタ」は優先度の高いものから順にジョブ結果を出力します。



スプーリング



CPUと入出力装置では、処理速度に大きな差があります。



当然、CPUの方が早いです。



そこで、CPUが待たされなくて良いようにする解決法として、



入出力データを一旦高速な磁気ディスクに蓄える方法があります。



例えば、印刷したいデータを磁気ディスクに書き出したらCPUはすぐに



次の処理に移っていきます。これで、待ち時間は削減できます。



このような、低速の装置とのデータのやりとりを高速な磁気ディスクに



蓄えて、処理効率を高める方法を「スプーリング」と言います。



先ほどの説明を図で説明しているので、ご覧になってください。



f:id:potato_head0809:20200915081521p:plain




このスプーリングを利用することで、CPUの待ち時間を



削減することができるので単位時間あたりに処理できる仕事量を増やすことができます。



単位時間あたりに処理できる仕事量のことを「スループット」と言います。



まとめ



今回は以上になります。



ジョブがどのような流れで行われているのか、



それを効率的に行うには、



そういったものを見ていきました。



次回は今回と同様に制御プログラムで触れた、



「タスク管理」について触れていこうと思います。



最後までご覧いただきありがとうございました。



次回もお願いします!