この記事ではタスク管理についてIT初心者にも分かりやすく解説します。
CPUのタスク管理
- CPUが処理する命令の単位がタスク。
- タスクは実行状態・実行可能状態・待ち状態の3つの状態を取る。
- CPUは「実行状態」のタスクを処理する。
- CPUの使用権が別のタスクに移ることをコンテキスト切替えと呼ぶ。
- 優先度が高いタスクが発生したり、上限以上に処理時間が掛かる等して、
コンテキスト切替えが強制的に発生するタスク管理の方法をプリエンプティブ方式と呼ぶ。 - 処理が完了したり、タスク自身が中断を要求しない限り、コンテキスト切替えが発生しないタスク管理の方法をノンプリエンプティブ方式と呼ぶ。
タスクの並行処理
- 入出力装置が処理している間、CPUに別のタスクの処理をさせると処理効率が上がる。
- 複数のタスクを並行して処理する場合、同時に実行できるタスクの数をタスク多重度と呼ぶ。
リアルタイムOS
- リアルタイムOSとはリアルタイムで処理することを優先するOS。
- リアルタイムOSはプリエンプティブ方式。
応用情報ではタスク管理に関する問題が出ます。是非最後までご覧ください。
CPUが行う処理をタスクと呼ぶ
私たちはプログラムにデータや命令を入力し、CPUが計算や処理した結果を受け取ります。
私たちはプログラムに対して命令を指示していきますが、CPU内ではその命令を処理するために複数の計算や処理を行います。
ユーザがコンピュータに指示する命令の単位をジョブ、CPUが命令を分解して処理する単位をタスクと言います。
CPUのタスク管理
私たちがパソコンを使うとき、複数のアプリを立ち上げて並行して作業しますよね。ということは、CPUも同時に複数のタスクを持った状態になります。しかし、1つのCPUが同時に実行できるタスクは1つだけなので、優先順位を決めて効率よくタスクをこなす必要があります。
タスクには3つの状態がある
タスクの状態には「実行状態」「実行可能状態」「待ち状態」の3つがあり、タスクが生成されてから、この3つの状態を経てタスクが完了し消滅します。
実行状態 :CPUがタスクを実行している状態
実行可能状態:CPUがタスクを実行するのを待っている状態
待ち状態 :他のタスクが入出力装置を使用しているので待っている状態
タスクが生成されると実行可能状態になります。そして、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つのタスクを同時に実行できます。
リアルタイムOS
リアルタイムOSとは、その名の通り、リアルタイムで処理を行うことを優先したOSです。
リアルタイムOSは組込みシステムで用いられます。組込みシステムとは、産業機械や自動車などを制御するためにあらかじめ組み込まれたシステムのことです。
例えば、産業機械の場合、人が危険域に入ってきたら、すぐに機械を停止する必要があります。悠長に、他のタスクの順番待ちをしている暇はありません。「機械を停止する」という命令が発生したら、即座に処理する必要がある訳ですね。つまり、リアルタイムOSはプリエンプティブ方式のタスク管理をしていると言えます。
応用情報技術者試験での出題例
令和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の割込み処理は最も優先度が高いため、最も優先して実行されます。よって、答えはウです。