資格道場 › レッスン一覧 › ソフトウェア
ソフトウェア・2/10・12分

タスクの状態とスケジューリング方式

ゴール

タスクの3つの状態(実行・実行可能・待ち)と、その間の4本の矢印がどんなときに起きるかを説明できるようになる。あわせて、ディスパッチの手順、主なスケジューリング方式(プリエンプティブ・ノンプリエンプティブ・ラウンドロビン・処理時間順)、リアルタイムOSを使う理由を選択肢から見分けられるようになる。

CPUは1つの瞬間に1つのタスクしか動かせないので、OSは「次にどのタスクを動かすか」を決め続けています。この切替えのルールは本試験でも繰り返し出ており、言い換えて出題されます。状態遷移図の矢印4本と、方式ごとの一言説明を覚えれば取りやすい分野です。

このレッスンで稽古する(用語チェック・過去問)

結論:状態は3つ、矢印は4本だけ

タスク(OSから見た仕事の単位。プロセスとほぼ同じ意味で出題されます)は、実行状態・実行可能状態・待ち状態の3つを行き来します。違いは「何を待っているか」です。実行可能状態はCPUの順番待ち、待ち状態は入出力(ディスクやネットワークの読み書き)の完了待ちです。

たとえるなら、銀行の窓口です。窓口で手続き中の人が実行状態、番号札を持って呼ばれるのを待つ人が実行可能状態です。「書類を取りに家へ帰った人」が待ち状態にあたります。家から戻っても、すぐ窓口には入れず、まず番号札の列(実行可能)に並び直します。

状態 何をしているか 何を待っているか
実行状態 CPUを使って処理中 何も待っていない
実行可能状態 いつでも動けるが順番待ち CPUの割当て
待ち状態 自分からは動けない 入出力の完了などのイベント
flowchart LR
  G["生成"] --> R["実行可能状態"]
  R -->|"CPUを割り当てる(ディスパッチ)"| E["実行状態"]
  E -->|"優先度の高いタスクに奪われる/持ち時間切れ"| R
  E -->|"入出力を要求した"| W["待ち状態"]
  W -->|"入出力が完了した"| R
  E --> F["終了"]
矢印 起きるきっかけ
実行可能 → 実行 CPUの使用権が与えられた(ディスパッチ)
実行 → 実行可能 優先度の高いタスクにCPUを奪われた(プリエンプション)、または持ち時間を使い切った
実行 → 待ち 自分で入出力を要求した
待ち → 実行可能 入出力が完了した

待ち → 実行の直接の矢印はありません。 入出力が終わったら、必ず実行可能状態に並び直します。新しく生成されたタスクも、最初は実行可能状態に入ります。

ディスパッチとプロセス切替えの手順

ディスパッチは、実行可能状態のタスクにCPUの使用権を割り当てる処理です。「次はどれにするか」を決めるのはスケジューリングです。決まったタスクに実際にCPUを渡すのがディスパッチで、この2つは別物として問われます。

用語 意味 選択肢での言い方
スケジューリング 実行する順序を決める 「各タスクの実行順序を決定すること」
ディスパッチ 実行可能なタスクにCPU使用権を割り当てる 「プロセッサの使用権を割り当てること」
コンテキスト 中断したところから再開するための情報(レジスタの値など) 「タスクの実行に必要な情報」
マルチタスク 1つのCPUで複数のタスクが同時に動いているように見せる 「同時に実行しているかのように見せかける機能」

プロセスを切り替えるとき、OSは退避 → 選択 → 回復の順で処理します。まず割込みで止まったプロセスAの実行状態(コンテキスト)を保存し、次に動かすプロセスを選び、そのプロセスBの状態を元に戻して再開させます。選ぶ前に回復はできない、と考えれば順番は迷いません。

プロセスAからBへの切替えCPUレジスタの値保存領域(メモリ)AのコンテキストBのコンテキスト①退避③回復実行可能の列BCDOS(スケジューラ)②選択:先頭のBを選ぶ選んでから戻す:退避→選択→回復
プロセスAからBへ切り替えるとき、Aの状態を保存し(①退避)、OSが実行可能の列の先頭のBを選び(②選択)、Bの状態を戻して再開する(③回復)流れ。

