1.タスクの状態(プロセスの状態)
プロセスの状態には、「待ち行列に登録されているプロセスの状態を実行可能状態,実行中のプロセスの状態を実行状態」の他に、「待ち状態」があります。過去問(H20FE秋午前問29)では、コンピュータのタスクの状態遷移として、次の図が記載されています。

また、実行状態のタスクが、「自分より優先度の高いタスクが実行可能状態になった」ことで、実行可能状態に遷移するともあります。

なんかややこしいですね。
なぜ、そんな3つの状態があるのですか?
例えがいいか分かりませんが、以下と考えてはどうでしょう。
大きな病院で初診受付をしたとします。
・最初は、病院側の先生が決っていない状態で、今すぐ診察を受けられない状態ですから、受付でしばらく待ちます(⇒待ち状態)
・病院側は、問診票や先生の空き状況などを踏まえて先生が決ったら、患者さんに連絡します「○○先生の診察になりますので、第△診察室の前でお待ちください。これで、先生が空いたら診察を受けることができます。(⇒実行可能状態)
・前の患者さんの診察が終わったら、診察を受けられます(⇒実行状態)
※ここで、実行状態にあっても、途中で検査したりすると、もう一度診察を受けるまで、診察室の前で待つことがあります。(⇒実行可能状態に戻ります)
患者さんの数に対し、先生の数は圧倒的に少ないものです。よって、患者さんの状態(優先度)も確認しながら、患者さんを先生に割り当てていく作業が必要になります。
コンピュータも同じで、CPUにはいくつものプロセスがやってきます。CPUの数は限られていますから、そのプロセスの実行順序を決めるのがOSの役割であり、これがタスク管理です。
また、プロセスの実行順序を決定する方式にはいくつかの方式があり、到着順方式や、ラウンドロビン方式、優先度順方式などがあります。
以下にも解説しています。
http://sm.seeeko.com/archives/15876963.html

実行可能状態と待ち状態の違いがよく分かりません。
以下のように考えるといいかもしれません。
・実行可能状態:CPUが割り当てられればすぐに処理ができる。
・待ち状態:CPUが割り当てられても処理ができない。他からの入出力を待つなど
まあ、具体的に考えた方がいいですね。ブラウザを起動して検索を実行する場合で考えましょう。
①ブラウザを起動するためにクリックする⇒この時点では、実行されません。CPUが割り当てられないからです。よって、「実行可能状態」です。
②CPUが割り当てられる⇒「実行状態」になります。
③CPUは順番に割り当てられるので、まだ処理は残っているけど決められた自分の番が終わったら⇒実行可能状態(次のCPUが空くのを待つ)
④ブラウザの起動が終わり、ユーザからの次のアクション(たとえば、リンクをクリックするとか、検索キーワードを入力して検索するとか)を待っている状態になります。→待ち状態
⑤ブラウザを閉じる⇒タスクを終了させる
タスクマネージャもみてみましょう。実行状態にあるタスクにはCPUが割り当てられています。
CPUの利用が0%のタスクもたくさんそんざいします。これは、実行可能状態や待ち状態のタスクです。

2.プリエンプティブとノンプリエンプティブ
皆さんもお仕事されているとき、仕事は山のように降ってきますから、受け取った順に仕事をするのではなく、優先順位などをつけて仕事を調整されますよね。コンピュータでも同じで、マルチタスク環境では、このように優先度に応じた仕事をする機能は必須になります。これがプリエンプティブです。
※preemptiveとは「先買権のある」という意味です。出典は、EXCEED 英和辞典(goo 辞書)より
プリエンプティブではない(=ノンプリエンプティブ)であれば、あるタスクがCPUを独占すると、他のタスクが実行できなくなってしまいます。過去問(H27春FE午前問19)では、「ノンプリエンプティブなスケジューリング方式の説明」として、「実行状態としたタスクが自ら待ち状態に遷移するか終了するまで,他のタスクを実行状態とすることができない」とあります。

