この記事では、タスク管理について、初心者にも分かりやすく、図解付きで丁寧に解説しています!
CPUのタスク管理
- CPUが処理する命令の単位がタスク。
- タスクは実行状態・実行可能状態・待ち状態の3つの状態を取る。
- CPUは「実行状態」のタスクを処理する。
- CPUの使用権が別のタスクに移ることをコンテキスト切替えと呼ぶ。
- 優先度が高いタスクが発生したり、上限以上に処理時間が掛かる等して、
コンテキスト切替えが強制的に発生するタスク管理の方法をプリエンプティブ方式と呼ぶ。 - 処理が完了したり、タスク自身が中断を要求しない限り、コンテキスト切替えが発生しないタスク管理の方法をノンプリエンプティブ方式と呼ぶ。
タスクの並行処理
- 入出力装置が処理している間、CPUに別のタスクの処理をさせると処理効率が上がる。
- 複数のタスクを並行して処理する場合、同時に実行できるタスクの数をタスク多重度と呼ぶ。
割込み処理
- 割込み処理とは、実行中のプログラムを強制的に中断して実行される処理。
ジョブとタスクの違い
ジョブは人間から見た仕事の単位で、タスクはコンピュータから見た仕事の単位です。
人間がコンピュータに依頼した1つのジョブを、コンピュータは複数のタスクに分割して処理するってことですね。

CPUのタスク管理
目の前にあるコンピュータは複数のタスクを実行しないといけないですが、実は同時に全てを処理しているわけではありません。
それぞれのタスクの優先度を決めて、どれにCPUの使用権を与えるか考えながら、処理しているんですね。「タスクの優先度を決めて、優先度が高いタスクにCPUの使用権を与える」ことをタスク管理と呼びます。

タスクには3つの状態がある
タスクの状態には「実行状態」「実行可能状態」「待ち状態」の3つがあり、タスクが生成されてから、この3つの状態を経てタスクが完了し消滅します。
実行状態 :CPUがタスクを実行している状態
実行可能状態:CPUがタスクを実行するのを待っている状態
待ち状態 :他のタスクが入出力装置を使用しているので待っている状態
タスクはこの3つの状態を下の図のように遷移しながらCPUに処理されていきます。

タスクが生成されると実行可能状態になります。そして、CPUがタスクを実行できるようになれば実行状態に遷移します(①)。しかし、より優先度が高いタスクが生成されると、先にそちらを処理しなければいけません。なので、実行可能状態に戻されます(②)。
入出力装置による処理が発生すると待ち状態に遷移します(③)。そして、他で実行していた入出力処理が完了したら再度、実行可能状態に遷移し(④)、タスクの使用権が回ってくると実行状態になり入出力処理も実行します(①)。
ちなみに、タスクを実行可能状態から実行状態にすることをディスパッチと言い、逆に実行状態から実行可能状態にすることをプリエンプションと言います。実行中のタスクから別のタスクへとCPUの使用権が変わることをコンテキスト切替えと言います。

実行可能状態と待ち状態の違い
実行可能状態はCPUが空くのを待つ状態が、待ち状態は入出力装置が空くのを待つ状態です。
実行状態でタスクの計算処理が完了したら、最後は入出力処理を実行してユーザに結果を返す必要がありますが、入出力装置はCPUに比べて処理速度が遅いので一旦待ち状態に移しておきます。
CPU使用権の優先順序
実行可能状態にある複数のタスクの中で、どのタスクを実行状態に移すのかを決める方式には優先度方式とラウンドロビン方式があります。
優先度方式
優先度が高いタスクにCPUの使用権を与える方式です。

ラウンドロビン方式
CPUの使用権を一定時間毎に切り替える方式です。たとえタスクが完了しなくても、一定時間が経過すると強制的にチェンジします。

コンテキスト切替えが強制的に行われる方式をプリエンティブ方式と言います。
優先度方式やラウンドロビン方式は、優先度の高いタスクが追加されたり、使用時間が来たら、別のタスクへと強制的に切り替わるので、プリエンティブ方式ですね。
一方、強制的にコンテキスト切替えが行われない方式をノンプリエンティブ方式と言います。ノンプリエンティブ方式の場合、タスクの処理が完了するか、タスクが自主的に中断しない限り、CPUの使用権が切り替わりません。
タスクの並行処理
例えば、次のようなプログラムを2つ実行するとします。