スケジューリング方式を一言で見分ける

方式の問題は、選択肢に並んだ説明文から当てはまる方式を選ばせる形がほとんどです。下の表の「一言」を覚えれば、選択肢の言い換えに対応できます。

方式 一言 実行中のタスクを途中で止めるか
優先度に基づくプリエンプティブ 優先度の高いタスクが来たら、実行中のものから奪い取る 止める(止められた側は実行可能状態へ)
ノンプリエンプティブ 実行中のタスクが自分から待ち状態になるか終了するまで切り替えない 止めない
ラウンドロビン 待ち行列の順に一定時間(タイムクウォンタム)ずつ均等に実行し、終わらなければ最後尾へ 持ち時間で止める
到着順(FCFS) 来た順に実行する 止めない
処理時間順(SPT) 処理予定時間が短いものから実行する 問題文の形では止めない

プリエンプティブな優先度方式は、重要度や緊急度に応じて処理したいときに使い、組込みのリアルタイムOSでよく使われます。たとえばタスクAがBより優先度が高いとします。Bの実行中にAが起動すると、OSはBを実行可能状態に戻してAを動かします。Bは入出力を待っているわけではないので、待ち状態にはなりません。

ラウンドロビンは、タイムクウォンタムがとても短いと、全タスクがCPUを均等に分け合うのと同じになります。計算問題はこの性質を使って解きます(例題参照)。

タスクA(優先度 高)タスクB(優先度 低)Aが起動実行終了実行実行可能実行時間Bは待ち状態ではなく実行可能状態へ
優先度に基づくプリエンプティブ方式で、Bの実行中に優先度の高いAが起動すると、Bは実行可能状態に戻されAが先に動く様子。

処理時間順(SPT)は長いタスクが待ち続ける

処理時間の短いタスクを優先し続けると、短いタスクが次々に来た場合に、長いタスクがいつまでもCPUをもらえない飢餓状態(スタベーション)が起きえます。選択肢にある他の方式と比べると違いが分かります。到着順やラウンドロビンはいつか必ず順番が来ます。待ち時間に応じて優先度を上げるエージング付きの優先度方式は、まさにこの飢餓を防ぐ工夫です。

短いタスクが次々に到着CPU短短短短…長いタスクずっと実行可能のまま待つ時間飢餓状態(スタベーション)対策:待つほど優先度を上げるエージング
処理時間順(SPT)で短いタスクが次々に来ると、長いタスクはずっと実行可能のままCPUをもらえない飢餓状態になる様子。

ジョブスケジューリング:対話型を優先すると応答が速くなる

対話型処理(人が画面の前で結果を待つ処理)とバッチ処理(まとめて流す一括処理)が混在するシステムでは、対話型の優先度を高くすると応答性能が上がります。「FCFSなら応答時間を保証できる」「CPUを多く使うジョブを優先するとスループットが上がる」は誤りの選択肢です。

リアルタイムOSを使う理由は「時間内に終わらせる」

リアルタイムOS(RTOS)を組込みシステムで使う理由は、期待される応答時間内にタスクや割込みを処理する仕組みがあるからです。エンジン制御やハードディスク制御のように、締切りに遅れると故障や事故につながるシステムをハードリアルタイムシステムと呼びます。ここでは「定められた時間内にイベントへの処理を完了させる機構」が必須になります。

誤りの選択肢には、スループット(一定時間の処理量)の向上、メモリ保護によるウイルス対策、複数プログラムの並行実行、GUI、データ保全、セキュリティ保証などが並びます。どれも一般的なOSの利点で、RTOSを選ぶ理由ではありません。「時間」の言葉が入った選択肢が正解と覚えれば足ります。

