応用情報技術者 2019年 秋期 午前2 問17
問題文
ジョブ群と実行の条件が次のとおりであるとき、一時ファイルを作成する磁気ディスクに必要な容量は最低何Mバイトか。

選択肢
ア:100
イ:150
ウ:200(正解)
エ:250
🔒 解説は解答すると表示されます
一時ファイル同時最大数【午前2解説】
正解の理由
グラフの実行順と「先行ジョブの一時ファイルは直後の後続ジョブで参照され、後続ジョブの終了時に削除される」という規則から、ある瞬間に同時に存在し得る一時ファイル数の最大は 4 となります。各ジョブは開始時に50Mバイトを作成するため、必要最小容量は Mバイトとなり、選択肢の ウ が正解です。
(重要な点)先行ジョブの一時ファイルは先行ジョブの終了時に削除されるのではなく、当該先行ジョブの「直後に生起する(かつ先に生起する)後続ジョブ」が終了したときに削除される、という規則を用いて評価しています。
解法ステップ
-
規則の整理
- 各ジョブ開始でそのジョブ専用の一時ファイル(50M)を作成する。
- 辺 X→Y があるとき、X の一時ファイルは最初に生起される Y が参照し、Y の終了時に削除する。
- 先行ジョブに複数の後続がある場合は「先に生起される一つだけ」が参照する。
- ジョブの並列度(同時実行数)は 2。待ち行列順に実行される。
-
実際の実行例(時刻を整数ステップで表現。各ジョブ処理時間は同じなので同一周期で完了/開始が揃う場合を想定)
- 時刻0:A 開始 → ファイル A 作成(保持: A)
- 時刻1:A 終了 → 後続 B, C を順に待ち行列へ追加。待ち行列から B, C が同時に開始(並列度2) → ファイル B, C 作成。A のファイルは B が終了するまで残る(B が A のファイルを参照するため)。
- 保持: A, B, C
- 時刻2:B, C 終了 → B の終了時点で A のファイルは削除される。B の後続は D, E(順に生起)、C の後続は E。E は両方の先行終了後に生起されるので、B と C の両方の終了で D と E が待ち行列に入る。待ち行列から D, E が同時に開始 → ファイル D, E 作成。
- 参照関係:D は B のファイルを参照(B→D が B の最初の後続)、E は C のファイルを参照(C→E が唯一の後続)。
- この時点で B と C のファイルは削除されていない(それぞれ D の終了、E の終了で削除される)。
- 保持: B, C, D, E = 4 個(ピーク)
-
ピーク時のファイル数は 4。したがって容量は Mバイト。
選択肢別の誤答解説
- ア: 100
- 100M(2個想定)は並列度から考えると過小評価。上の実行例で同時に4個存在する場面があるため不足します。
- イ: 150
- 150M(3個想定)は一見妥当に見える場面(A,B,C が同時の箇所)がありますが、その後の D,E の開始で B,C のファイルが残ったまま D,E が作られる局面があり、同時に4つ存在します。
- ウ: 200
- 正解。上記の手順でピーク4個を説明でき、Mバイトになります。
- エ: 250
- 250M(5個想定)は今回の依存関係と「最初に生起される一つだけが参照する」規則の下では発生しない同時数です。5個同時に存在させるためには別の並列化や異なる参照規則が必要になります。
よくある誤解
- 「先行ジョブの一時ファイルは先行ジョブの終了時に削除される」と思い込む
- 実際は「先行ジョブの一時ファイルは、その先行ジョブの最初の後続ジョブが参照し、その後続ジョブの終了時に削除される」。この差がピーク数の評価に直結します。
- 「先行ジョブに複数の後続がある場合、全ての後続が同じファイルを参照して削除する」と誤認する
- 問題文は「最初に生起されるジョブだけが先行ジョブの一時ファイルを参照する」と明記しています。複数後続のうち最初の1つだけが参照対象です。
- 待ち行列順と実行多重度の関係を無視する
- 待ち行列の順序(生起順)と並列度によってどのジョブが同時に開始するかが決まり、これが一時ファイルの同時数を左右します。生起順の理解が重要です。
補足コラム
- 一般的手法:この種の問題では「イベント(ジョブ開始/終了)ごとに一時ファイルの増減を追跡する」ことで確実にピークを求められます。処理時間が全て等しいときは同時終了・同時開始が発生しやすいので、図中の「矢印の順序(生起順)」を厳密に守ってシミュレーションすることが鍵です。
- 実務的には、こうした一時ファイルの寿命はプロセス間の責任範囲(どのプロセスが削除するか)を明確にしておかないとディスク占有が増大します。データフロー設計時に「誰が削除するか」を明示するのは重要です。
簡単なシミュレータ(参考、擬似コード)
# 各ジョブの後続リストと優先順序を与え、同一処理時間で
# 待ち行列順・並列度2でイベントを進めるとピーク同時ファイル数を求められる
FAQ
Q. 並列度を 3 に変えたらどうなる?
A. 並列度が増えれば一時ファイルの同時数は増加する可能性があります。上と同じ作り方でイベントをシミュレーションすると新たなピークが計算できます。
A. 並列度が増えれば一時ファイルの同時数は増加する可能性があります。上と同じ作り方でイベントをシミュレーションすると新たなピークが計算できます。
Q. ジョブ処理時間が異なる場合は?
A. 処理時間差により同時性のパターンが変わるため、必ずイベントベースで開始/終了を追跡して最大同時数を確かめる必要があります。
A. 処理時間差により同時性のパターンが変わるため、必ずイベントベースで開始/終了を追跡して最大同時数を確かめる必要があります。
Q. 「最初に生起されるジョブ」の判定が同時終了で曖昧な場合は?
A. 問題文のルールでは生起順が明示されている(同一先行から出る矢印は上からの順等)ため、それに従って一貫した順序で待ち行列に追加して評価します。
A. 問題文のルールでは生起順が明示されている(同一先行から出る矢印は上からの順等)ため、それに従って一貫した順序で待ち行列に追加して評価します。
関連キーワード: スケジューリング、並列実行、ジョブ依存、一時ファイル、容量計算

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

