マナビング基本情報技術者

スプーリングで印刷が終わる時刻を2本の時間軸で求める

基本情報技術者試験 平成29年度春期 午前 問16 / ソフトウェア › オペレーティングシステム

過去問にチャレンジ

平成29年度春期 午前 問16

四つのジョブA〜Dを次の条件で実行し印刷する。全ての印刷が完了するのは、ジョブを起動してから何秒後か。 〔条件〕  (1)ジョブは一斉に起動され、多重度1で実行される。  (2)優先順位はAが最も高く、B、C、Dの順に低くなる。  (3)各ジョブの実行後、スプーリング機能が1台のプリンタを用いて逐次印刷を行う。  (4)各ジョブを単独で実行した場合の実行時間と印刷時間は、表のとおりである。  (5)その他のオーバヘッドは考慮しない。

平成29年度春期 午前 問16の図
  1. ア

    100

  2. イ

    160

  3. ウ

    190

  4. エ

    280

会話形式の解説

講師講師
この問題では、CPUでの実行とプリンタでの印刷を別々の流れとして扱えるかが問われています。手がかりは条件にある「スプーリング」です。印刷するデータをいったんためておき、CPUとは別に順番に印刷していく仕組みのことです。
受験者受験者
私は最初、表の実行時間と印刷時間を全部足しました。実行が140秒、印刷も140秒なので280秒だと思ったのですが、違うのでしょうか。
講師講師
280秒は、実行と印刷がまったく重ならない場合の値です。スプーリングがあると、あるジョブの印刷中にCPUは次のジョブを実行できます。重なる時間まで足しているので、実際より長くなってしまいます。
受験者受験者
では、重なりを考えて数えればよいのですね。まずCPU側は、多重度1なので一度に1つずつ、優先順位どおりAから順に実行すると考えてよいですか。
講師講師
そのとおりです。多重度1は、同時に実行できるジョブが1つだけという意味です。実行完了時刻を順に出してみてください。
受験者受験者
Aが50秒、Bが50+30で80秒、Cが80+20で100秒、Dが100+40で140秒です。
講師講師
合っています。次はプリンタ側です。プリンタは1台なので、印刷は1件ずつしかできません。各ジョブの印刷開始時刻は、何と何で決まると思いますか。
受験者受験者
自分の実行が終わっていることと、前の印刷が終わっていることの二つでしょうか。だとすると、その遅いほうから印刷を始めることになりそうです。
講師講師
そうです。その考え方で順に計算してみましょう。
受験者受験者
Aは50秒に実行を終えて、50〜100秒に印刷します。Bは80秒に実行を終えますが、Aの印刷が100秒まで続くので100〜140秒です。Cは100秒に実行を終えて、Bの印刷を待って140〜170秒です。Dは140秒に実行を終えて、Cの印刷を待って170〜190秒です。全部終わるのは190秒ですね。
講師講師
正解です。表ができたので、ほかの選択肢も確かめておきましょう。100秒の時点ではどうなっていますか。
受験者受験者
100秒で終わっているのはAの印刷だけです。B、C、Dの印刷はまだこれからなので、全部の完了ではありません。
講師講師
160秒はどうでしょう。
受験者受験者
160秒はCの印刷の途中で、Dの印刷はまだ始まっていません。Cの印刷が170秒まで続くことと、そのあとのDの印刷20秒を数えていない値だと思います。
講師講師
よく確かめられています。補足すると、優先順位で決まるのはCPUで実行する順番です。印刷は、実行を終えた順に行われます。
受験者受験者
検算の方法はありますか。私は計算に時間がかかるので、確かめる手段があると安心です。
講師講師
この問題では、プリンタが50秒から一度も止まらずに動き続けています。そのため、最初の実行完了時刻50秒に印刷時間の合計140秒を足した190秒とも一致します。ただし、途中でプリンタが空く場合はこの足し算が成り立ちません。基本はCPUとプリンタの2本の時間軸で表を作り、各印刷の開始を「実行完了時刻」と「直前の印刷完了時刻」の遅いほうで決めてください。

まとめ

多重度1・優先度順で実行したジョブを、スプーリングで1台のプリンタに逐次印刷するときの完了時刻を求める問題です。CPUではA→B→C→Dの順に実行し、実行完了はそれぞれ50・80・100・140秒になります。各印刷は「自分の実行完了時刻」と「直前の印刷完了時刻」の遅いほうから始まるので、印刷はA50〜100、B100〜140、C140〜170、D170〜190秒となり、答えは190秒です。実行時間と印刷時間を単純に合計した280秒は、スプーリングによる実行と印刷の重なりを無視した値です。

解答・解説

正解はウです

この問題のテーマ

多重度1・優先度順でジョブを実行し、1台のプリンタでスプーリングして逐次印刷するとき、全ての印刷が終わる時刻を求める問題です。

解き方の考え方

CPUの実行と印刷を別々の時間軸で考え、二つの表を作ります。CPUでは優先順位どおりA→B→C→Dの順に1つずつ実行し、それぞれの実行完了時刻を求めます。プリンタは実行を終えたジョブから順に印刷しますが、前の印刷が終わっていなければ待つことになります。そのため、各ジョブの印刷開始時刻は「自分の実行完了時刻」と「直前の印刷完了時刻」の遅いほうになります。実行完了はA50秒、B50+30=80秒、C80+20=100秒、D100+40=140秒です。印刷はA50〜100秒、B max(80,100)=100〜140秒、C max(100,140)=140〜170秒、D max(140,170)=170〜190秒となります。

選択肢ごとの解説

  1. ×ア  100
    100秒の時点で終わっているのはAの印刷(50〜100秒)だけです。B・C・Dの印刷はこれから始まるので、全ての印刷が完了した時刻にはなりません。
  2. ×イ  160
    時刻表で確かめると、160秒の時点ではまだCを印刷中(140〜170秒)で、Dの印刷は始まってもいません。各ジョブの印刷が前の印刷の完了を待つ分を順に積み上げると、160秒にはなりません。
  3. ○ウ  190
    Dは140秒に実行を終えますが、Cの印刷が170秒まで続くため、印刷は170秒から20秒間行われます。最後の印刷が終わるのは190秒なので、これが答えです。
  4. ×エ  280
    280秒は、実行時間の合計140秒と印刷時間の合計140秒をそのまま足した値です。スプーリングがあると、あるジョブの印刷中にCPUは次のジョブを実行できます。時間が重なる部分まで足しているので、実際より長くなります。

補足

検算として、この問題ではプリンタが50秒から一度も止まらずに動き続けています。そのため、最初の実行完了時刻50秒に印刷時間の合計140秒を足した190秒とも一致します。ただし、途中でプリンタが空く場合はこの足し算は成り立たないので、時間軸の表で確かめてください。

POINT

  • スプーリングを使うと、印刷はCPUとは独立して進むため、実行と印刷を並行させられます。
  • プリンタが1台なら印刷は1件ずつ行われ、印刷開始は「実行完了時刻」と「直前の印刷完了時刻」の遅いほうになります。
  • 優先順位が決めるのはCPUで実行する順番です。印刷は実行を終えた順に行われます。
  • この種の問題は、CPUとプリンタの2本の時間軸で表を作ると確実に解けます。

※出典:平成29年度春期 基本情報技術者試験 午前 問16(一部改変)