イベント発生締切りRTOS処理完了間に合う一般のOS締切りの保証なし時間決めた時間内に終わる仕組みがRTOSの強み
イベントが起きてから締切りまでに処理を完了させる仕組みがあるのがリアルタイムOSで、一般のOSにはその保証がないことを時間軸で比べた図。
例題 1

ラウンドロビンでジョブBが終わるまでの時間

処理は全て CPU 処理である三つのジョブ A,B,C がある。それらを単独で実行したときの処理時間は,ジョブ A は 5 分,ジョブ B は 10 分,ジョブ C は 15 分である。この三つのジョブを次のスケジューリング方式に基づいて同時に開始すると,ジョブ B が終了するまでの経過時間はおよそ何分か。 〔スケジューリング方式〕 (1) 一定時間(これをタイムクウォンタムと呼ぶ)内に処理が終了しなければ,処理を中断させて,待ち行列の最後尾へ回す。 (2) 待ち行列に並んだ順に実行する。 (3) タイムクウォンタムは,ジョブの処理時間に比べて十分に小さい値とする。 (4) ジョブの切替え時間は考慮しないものとする。

ア 15
イ 20
ウ 25
エ 30

出典:基本情報技術者試験 科目A免除 修了試験 20231210 実施分 問13

解き方と答えを見る
  1. 条件を整理する:A=5分、B=10分、C=15分。タイムクウォンタムが十分小さいので、動いているジョブ全員でCPUを均等に分け合うと考えてよい(切替え時間は考えない)。
  2. 第1期間:A・B・Cの3つで分け合う。各ジョブは経過時間の1/3ずつ進む。最初に終わるのは一番短いAで、Aが5分ぶん進むまでの経過時間は 5分 × 3 = 15分。
  3. 15分の時点の残り:Aは0分(終了)、Bは10 − 5 = 5分、Cは15 − 5 = 10分。
  4. 第2期間:BとCの2つで分け合う。各ジョブは経過時間の1/2ずつ進む。Bの残り5分を終えるのにかかる経過時間は 5分 × 2 = 10分。
  5. Bの終了時刻 = 15分 + 10分 = 25分。

答え:ウ(25分)。到着順で数えると15分(A5+B10)になり、それがひっかけの選択肢。

例題 2

プロセス切替えでOSが行う処理 a→b→c の順番

マルチプログラミングにおけるプロセスの切替え手順を示した図において,OS の処理 a~c として,適切な組合せはどれか。
3 列の図。左「プロセス A の状態」:上部に「実行状態」(太線),「割込み-->」で割込みが入り,その後は破線で「実行可能状態」。中央「OS の処理」:a→b→c の 3 つの箱が縦に連なる(プロセス A の実行状態の終端から a へ矢印,c からプロセス B へ矢印)。右「プロセス B の状態」:上部は破線で「実行可能状態」,c の後に太線で「実行状態」。 表(選択肢):
abc
ア実行状態の回復プロセスの選択実行状態の退避
イ実行状態の退避実行状態の回復プロセスの選択
ウ実行状態の退避プロセスの選択実行状態の回復
エプロセスの選択実行状態の回復実行状態の退避

ア a:実行状態の回復,b:プロセスの選択,c:実行状態の退避
イ a:実行状態の退避,b:実行状態の回復,c:プロセスの選択
ウ a:実行状態の退避,b:プロセスの選択,c:実行状態の回復
エ a:プロセスの選択,b:実行状態の回復,c:実行状態の退避

出典:平成28年度 秋期 基本情報技術者試験 午前 問18

解き方と答えを見る
  1. 図を読む:プロセスAが割込みで止まり、OSの処理 a→b→c を経て、プロセスBが実行状態になる。
  2. a:止まったAの続きを後で再開できるよう、Aの実行状態を保存する =「実行状態の退避」。
  3. b:実行可能状態のプロセスの中から次に動かすものを決める =「プロセスの選択」。
  4. c:選んだBの保存してあった状態を元に戻して再開させる =「実行状態の回復」。
  5. 確かめ:選ぶ前に回復はできないので、「回復」が「選択」より前にある選択肢(ア・イ・エ)は誤り。

