タスクの状態とスケジューリング方式
タスクの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の状態を元に戻して再開させます。選ぶ前に回復はできない、と考えれば順番は迷いません。
スケジューリング方式を一言で見分ける
方式の問題は、選択肢に並んだ説明文から当てはまる方式を選ばせる形がほとんどです。下の表の「一言」を覚えれば、選択肢の言い換えに対応できます。
| 方式 | 一言 | 実行中のタスクを途中で止めるか |
|---|---|---|
| 優先度に基づくプリエンプティブ | 優先度の高いタスクが来たら、実行中のものから奪い取る | 止める(止められた側は実行可能状態へ) |
| ノンプリエンプティブ | 実行中のタスクが自分から待ち状態になるか終了するまで切り替えない | 止めない |
| ラウンドロビン | 待ち行列の順に一定時間(タイムクウォンタム)ずつ均等に実行し、終わらなければ最後尾へ | 持ち時間で止める |
| 到着順(FCFS) | 来た順に実行する | 止めない |
| 処理時間順(SPT) | 処理予定時間が短いものから実行する | 問題文の形では止めない |
プリエンプティブな優先度方式は、重要度や緊急度に応じて処理したいときに使い、組込みのリアルタイムOSでよく使われます。たとえばタスクAがBより優先度が高いとします。Bの実行中にAが起動すると、OSはBを実行可能状態に戻してAを動かします。Bは入出力を待っているわけではないので、待ち状態にはなりません。
ラウンドロビンは、タイムクウォンタムがとても短いと、全タスクがCPUを均等に分け合うのと同じになります。計算問題はこの性質を使って解きます(例題参照)。
処理時間順(SPT)は長いタスクが待ち続ける
処理時間の短いタスクを優先し続けると、短いタスクが次々に来た場合に、長いタスクがいつまでもCPUをもらえない飢餓状態(スタベーション)が起きえます。選択肢にある他の方式と比べると違いが分かります。到着順やラウンドロビンはいつか必ず順番が来ます。待ち時間に応じて優先度を上げるエージング付きの優先度方式は、まさにこの飢餓を防ぐ工夫です。
ジョブスケジューリング:対話型を優先すると応答が速くなる
対話型処理(人が画面の前で結果を待つ処理)とバッチ処理(まとめて流す一括処理)が混在するシステムでは、対話型の優先度を高くすると応答性能が上がります。「FCFSなら応答時間を保証できる」「CPUを多く使うジョブを優先するとスループットが上がる」は誤りの選択肢です。
リアルタイムOSを使う理由は「時間内に終わらせる」
リアルタイムOS(RTOS)を組込みシステムで使う理由は、期待される応答時間内にタスクや割込みを処理する仕組みがあるからです。エンジン制御やハードディスク制御のように、締切りに遅れると故障や事故につながるシステムをハードリアルタイムシステムと呼びます。ここでは「定められた時間内にイベントへの処理を完了させる機構」が必須になります。
誤りの選択肢には、スループット(一定時間の処理量)の向上、メモリ保護によるウイルス対策、複数プログラムの並行実行、GUI、データ保全、セキュリティ保証などが並びます。どれも一般的なOSの利点で、RTOSを選ぶ理由ではありません。「時間」の言葉が入った選択肢が正解と覚えれば足ります。
ラウンドロビンでジョブBが終わるまでの時間
ア 15
イ 20
ウ 25
エ 30
出典:基本情報技術者試験 科目A免除 修了試験 20231210 実施分 問13
解き方と答えを見る
- 条件を整理する:A=5分、B=10分、C=15分。タイムクウォンタムが十分小さいので、動いているジョブ全員でCPUを均等に分け合うと考えてよい(切替え時間は考えない)。
- 第1期間:A・B・Cの3つで分け合う。各ジョブは経過時間の1/3ずつ進む。最初に終わるのは一番短いAで、Aが5分ぶん進むまでの経過時間は 5分 × 3 = 15分。
- 15分の時点の残り:Aは0分(終了)、Bは10 − 5 = 5分、Cは15 − 5 = 10分。
- 第2期間:BとCの2つで分け合う。各ジョブは経過時間の1/2ずつ進む。Bの残り5分を終えるのにかかる経過時間は 5分 × 2 = 10分。
- Bの終了時刻 = 15分 + 10分 = 25分。
答え:ウ(25分)。到着順で数えると15分(A5+B10)になり、それがひっかけの選択肢。
プロセス切替えでOSが行う処理 a→b→c の順番
| a | b | c | |
|---|---|---|---|
| ア | 実行状態の回復 | プロセスの選択 | 実行状態の退避 |
| イ | 実行状態の退避 | 実行状態の回復 | プロセスの選択 |
| ウ | 実行状態の退避 | プロセスの選択 | 実行状態の回復 |
| エ | プロセスの選択 | 実行状態の回復 | 実行状態の退避 |
ア a:実行状態の回復,b:プロセスの選択,c:実行状態の退避
イ a:実行状態の退避,b:実行状態の回復,c:プロセスの選択
ウ a:実行状態の退避,b:プロセスの選択,c:実行状態の回復
エ a:プロセスの選択,b:実行状態の回復,c:実行状態の退避
解き方と答えを見る
- 図を読む:プロセスAが割込みで止まり、OSの処理 a→b→c を経て、プロセスBが実行状態になる。
- a:止まったAの続きを後で再開できるよう、Aの実行状態を保存する =「実行状態の退避」。
- b:実行可能状態のプロセスの中から次に動かすものを決める =「プロセスの選択」。
- c:選んだBの保存してあった状態を元に戻して再開させる =「実行状態の回復」。
- 確かめ:選ぶ前に回復はできないので、「回復」が「選択」より前にある選択肢(ア・イ・エ)は誤り。
答え:ウ(a:退避、b:選択、c:回復)
状態遷移図の a・b・c に状態を当てはめる
| a | b | c | |
|---|---|---|---|
| ア | 実行可能状態 | 実行状態 | 待ち状態 |
| イ | 実行可能状態 | 待ち状態 | 実行状態 |
| ウ | 実行状態 | 実行可能状態 | 待ち状態 |
| エ | 実行状態 | 待ち状態 | 実行可能状態 |
ア a: 実行可能状態,b: 実行状態,c: 待ち状態
イ a: 実行可能状態,b: 待ち状態,c: 実行状態
ウ a: 実行状態,b: 実行可能状態,c: 待ち状態
エ a: 実行状態,b: 待ち状態,c: 実行可能状態
出典:基本情報技術者試験 科目A免除 修了試験 20120624 実施分 問23
解き方と答えを見る
- 手がかりは③「入出力動作の完了を待つ」。入出力を要求できるのは動いている(実行中の)タスクだけなので、③の出発点 a が実行状態、行き先 c が待ち状態。
- ④「入出力動作が完了した」は c(待ち)から b へ向かう。入出力が終わったタスクはCPUの順番待ちに並ぶので、b は実行可能状態。
- ①(優先度の高い他プロセスに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をもらっても進めない状態。
⚠ 待ち状態から実行状態へ直接は戻らない。入出力が終わると、必ず実行可能状態を経由する。
実行可能状態のタスクにCPUの使用権を割り当てること。
⚠ スケジューリングは実行順序を決めること、ディスパッチは決まったタスクに実際にCPUを渡すこと。
どのタスクをどの順序で実行するかを決めること。
⚠ ディスパッチと対で出る。「順序を決定」とあればスケジューリング。
中断したタスクを続きから再開するために必要な情報(レジスタの値など)。
⚠ 切替え時に退避・回復するものがこれ。ディスパッチそのものではない。
実行中のタスクからOSが強制的にCPUを取り上げること。
⚠ 取り上げられたタスクは待ち状態ではなく実行可能状態に戻る。
優先度や持ち時間に応じて、実行中のタスクを途中で止めて切り替える方式。
⚠ ノンプリエンプティブは途中で止めない。「奪い取る」「中断して」とあればプリエンプティブ。
実行中のタスクが自ら待ち状態になるか終了するまで、他のタスクに切り替えない方式。
⚠ 「決められた時間内に待ち状態にならないと中断」はラウンドロビン、「優先度を比較して高い方を実行」はプリエンプティブ優先度方式。
待ち行列の順に一定時間ずつ均等にCPUを割り当て、終わらなければ最後尾に回す方式。
⚠ 「均等」「最後尾につなぐ」が目印。優先度や処理時間に比例させる説明は別の方式。
ラウンドロビンで1回に与えるCPUの持ち時間。
⚠ 十分小さければ、全タスクがCPUを均等に分け合うと考えて計算できる。
到着した順に実行する方式。
⚠ いつか必ず順番が来るので飢餓は起きにくい。ただし応答時間の保証はできない。
処理予定時間の短いタスクから順に実行する方式。
⚠ 長いタスクが後回しにされ続ける飢餓状態が起きやすい点が問われる。
特定のタスクがいつまでもCPUなどの資源を割り当ててもらえない状態。
⚠ エージング(待つほど優先度を上げる工夫)は、これを防ぐ側の仕組み。
待ち時間が長いタスクほど優先度を徐々に上げ、待たされ続けるのを防ぐ工夫。
⚠ 飢餓が起きやすい方式を選ぶ問題で、待ち続けにくい側の選択肢として出る。
決められた応答時間内にタスクや割込みを処理する仕組みを持つOS。
⚠ スループット向上・メモリ保護・GUIなどは一般的なOSの利点で、RTOSを使う理由ではない。
エンジン制御のように、処理が締切りに遅れることが許されないシステム。
⚠ 「定められた時間内に処理を完了」が正解の言い回し。
このレッスンの過去問
- タスクの状態遷移(実行・実行可能・待ち)平成23年度 秋期 基本情報技術者試験 午前 問20
- プロセス切替え(ディスパッチ)の手順平成31年度 春期 基本情報技術者試験 午前 問16
- プリエンプティブスケジューリングの優先度処理令和元年度 秋期 基本情報技術者試験 午前 問18
- ノンプリエンプティブスケジューリングの定義平成27年度 春期 基本情報技術者試験 午前 問19
- ラウンドロビンスケジューリング平成30年度 秋期 基本情報技術者試験 午前 問18
- 処理時間順(SPT)方式の飢餓状態平成24年度 秋期 基本情報技術者試験 午前 問17
- ジョブスケジューリング方式の特徴(対話型優先)基本情報技術者試験 科目A免除 修了試験 20130728 実施分 問57
- リアルタイムOSを組込みシステムで用いる理由平成23年度 特別試験 基本情報技術者試験 午前 問22
- ハードリアルタイムシステムの定義(時間制約)平成22年度 春期 基本情報技術者試験 午前 問18