![](https://www.virtualinvader.com/wp-content/uploads/2019/05/hatena_penguin4.jpg)
・そもそもタスクってなに??
・イラスト使わない説明はくそっ!!
・専門用語の説明ないのもくそっ!!
今回の記事では、このようなペンギンでも満足の解説記事になっています。イラスト豊富で専門用語はすべて解説しています。さらに、わかりやすさを考え抜いた例が使われています。この記事が読み終わる頃には、タスクの状態遷移をすっきり理解できていることでしょう。
そもそもタスク(プロセス)って?
C言語などのプログラミング言語で書かれたプログラムというのは、ただの命令の集合体です。タスクというのは、このプログラムを実際に実行したものです。
つまり、プログラムが止まっているロボットであるとすれば、タスクはそのロボットに電気を流し、実際に動いている状態ということです。
また、タスクはプロセスと言われることがあります。
※タスク(プロセス)は場面によって色々な意味で扱われる用語であり、定義としては様々あります。
タスクの状態遷移
タスクには「待ち状態」「実行可能状態」「実行状態」の3状態が存在します。これは、CPUなどの資源に限りがあり、複数のタスクを同時に実行状態にすることができないためです。先ほどの例で言えば、電気がCPUにあたります。
タスクの状態遷移を一枚のイラストにまとめると、以下のようになります。(タスクをペンギンのロボットに見立ててあります。)
わからない単語がたくさんできたので、まずはその単語の意味を確認していきましょう。
関連用語
関連用語を先ほどの例も用いて、分かりやすく簡単に説明していきます。
実行状態
これは言葉の通り、タスクにCPUなどのシステム資源が割り当てられ、タスクが実行している状態のことです。先ほどの例で言えば、ペンギンロボットに電気が与えられ、荷物運びをしてくれています。
待ち状態
入出力要求などのタスク自体ではどうしようもできない処理が必要になり、CPUなどのシステム資源が与えられても何ともできない状態です。つまり、ペンギンロボが運ぶべき荷物が無くて、電気を流されてもどうしようもできない状態です。
より詳細な解説は、待ち状態とはをご覧ください。
実行可能状態
実行可能状態は、CPUなどのシステム資源が割り当てられさえすれば、すぐにでも動き出せる状態のことです。つまり、荷物が目の前に存在し、電気さえ流してくれれば、すぐにでも運び出せる状態のことです。
より詳細な解説は、実行可能状態とはをご覧ください。
プリエンプション
実行中のタスクに割り当てられているCPUを奪うことです。奪われたタスクは動作を一時中断し、実行可能状態になります。荷物を運んでいるペンギンロボに指しているコードを他のロボに指しこみ、起動させることにあたります。
詳しくは、【3コマ漫画付き】プリエンプションとはをご覧ください。
ディスパッチ
CPUを割り当てる処理のことです。つまり、ペンギンロボに電気を流し、起動させることを意味します。
このディスパッチを行うシステムのことをディスパッチャと呼びます。
タスクの状態遷移の詳細説明
タスクの生成
タスクの生成というのは、プログラムを実行するということです。全てのタスクは生成された後、いきなり実行はされずに実行可能状態として存在します。
ディスパッチ(資源の割り当て)を行うことにより、実行可能状態から、実行状態に遷移します。
タスクの終了
実行状態のタスクがその処理を終えたとき、タスクは終了し、タスク遷移の循環から抜けます。これをタスクの終了または、タスクの消滅などと言います。
実行状態→待ち状態
入出力要求など、タスク自体ではどうしようもない事象が起きたときには、タスクは待ち状態に入ります。そして、タスクが待ち状態に入ったら、他のタスクにCPU割り当て(ディスパッチ)を行い、効率的にシステム資源を使います。
待ち状態→実行可能状態
入出力処理などの、タスク自身ではどうしようもない処理が終了すると、ディスパッチ待ちの実行可能状態になります。実行可能状態にあるタスクは通常、複数個存在します。
この先の学習
コンテキスト切り替え
準備中です
プリエンプティブ
準備中です
ノンプリエンプティブ
準備中です
スケジューリング
準備中です
まとめ
タスクの状態には、「待ち状態」「実行可能状態」「実行状態」の3状態が存在します。それぞれの状態は、CPUが割り付けられているのか、すぐに仕事ができる状態なのかの組み合わせと言えます。
この辺りの踏み込んだことを勉強する場合には、OSの本で勉強するのが良いです。
コメント