基本情報技術者 2015年 春期 午前(科目A) 問21
問題文
出力待ちの印刷要求を、同一機種の3台のプリンタA~CのうちAから順に空いているプリンタに割り当てる(Cの次は再びAに戻る)システムがある。印刷要求の印刷時間が出力待ちの順に、5, 12, 4, 3, 10, 4(分)である場合、印刷に要した時間が長い順にプリンタを並べたものはどれか。ここで、初期状態ではプリンタは全て空いているものとする。
選択肢
ア:A, B, C(正解)
イ:B, A, C
ウ:B, C, A
エ:C, B, A
🔒 解説は解答すると表示されます
ラウンドロビン式プリンタ割当【午前解説】
正解の理由
正解は ア です。
初期でA,B,Cに最初の3要求(5,12,4分)を割り当てて開始し、その後プリンタが空くタイミングで次の待ち要求を「常にA→B→Cの順に空きを探して」割り当てると、各プリンタの合計印刷時間が A=15分、B=12分、C=11分 となり、長い順は A, B, C になります。
初期でA,B,Cに最初の3要求(5,12,4分)を割り当てて開始し、その後プリンタが空くタイミングで次の待ち要求を「常にA→B→Cの順に空きを探して」割り当てると、各プリンタの合計印刷時間が A=15分、B=12分、C=11分 となり、長い順は A, B, C になります。
解法ステップ
- 初期状態(時刻0):A,B,C全て空いているので、先頭から3要求を順に割当て開始。
- Aに5分、Bに12分、Cに4分 を割当て、それぞれ時刻0から稼働開始。
- 次の待ち要求(4分)は、最も早く空くプリンタが出るまで待機して割当てを行う。
- 最初に空くのはC(4分で完了)なので、時刻4に割当て処理を行う。割当の際は常にA→B→Cの順に空きを探すが、Aは時刻4でまだ稼働中(〜5分)、Bも稼働中(〜12分)、Cは空いているのでCに3分を割当て(時刻4〜7)。
- 次の要求(10分)は次に空いたプリンタに割当てる。
- 次に空くのはA(時刻5)。割当時にA→B→Cの順で空きを確認するとAが空いているためAに10分を割当て(時刻5〜15)。
- 最後の要求(4分)は次に空いたプリンタに割当てる。
- 次に空くのはC(時刻7)とB(時刻12)が残るが時刻7で割当処理を行うとAは稼働中(〜15)、Bは稼働中(〜12)、Cが空いているためCに4分を割当て(時刻7〜11)。
- 各プリンタの合計印刷時間を合算:A=5+10=15、B=12、C=4+3+4=11。よって長い順 A(15) > B(12) > C(11)。
(タイムラインの要点)
- 時刻0: A(5:0–5), B(12:0–12), C(4:0–4)
- 時刻4: Cに3分割当て → C(3:4–7)
- 時刻5: Aに10分割当て → A(10:5–15)
- 時刻7: Cに4分割当て → C(4:7–11)
- 結果合計 A=15, B=12, C=11
選択肢別の誤答解説
- ア: A, B, C — 正解。上のイベント駆動シミュレーションで各合計が A=15, B=12, C=11 になりこの順になります。
- イ: B, A, C — 誤り。単純に初期全割当を固定して合計を計算するとBが最大になるためこの順と混同しやすいですが、割当はプリンタの空きタイミングで行います。
- ウ: B, C, A — 誤り。Bが最大なのは事実のように見えますが、AがCより大きくなることを見落とした順序です。
- エ: C, B, A — 誤り。Cが最も長くなることはありません。時間経過と割当ルールを考慮すると不整合です。
よくある誤解
- 「単純に順番でA,B,C,A,B,Cと割り当てれば良い」と考え、各プリンタの合計を 8,22,8 として誤答するケース。これは時間経過(プリンタの稼働・空き)を無視した誤りです。
- 割り当てを行う際の起点が「最後に割り当てたプリンタの次」と誤認してしまうと、正しいイベント駆動の順序と異なる結果になります。ルールは「割当時に常にA→B→Cの順で空きを探す」です。
補足コラム
本問は「割当順序」と「割当タイミング(時間経過)」の違いを理解しているかがポイントです。列挙的(到着順にただ順番で振る)なラウンドロビンと、プリンタが空いたタイミングで待ち要求を順に割り当てるイベント駆動方式は似て非なるものです。実務でもプリンタやジョブスケジューラの挙動を正確に把握するには、単に「どの順に見るか」だけでなく「いつ割り当てるか」を明確にする必要があります。
FAQ
Q1: 「Aから順に空いているプリンタに割り当てる」は毎回Aから開始ですか?
A1: はい、本問の解釈では、割当を行うタイミング(プリンタが空いた瞬間や初期時点)において常にA→B→Cの順で空きを確認して割り当てます。最後に割り当てたプリンタの次から開始する、というルールではありません。
A1: はい、本問の解釈では、割当を行うタイミング(プリンタが空いた瞬間や初期時点)において常にA→B→Cの順で空きを確認して割り当てます。最後に割り当てたプリンタの次から開始する、というルールではありません。
Q2: もし複数プリンタが同時に空いたらどうする?
A2: 同時に空く場合でも問題文のルールに従い「A→B→Cの順に空きを確認して割り当て」を行えば、先にAをチェックしていればAが優先されます。試験問題ではそのような細かい同時性は明示されていないことが多いので、設問文のルールに従って決めます。
A2: 同時に空く場合でも問題文のルールに従い「A→B→Cの順に空きを確認して割り当て」を行えば、先にAをチェックしていればAが優先されます。試験問題ではそのような細かい同時性は明示されていないことが多いので、設問文のルールに従って決めます。
Q3: 単純ラウンドロビンと今回の方式の見分け方は?
A3: 単純ラウンドロビンは「要求iをプリンタ (i mod 3) に順序無視で割当てる」方式です。今回の方式は「プリンタの空き状態を見て割当てる」ため、同じ入力でも時間経過により割当が変わります。
A3: 単純ラウンドロビンは「要求iをプリンタ (i mod 3) に順序無視で割当てる」方式です。今回の方式は「プリンタの空き状態を見て割当てる」ため、同じ入力でも時間経過により割当が変わります。
関連キーワード: プリンタ割当、ジョブスケジューリング、イベント駆動シミュレーション、待ち行列、ラウンドロビン、合計処理時間

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

