現在、私は秋の基本情報技術者試験に向けて勉強中です。
その中で、私が得た知識をまとめて記事にしています。
本記事のテーマ
タスク管理とは
コンピュータから見た仕事の単位がタスク。ジョブステップの実行準備が整うことで、タスクが生成されます。
タスクとは、コンピュータの実行中と識別できる仕事の単位です。プロセスとも呼ばれます。厳密的には違いますが、情報処理試験的には同じもの扱いになっています。
単純に言うと、コンピュータでコマンドを叩いたり、アプリケーションをダブルクリックしたりして、プログラムがメモリにロードされて実行状態に入る、あれのことです。
ただし、CPUは複数のことを同時に処理することができません。そこで、CPUの使用権をタスク間で持ち回りさせたり、割り込みを処理したりすることをタスク管理で実行しているのです。
タスクの状態遷移
生成されたタスクには、次の3つの状態があります。
実行可能状態(READY):いつでも実行が可能な、CPUの使用権が回ってくるのを待っている状態。生成直後のタスクは、この状態になって、CPUの待ち行列に並んでいます。
実行状態(RUN):CPUの使用権が与えられて、実行中の状態
待機状態(WAIT):入出力処理が発生したので、その終了を待っている状態。
生成されたタスクは、即座に実行されるわけではなく、実行されるためには、CPUの使用権が必要となります。この使用権をタスク間で効率よく回すことができるように、各状態を行ったり来たりすることになるのです。
1:READY→ CPUの使用権が回ってきたら→ RUN タスクを実行
RUN → より優先度の高いタスクが出てきたらREADYに戻る→ READY
2:RUN → 入出力処理が発生したら→ WAIT 終わるのを待つ
3:WAIT → 入出力処理が終わったら→ READY 再度CPUの順番待ち
これらを1つの図にまとめるとこうなります。
CPUの使用権は、「実行可能状態」で待っているタスクしか得ることができません。だから、入出力処理で「待機状態」になったタスクが元の「実行状態」に戻るためには、必ず一度「実行可能状態」を経由する必要があります。
ディスパッチャとタスクスケジューリング
実行可能状態で順番待ちしているタスクに、CPUの使用権を割り当てるのは、ディスパッチャという管理プログラムの役割です。
※ディスパッチャ:「派遣する人」、「(バスなどの)配車係」
流れ:
実行可能状態→ ディスパッチャが使用権を割り当てる→ 実行状態
この時、「どのタスクに使用権を割り当てるのか」を決めるためには、タスクの実行順序を定める必要があります。これをタスクスケジューリングと言います。
次の3つが代表的です。
到着順方式
実行可能状態になったタスク順に、CPUの使用権を割り当てる方式です。タスクに優先度の概念がないので、実行の途中でCPU使用権が奪われることはありません。これをノンプリエンプションという。
優先度順(プライオリティ)方式
タスクにそれぞれ優先度を設定し、その優先度が高いものから順に実行していく方式です。実行中のタスクよりも優先度の高いものが待ち行列に追加されると、実行の途中でCPU使用権が奪われます。これをプリエンプションという。
ラウンドロビン方式
CPUの使用権を、一定時間ごとに切り替える方式です。
実行可能状態になった順番でタスクにCPU使用権が与えられますが、規定の時間内に処理が終わらなかった場合は、次のタスクに使用権が与えられ、実行中だったタスクは待ち行列の最後に回されます。
以上タスク管理の説明を終了します。
タスク管理方法として、マルチプログラミングと割り込み処理があるのですが、次回記事にて紹介します。
ーー追記ーー
マルチプログラミングと割り込み処理とは?
参考資料
・キタミ式イラストIT塾 基本情報技術者 平成31/01年