答え:ウ(a:退避、b:選択、c:回復)

例題 3

状態遷移図の a・b・c に状態を当てはめる

図はプロセスの状態と遷移を表している。a,b,c の状態の適切な組合せはどれか。
状態遷移図。丸 a(上),b(左下),c(右下)。矢印: ① a と b の間(双方向の矢印で①が a→b 側に付記・矢印は a↔b 間に 2 本,①と②)、③ a→c、④ c→b。 (図では a と b の間に ① と ② の 2 本の矢印があり,① は a→b,② は b→a の向きに見える) 〔状態遷移の要因〕 ① 実行優先度の高いほかのプロセスに CPU 使用権が移された。 ② CPU 使用権が与えられた。 ③ 入出力動作の完了を待つ。 ④ 入出力動作が完了した。 選択肢表:
abc
ア実行可能状態実行状態待ち状態
イ実行可能状態待ち状態実行状態
ウ実行状態実行可能状態待ち状態
エ実行状態待ち状態実行可能状態

ア a: 実行可能状態,b: 実行状態,c: 待ち状態
イ a: 実行可能状態,b: 待ち状態,c: 実行状態
ウ a: 実行状態,b: 実行可能状態,c: 待ち状態
エ a: 実行状態,b: 待ち状態,c: 実行可能状態

出典:基本情報技術者試験 科目A免除 修了試験 20120624 実施分 問23

解き方と答えを見る
  1. 手がかりは③「入出力動作の完了を待つ」。入出力を要求できるのは動いている(実行中の)タスクだけなので、③の出発点 a が実行状態、行き先 c が待ち状態。
  2. ④「入出力動作が完了した」は c(待ち)から b へ向かう。入出力が終わったタスクはCPUの順番待ちに並ぶので、b は実行可能状態。
  3. ①(優先度の高い他プロセスにCPUを移された)は a→b、②(CPU使用権を与えられた)は b→a。実行⇔実行可能の往復なので整合する。

答え:ウ(a:実行状態、b:実行可能状態、c:待ち状態)

要点(試験直前に読む)

  • 実行可能状態はCPU待ち、待ち状態は入出力待ち。待ち状態から実行状態への直接の矢印は無い。
  • 優先度の高いタスクにCPUを奪われたタスクは、待ち状態ではなく実行可能状態に戻る。
  • ディスパッチは「実行可能なタスクにCPU使用権を割り当てる」こと。切替え手順は退避→選択→回復。
  • ノンプリエンプティブ方式は、自分から待ち状態になるか終了するまで切り替えない。ラウンドロビン方式は、一定時間ずつ均等に実行して最後尾へ回す。
  • 処理時間順(SPT)は長いタスクが待ち続ける。ラウンドロビンの計算は「動いている数で均等に割る」と考えて期間ごとに区切る。
  • リアルタイムOSを使う理由は「定められた時間内に処理を完了させる」こと。対話型処理を優先すると応答が速くなる。

ひっかけ

  • 「入出力を要求した」「入出力が完了した」を、実行→実行可能の理由として出してくる。入出力が絡む矢印は、必ず待ち状態に出入りする矢印。
  • プリエンプションされたタスクを「待ち状態にする」と書いた選択肢は誤り。また、優先度の高低を逆にした選択肢(Aの実行中にBが来てAが止まる)にも注意する。
  • ディスパッチの問題では「実行順序を決定する」(スケジューリング)、「コンテキストのこと」、「同時に動いているように見せる」(マルチタスク)が誤りの選択肢として並ぶ。
  • 方式の説明問題では、残り時間の短い順・持ち時間で中断・優先度で横取り・均等配分の説明が入れ替えて並ぶ。表の「一言」と照らし合わせて選ぶ。
  • RTOSを使う理由として、スループット向上・メモリ保護・並行実行が出てくる。どれも一般的なOSの話で、「時間」の言葉が無いものは外す。

用語(18)