タスクスケジューリングには、到着順やラウンドロビンなど、いくつかの方式がありましたよね?
具体的にどれがプリエンプティブなのでしょうか。
では、過去問(H28春AP午前問19)をみてみましょう。
問19 ノンプリエンプティブだけのスケジューリング方式はどれか。 ア 残余処理時間順 ウ 優先度順 イ 到着順 エ ラウンドロビン |
ここにありますように、到着順だけがノンプリエンプティブで、それ以外はすべてプリエンプティブです。
3.タスクの状態に関する過去問
(1)過去問(H21秋AP午前問19)
問19 リアルタイムOSのマルチタスク管理機能において,タスクAが実行状態から実行可能状態へ遷移するのはどの場合か。 ア タスクAが入出力要求のシステムコールを発行した。 イ タスクAが優先度の低いタスクBに対して,メッセージ送信を行った。 ウ タスクAより優先度の高いタスクBが実行状態となった。 エ タスクAより優先度の高いタスクBが待ち状態となった。 |
優先度の高いタスクBが実行状態となると、タスクAは実行可能状態になります。
(2)H29秋AP
問16 リアルタイムOSにおいて,実行中のタスクがプリエンプションによって遷移する状態はどれか。ア 休止状態
イ 実行可能状態
ウ 終了状態
エ 待ち状態
↓
↓
↓
↓
↓
【正解】イ
(3)H27秋AP
問16 プリエンプション方式のタスクスケジューリングにおいて,タスクBの実行中にプリエンプションが発生する契機となるのはどれか。ここで,タスクの優先度は,タスクAが最も高<, タスクA>タスクB =タスクC>タスクDの関係とする。ア タスクAが実行可能状態になった。
イ タスクBが待ち状態になった。
ウ タスクCが実行可能状態になった。
エ タスクDが実行可能状態になった。
↓
↓
↓
↓
↓
【正解】ア
(4)H27春FE午前問19
問19 ノンプリエンプティブなスケジューリング方式の説明として,適切なものはどれか。 ア 新しいタスクが実行可能状態になるたびに,各タスクの残りの実行時間を評価し,その時間が短いものから順に実行する。 イ 実行状態としたタスクが決められた時間内に待ち状態に遷移しないときに,そのタスクを中断して実行待ち行列にある次のタスクを実行状態とする。 ウ 実行状態としたタスクが自ら待ち状態に遷移するか終了するまで,他のタスクを実行状態とすることができない。 エ タスクが実行可能状態になったときに,そのタスクの優先度と,その時,実行状態であるタスクの優先度とを比較して,優先度が高い方のタスクを実行状態とする。 |
↓
↓
↓
↓
ア:処理時間順(残余処理時間順)方式
イ:ラウンドロビン
エ:優先度順
【正解】ウ
(5)H27春ES午前Ⅱ問10
問10 優先度に基づくプリエンプティブなスケジューリングで動作する,二つの周期タスクA,Bがある。AはBよりも優先度が高く,周期は2ミリ秒,実行時間は1ミリ秒である。Bの周期が10ミリ秒のとき,1周期中に実行を完了できるBの実行時間は最大何ミリ秒か。ここで,A,B以外のタスクはなく,タスク切替えによるオーバヘッドはないものとする。 ア 3 イ 5 ウ 7 エ 9 |
↓
↓
↓
↓
【正解】イ
(6)H27秋AP午前問16
問16 プリエンプション方式のタスクスケジューリングにおいて,タスクBの実行中にプリエンプションが発生する契機となるのはどれか。ここで,タスクの優先度は,タスクAが最も高<, タスクA>タスクB =タスクC>タスクDの関係とする。 ア タスクAが実行可能状態になった。 イ タスクBが待ち状態になった。 ウ タスクCが実行可能状態になった。 エ タスクDが実行可能状態になった。 |
↓
↓
↓
↓
【正解】ア
コメント