普通に実行すると、全部で160ミリ秒掛かります。

しかし、入出力装置が動いている90ミリ秒の間、CPUが何もしていないので非効率です。
そこで、入出力装置が動いている間、CPUには別のプログラムの処理をしてもらうようにしましょう。
プログラムAの処理の流れをCPUと入出力装置に分けて書くと次のようになります。

ここにCPU処理が被らないようにプログラムBの処理を追加していきます。ここでは、プログラムAとBの入出力装置は別のものだとします。

すると、全体の処理時間は90ミリ秒になり、元の160ミリ秒から70ミリ秒も短縮出来ます。このように、CPUを効率よく使い、複数のプログラムをあたかも同時に実行しているかのように見せる技術をマルチプログラミングと言います。
また、マルチプロセッサを搭載したパソコンの場合、複数のタスクを並行で実行できます。
同時に実行できるタスクの数をタスク多重度と呼びます。例えば、タスク多重度が2の場合、2つのタスクを同時に実行できます。
割込み処理
割込み処理とは実行中のプログラムを中断して強制的に実行される処理のことです。アラームや入出力の完了連絡、プログラム内でのゼロ除算によるエラーメッセージの表示など、ユーザにどうしても知らせないといけない事態が起きた時に割込み処理が発生します。
割込み処理が発生したら、CPUの使用権が割込み処理に与えられ、割込み処理が終わったら、元のタスクに使用権が戻ってきます。

応用情報技術者試験での出題例
令和6年度秋期問16
応用情報技術者
午前試験 令和6年度秋期問16
タスクスケジューリング方式の説明のうち,特定のタスクがCPU資源の割当てを持ち続ける可能性が最も高いものはどれか。
ア 各タスクの優先度を決めて,優先度が高い順に実行し,CPU割当てまでの待ち時間の長さに応じて優先度を徐々に上げていく。
イ 各タスクを実行可能待ち行列に置かれた順に実行し,一定時間が経過したら実行を中断して実行可能待ち行列の最後尾に加える。
ウ 処理予定時間が最も短いタスクから順に処理を実行する。現在実行中の処理が終了するか,又は何らかの要因によって中断されたとき,次のタスクを開始する。
エ タスクがシステムに到着した順に実行可能待ち行列の最後尾に加え,常に実行可能待ち行列の先頭のタスクにCPUを割り当てる。
正解は”ウ”
ア 優先度が高い順に実行するので、優先度が低いタスクは待ちが長いように思えますが、待ち時間が長いタスクの優先度は上がっていきます。
イ 行列に並んだ順に実行されていき、しかも、一定時間CPUを使用したら、タスクが終わってなくても最後尾に回されるので、どのタスクも良い感じにCPUの使用権を与えられそうですね。
ウ 処理予定時間が短い順から実行するので、処理時間が長いタスクは待ち時間が長くなります。しかも、アのように待ちが長いから優先度が上がるということもなく、イのように一定時間で使用権を交代することもないので、短いタスクが来続けるとずっと待ち続ける可能性が出てきます。
エ 行列に並んだ順に実行されていくので、ずっと待ち続けるということは無さそうです。
以上のことから、CPU資源の割当てを待ち続ける可能性が最も高いのは、ウだと考えられますね。
令和6年度春期問16
応用情報技術者
午前試験 令和6年度春期問16
ノンプリエンプティブ方式のタスクの状態遷移に関する記述として,適切なものはどれか。
ア OSは実行中のタスクの優先度を他のタスクよりも上げることによって,実行中のタスクが終了するまでタスクが切り替えられるのを防ぐ。
イ 実行中のタスクが自らの中断をOSに要求することによってだけ,OSは実行中のタスクを中断し,動作可能な他のタスクを実行中に切り替えることができる。
ウ 実行中のタスクが無限ループに陥っていることをOSが検知した場合,OSは実行中のタスクを終了させ,動作可能な他のタスクを実行中に切り替える。
エ 実行中のタスクより優先度が高い動作可能なタスクが実行待ち行列に追加された場合,OSは実行中のタスクを中断し,優先度が高い動作可能なタスクを実行中に切り替える。
正解は”イ”
ノンプリエンプティブ方式では、タスクが自らOSに中断を要求しない限り、実行中のタスクは中断されません。よって、答えはイとなります。
令和6年度春期問18、令和4年度春期問19
応用情報技術者
午前試験 令和6年度春期問18、令和4年度春期問19
複数のクライアントから接続されるサーバがある。このサーバのタスクの多重度が2以下の場合,タスク処理時間は常に4秒である。このサーバに1秒間隔で4件の処理要求が到着した場合,全ての処理が終わるまでの時間はタスクの多重度が1のときと2のときとで,何秒の差があるか。
ア 6 イ 7 ウ 8 エ 9
正解は”イ”
タスク多重度が1の場合は、処理が終わるまでに16秒、
タスク多重度が2の場合は、処理が終わるまでに9秒、掛かります。