タスク(プロセス) たすく(ぷろせす)
OSがCPUを割り当てて実行させる仕事の単位。
⚠ 試験ではタスクとプロセスがほぼ同じ意味で使われる。問題文の言い方に合わせて読めばよい。
実行状態 じっこうじょうたい
CPUを使って実際に処理している状態。
⚠ 実行可能状態と混同しやすい。実際にCPUを使っているのは実行状態だけ。
実行可能状態 じっこうかのうじょうたい
いつでも動けるが、CPUが空くのを順番待ちしている状態。
⚠ 待ち状態とよく取り違えられる。実行可能が待っているのはCPU、待ち状態が待っているのは入出力。
待ち状態 まちじょうたい
入出力の完了などのイベントを待っていて、CPUをもらっても進めない状態。
⚠ 待ち状態から実行状態へ直接は戻らない。入出力が終わると、必ず実行可能状態を経由する。
ディスパッチ dispatch
実行可能状態のタスクにCPUの使用権を割り当てること。
⚠ スケジューリングは実行順序を決めること、ディスパッチは決まったタスクに実際にCPUを渡すこと。
スケジューリング scheduling
どのタスクをどの順序で実行するかを決めること。
⚠ ディスパッチと対で出る。「順序を決定」とあればスケジューリング。
コンテキスト context
中断したタスクを続きから再開するために必要な情報(レジスタの値など)。
⚠ 切替え時に退避・回復するものがこれ。ディスパッチそのものではない。
プリエンプション preemption
実行中のタスクからOSが強制的にCPUを取り上げること。
⚠ 取り上げられたタスクは待ち状態ではなく実行可能状態に戻る。
プリエンプティブ方式 preemptive
優先度や持ち時間に応じて、実行中のタスクを途中で止めて切り替える方式。
⚠ ノンプリエンプティブは途中で止めない。「奪い取る」「中断して」とあればプリエンプティブ。
ノンプリエンプティブ方式 non-preemptive
実行中のタスクが自ら待ち状態になるか終了するまで、他のタスクに切り替えない方式。
⚠ 「決められた時間内に待ち状態にならないと中断」はラウンドロビン、「優先度を比較して高い方を実行」はプリエンプティブ優先度方式。
ラウンドロビン round robin
待ち行列の順に一定時間ずつ均等にCPUを割り当て、終わらなければ最後尾に回す方式。
⚠ 「均等」「最後尾につなぐ」が目印。優先度や処理時間に比例させる説明は別の方式。
タイムクウォンタム(タイムスライス) time quantum / time slice
ラウンドロビンで1回に与えるCPUの持ち時間。
⚠ 十分小さければ、全タスクがCPUを均等に分け合うと考えて計算できる。
FCFS First-Come First-Served(到着順)
到着した順に実行する方式。
⚠ いつか必ず順番が来るので飢餓は起きにくい。ただし応答時間の保証はできない。
SPT(処理時間順) Shortest Processing Time first
処理予定時間の短いタスクから順に実行する方式。
⚠ 長いタスクが後回しにされ続ける飢餓状態が起きやすい点が問われる。
飢餓状態(スタベーション) starvation
特定のタスクがいつまでもCPUなどの資源を割り当ててもらえない状態。
⚠ エージング(待つほど優先度を上げる工夫)は、これを防ぐ側の仕組み。
エージング aging
待ち時間が長いタスクほど優先度を徐々に上げ、待たされ続けるのを防ぐ工夫。
⚠ 飢餓が起きやすい方式を選ぶ問題で、待ち続けにくい側の選択肢として出る。
リアルタイムOS Real-Time Operating System(RTOS)
決められた応答時間内にタスクや割込みを処理する仕組みを持つOS。
⚠ スループット向上・メモリ保護・GUIなどは一般的なOSの利点で、RTOSを使う理由ではない。
ハードリアルタイムシステム はーどりあるたいむしすてむ
エンジン制御のように、処理が締切りに遅れることが許されないシステム。
⚠ 「定められた時間内に処理を完了」が正解の言い回し。

このレッスンの過去問

このレッスンで稽古する