ジョブをジョブステップに分解された後にタスク管理に渡されることで、CPUの実行単位であるタスクが生成されます。
コンピュータから見た仕事の単位がタスクです。
プロセスとも呼ばれます。
単純にいうと、コンピュータでコマンドを叩いたり、アプリケーションのアイコンをダブルクリックしてプログラムがメモリにロードされて実行状態に入ることです。そのように動いているプログラムは一つだけではないと思います。
CPUは決して複数のことを同時に処理できるわけではありません。タスク管理の働きによって、CPUの使用権をタスク間に持ち回りさせたり、割り込みを処理したりすることで実現できています。
タスクの状態遷移
生成されたタスクには、次の3つの状態があります。
説明 | |
---|---|
実行可能状態(READY) | いつでも実行が可能な、CPUの使用権が回ってくるのを持っている状態。生成直後のタスクは、この状態になってCPUの待ち行列に並んでいます |
実行状態(RUN) | CPUの使用権が与えられて、実行中の状態 |
待機状態(WAIT) | 入出力処理が発生したので、その終了を待っている状態 |
生成されたタスクは、即座に実行されるわけではありません。
プログラムの処理が実行されるためには、CPUの使用権が必要です。この使用権をタスク間で効率よく回すことができるように、各状態を行ったり来たりすることになります。
そのタスク図が下記となります。
CPUの使用権は「実行可能状態」で待っているタスクしか得ることができません。入力出力処理で「待機状態」になったタスクが元の「実行状態」へ戻るためには、必ず一度「実行可能状態」を経由する必要があります。
ディスパッチャとタスクスケジューリング
実行可能状態で順番待ちしているタスクにCPUの使用権を割り当てるのはディスパッチャという管理プログラムの役割です。
ディスパッチャを日本語に訳すと「(係などを)派遣する人」「(バスなどの)配車係」という意味になります。
タスクにCPUの使用権が割り当てられることをディスパッチと言います。
この時、「どのタスクに使用権を割り当てるのか」を決めるためには、タスクの実行順序を定める必要があります。これをタスクスケジューリングと呼びます。
タスクスケジューリングには様々な方式がありますが、中でも次の3つが代表的です。
到着順方式
実行可能状態になったタスク順に、CPUの使用権を割り当てる方式です。タスクに優先度の概念がないので、実行の途中でCPU使用権が奪われることはありません(これをノンプリエンプション)と言います。
優先順(プライオリティ順)方式
タスクにそれぞれ優先度を設定し、その優先度が高いものから順に実行していく方式です。実行中のタスクよりも優先度の高いものが待ち行列に追加されると、実行の途中でCPU使用権が奪われます(これをプリエンプション)と言います。
ラウンドロビン方式
CPUの使用権を、一定時間ごとに切り替える方式です。
実行可能状態になった順番でタスクにCPU使用権が与えられますが、規定の時間内に処理が終わらなかった場合は、次のタスクに使用権が与えられ、実行中だったタスクは待ち行列の最後に回されます。
マルチプログラミング
タスク管理の役割は、CPUの有効活用につきます。つまりCPUの遊休時間を最小限にとどめることが重要です。
CPUがあそびの状態で使われていない時間のことをアイドルタイムといいます。
マルチプログラミングは複数のプログラムを見かけ上同時に実行して見せることで、遊休時間を減らし、CPUの利用効率を高めようとするものです。
一般的にはマルチタスクと呼ばれています。
割込み処理
割込み処理は、実行中のプログラムが原因で生じる内部割込みと、プログラム外の要因で生じる外部割込みに分かれます。
内部割り込み | |
---|---|
プログラム割り込み | ゼロによる除算や桁あふれ(オーバーフロー)、仮想記憶において存在しないページのアクセス(ページデフォルト)が生じたり、書き込みできない主記憶装置に書き込もうとした記憶保護例外などの場合に生じる割込み。 |
SVC(Super Visor Call)割込み | 入出力処理を要求するなど、カーネル呼び出し命令が発令されたときに生じる割込み(Super Visorとはカーネルの意味) |
外部割り込み | |
---|---|
入出力割込み | 入出力装置の動作完了時や中断時に生じる割込み。 |
機械チェック割込み | 電源の異常や主記憶装置の障害など、ハードウェアの異常発見時に生じる割込み。 |
コンソール割込み | オペレータ(利用者)による介入が行われたときに生じる割込み。 |
タイマ割込み | 規定の時間を過ぎたときに生じる割り込み。 |
まとめ
基本ソフトウェアはボリュームがありますが、個人的には大事なとこだと思うのでここは重点的にやります。