よって、差は7秒です。
令和5年度秋期問17
応用情報技術者
午前試験 令和5年度秋期問17
プリエンプティブな優先度ベースのスケジューリングで実行する二つの周期タスクA及びBがある。タスクBが周期内に処理を完了できるタスクA及びBの最大実行時間及び周期の組合せはどれか。ここで,タスクAの方がタスクBより優先度が高く,かつ,タスクAとBの共有資源はなく,タスク切替え時間は考慮しないものとする。また,時間及び周期の単位はミリ秒とする。

正解は”ア”
アでは、タスクBの周期は8ミリ秒ですが、タスクB自体は7ミリ秒で完了しています。
タスクBは周期内に完了していますね。

イでは、タスクBの周期は9ミリ秒ですが、タスクB自体は10ミリ秒で完了しています。
タスクBは周期内に完了していません。

ウでは、タスクBの周期は9ミリ秒ですが、タスクB自体は14ミリ秒で完了しています。
タスクBは周期内に完了していません。

エでは、タスクBの周期は15ミリ秒ですが、タスクB自体は17ミリ秒で完了しています。
タスクBは周期内に完了していません。

よって、答えはアです。
令和5年度春期問14
応用情報技術者
午前試験 令和5年度春期問14
CPUと磁気ディスク装置で構成されるシステムで,表に示すジョブA,Bを実行する。この二つのジョブが実行を終了するまでのCPUの使用率と磁気ディスク装置の使用率との組合せのうち,適切なものはどれか。ここで,ジョブA,Bはシステムの動作開始時点ではいずれも実行可能状態にあり,A,Bの順で実行される。CPU及び磁気ディスク装置は,ともに一つの要求だけを発生順に処理する。ジョブA,Bとも,CPUの処理を終了した後,磁気ディスク装置の処理を実行する。


正解は”イ”
CPUと磁気ディスクの使用状況は次のようになります。

ジョブAとBが完了するのに必要な時間は25ミリ秒で、そのうち、CPU処理は15ミリ秒、磁気ディスク処理は17ミリ秒掛かりました。
つまり、CPUの使用率は15ミリ秒÷25ミリ秒=0.6で、
磁気ディスクの使用率は17ミリ秒÷25ミリ秒=0.68となります。
令和4年度秋期問18
応用情報技術者
午前試験 令和4年度秋期問18
優先度に基づくプリエンプティブなスケジューリングを行うリアルタイムOSにおける割込み処理の説明のうち,適切なものはどれか。ここで,割込み禁止状態は考慮しないものとし,割込み処理を行うプログラムを割込み処理ルーチン,割込み処理以外のプログラムをタスクと呼ぶ。
ア タスクの切替えを禁止すると,割込みが発生しても割込み処理ルーチンは呼び出されない。
イ 割込み処理ルーチンの処理時間の長さは,システムの応答性に影響を与えない。
ウ 割込み処理ルーチンは,最も優先度の高いタスクよりも優先して実行される。
エ 割込み処理ルーチンは,割り込まれたタスクと同一のコンテキストで実行される。
正解は”ウ”
リアルタイムOSの割込み処理は最も優先度が高いため、最も優先して実行されます。よって、答えはウです。