基本情報技術者 2014年 秋期 午前(科目A) 問17
問題文
2台のCPUから成るシステムがあり、使用中でないCPUは実行要求があったタスクに割り当てられるようになっている。このシステムで、二つのタスクA, Bを実行する際、それらのタスクは共通の資源Rを排他的に使用する。それぞれのタスクA, BのCPU使用時間、資源Rの使用時間と実行順序は図に示すとおりである。二つのタスクの実行を同時に開始した場合、二つのタスクの処理が完了するまでの時間は何ミリ秒か。ここで、タスクA, Bを開始した時点では、CPU、資源Rともに空いているものとする。

選択肢
ア:120
イ:140
ウ:150
エ:200
二 CPU システムで共有資源を排他的に使うタスクの完了時間算出【午前2 解説】
要点まとめ
- 結論:二つのタスクを同時開始すると、両方の完了は最大で 140 ミリ秒後に終了します。
- 根拠:A が から資源Rを 50ms 使用し でR開放、B はその後 からRを使用して に開放、B の後半 CPU が –。
- 差がつくポイント:二つのCPUがあるためCPU待ちが発生せず、R の占有順(先にRを要求したAが先)で全体の所要時間が決まります。
正解の理由
二つのCPUが独立に動作するため、最初のCPUフェーズは並列に進行します。時系列で見ると以下の通りです。
- A: CPU10(–)→ R50(–)→ CPU60(–)
- B: CPU40(–)→ R50(待ち、–)→ CPU30(–)
A は先に資源Rを要求するためRを先に獲得し、B はR を待つことになります。A の最終 CPU は に終了、B は に終了するため全体の完了は ms です。したがって正解は イ: 140 です。
よくある誤解
- 「Rは並列に使える」と考える誤り:R は排他的なので同時使用は不可で、要求順で待ちが発生します。
- 「CPU が余っているから待ちがなくなる」と短絡的に考える:CPU が空いていても、R を待っているタスクはCPUを使えないので総合時間は変わります。
- 「B の R 使用が から始まる」と誤認する:A が先に R を取得するため B は R を から使用します。
解法ステップ
- 各タスクの時系列を分割(CPU / R / CPU)で整理する。
- 同時開始なので初期のCPU区間は並列に実行できることを確認する。
- 各タスクが最初にRを要求する時刻を求める(A: , B: )。
- R は排他なので早く来た方(A)が先に使用し、後発(B)は終了まで待つ。
- 待ち時間を考慮して各区間の開始・終了時刻を順に算出する。
- 全タスクの終了時刻の最大値を求め、所要時間とする(今回 ms)。
選択肢別の誤答解説
- ア: 120
誤りの典型例は「R の待ちが発生せず、両者とも に終わる」と考えることです。実際にはBはRを待ち、最終 CPU を – に実行するため 120ms には終わりません。 - イ: 140
正解。上記の時系列計算により全体完了は です。 - ウ: 150
150ms を選ぶ誤りは、R の排他時間やCPUの並列利用を二重に考慮(過剰に待たせる)した結果です。今回の条件下では余計な待ち時間は発生しません。 - エ: 200
過度に保守的な見積もりで、R を両者が直列で全部待つ(あるいは何らかの追加待ちが入る)ように誤解したケースです。実際はA が先にRを取りBは一回だけ待つため 200ms にはなりません。
補足コラム
- クリティカルパスの考え方:今回の全体所要時間は「A の後半 CPU」と「B の後半 CPU」の終了時刻の最大値で決まります。R によりタスク間が直列化される区間が全体時間に影響します。
- スケジューリング視点:CPU が複数あっても共有資源の排他がボトルネックになれば CPU 並列性の効果は限定的になります。資源保護(mutex)や優先度制御の設計が重要です。
FAQ
Q1: もしCPUが1台だけならどうなる?
A1: 1台しかないと初期CPU区間で順番待ちが発生します。どちらが先にCPUを得るかでRの要求時刻と全体時間が大きく変わります(一般に所要時間は増加)。
A1: 1台しかないと初期CPU区間で順番待ちが発生します。どちらが先にCPUを得るかでRの要求時刻と全体時間が大きく変わります(一般に所要時間は増加)。
Q2: R がプリエンプト可能(中断可能)なら結果は変わる?
A2: はい。R の中断・切替が可能なら別のタスクが途中でRを使えるため待ち時間が短縮され得ます。ただし実際の共有資源は多くの場合排他的で中断不可です。
A2: はい。R の中断・切替が可能なら別のタスクが途中でRを使えるため待ち時間が短縮され得ます。ただし実際の共有資源は多くの場合排他的で中断不可です。
Q3: タスク開始が同時でない場合の基本的な考え方は?
A3: 各タスクの「R要求時刻」を基準にして、その時点でRが空いているかを判定し、時刻を前後にシミュレーションして最終終了時刻を求めます。
A3: 各タスクの「R要求時刻」を基準にして、その時点でRが空いているかを判定し、時刻を前後にシミュレーションして最終終了時刻を求めます。
関連キーワード: CPUスケジューリング、クリティカルセクション、排他制御、リソース競合、タスクスケジューリング、バリアント分析

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

