タスク管理はCPUを遊休させることなく働かせ続け、効率的に利用することを目的としています。タスク間を行うことによって、CPUが暇になったら、別の仕事(タスク)を与えることができるようになり、複数の仕事を同時に実行するマルチタスクが実現でます。
あるタスクがCPUを使わなくなった時に、別のタスクを実行するようCPUに支持することが、タスク管理の基本的な役割です。
指示を的確に行うためには、どのタスクがどのような状態にあるのかを正確に把握しなくてはなりません。そこで、「実行可能状態」「実行状態」「待ち状態」の3つの状態を定義し、どのタスクがどの状態にあるのかを管理します。
1:実行可能状態
実行可能状態は、待合室で待っているのに相当する状態です。タスクを起動する(プログラムを実行する)と、起動したタスクは、自分順番がまわってきて、CPUが処理してくるのを待ちます。
2:実行状態
実行状態のタスクは、今まさに処理されている最中のタスクです。CPUが1つしかないのであれば、実行状態になれるタスクも1つしかありません。実行状態のタスクは、次の景気によって実行可能状態や待ち状態に移ります。
実行可能状態に移るのは、
①自分よりも最優先度の高いタスクが実行可能状態になった。
②自分の持ち時間(タイムスライス)が経過した。
③自らCPUを手放した
時です。
3:待ち状態
待ち状態は、倉庫にタスクが収納されているような状態です。タスクが入出力へのアクセスというのは、我々の感覚で言うと数週間もの時間がかかる作業です。このような長時間、「待合室(実行可能状態)」に居座られたのではじゃまですから、一旦倉庫に移しておいて、用事があれば取り出すことにしようという考え方です。
待ち状態に移されたタスクは、入出力装置から必要とするデータが到着すると(これを 入出力が完了する と言います)、実行可能状態へ移されます。入出力装置から必要とするデータが到着したことを知らせる信号が、入出力割込みです。