スプーリングの説明を見分ける 割込み・バッファとの違い
基本情報技術者試験 平成30年度秋期 午前 問17 / ソフトウェア › オペレーティングシステム
過去問にチャレンジ
スプーリング機能の説明として,適切なものはどれか。
- ア
あるタスクを実行しているときに,入出力命令の実行によってCPUが遊休(アイドル)状態になると,他のタスクにCPUを割り当てる。
- イ
実行中のプログラムを一時中断して,制御プログラムに制御を移す。
- ウ
主記憶装置と低速の入出力装置との間のデータ転送を,補助記憶装置を介して行うことによって,システム全体の処理能力を高める。
- エ
多数のバッファから成るバッファプールを用意し,主記憶装置にあるバッファにアクセスする確率を上げることによって,補助記憶装置のアクセス時間を短縮する。
会話形式の解説
講師この問題では、OSの入出力制御の機能からスプーリングの説明を選びます。似た名前の機能がほかの選択肢に並んでいるので、それぞれ何の説明なのかを言い当てながら進めましょう。
受験者スプーリングという言葉は覚えているのですが、中身があいまいです。CPUを遊ばせない仕組みだったような気がして、CPUを他のタスクに割り当てる説明にひかれました。
講師CPUを遊ばせないという目的は近いのですが、やり方が違います。入出力待ちの間にCPUをほかのタスクへ回すのは、多重プログラミング(複数のプログラムを切り替えながら並行して動かす方式)の考え方です。その説明に、データをどこかに置いて転送するという話は出てきますか。
受験者出てきません。CPUを誰に割り当てるかの話だけですね。
講師そこが見分けるポイントです。スプーリングの要点は、低速な入出力装置とのやり取りを、補助記憶装置(ディスクなど)にいったん置いて行うことです。補助記憶を間に入れているかどうかで各選択肢を見てみましょう。
受験者実行中のプログラムを一時中断して制御プログラムに制御を移す、という説明も補助記憶は出てきません。これは割込みでしょうか。
講師そのとおりです。何かが起きたときに実行中の処理を止めて、OSの制御プログラムへ制御を移すのが割込みです。入出力データを蓄えて後から順に転送するという要素はありません。
受験者バッファプールの説明は、バッファという言葉があるので、データをためておく点でスプーリングに近い気がして迷います。
講師紛らわしいところですね。バッファがどこにあって、何を速くしているかを確かめてみてください。
受験者バッファは主記憶装置にあって、補助記憶装置へのアクセス時間を短くするのが目的と書かれています。補助記憶を介して入出力装置とやり取りする話ではないですね。
講師はい。主記憶上のバッファにデータが見つかる確率を上げて補助記憶へのアクセスを速くするのは、ディスクキャッシュ(バッファキャッシュ)です。目的は補助記憶を速く使うことなので、スプーリングとは別物です。
受験者残るのは、主記憶と低速の入出力装置の間の転送を補助記憶装置を介して行う、という説明です。これがスプーリングですね。でも、ディスクを経由するとかえって遅くなりませんか。
講師よい疑問です。たとえば出力データをいったん補助記憶のスプール領域に書き込めば、プログラムは低速な装置が終わるのを待たずに次の処理へ進めます。装置側は空いたときに順に処理するので、個々の転送ではなく、システム全体の処理能力が上がるわけです。
受験者整理すると、CPUを回すのは多重プログラミング、制御を移すのは割込み、主記憶のバッファで補助記憶を速くするのはディスクキャッシュ、補助記憶を介して低速装置とやり取りするのがスプーリング、ということですね。
講師その整理で大丈夫です。身近な例はプリンタへの印刷です。印刷データをいったんディスクに蓄え、プリンタが空いたら順に印刷します。その間アプリケーションは印刷の終わりを待たずに次の作業へ移れます。バッファという言葉に引っ張られず、データを置く場所が主記憶か補助記憶かを確かめるのが引っかけを避けるコツです。
まとめ
スプーリングは、低速な入出力装置とのデータ転送を補助記憶装置のスプール領域を介して行い、プログラムが装置の完了を待たずに済むようにしてシステム全体の処理能力を高める機能です。入出力待ちの間にCPUをほかのタスクへ回すのは多重プログラミング、実行中のプログラムを中断して制御プログラムへ制御を移すのは割込みです。主記憶上のバッファプールで補助記憶へのアクセスを速くするのはディスクキャッシュであり、スプーリングとは目的が異なります。見分けるときは「補助記憶を介して入出力装置とやり取りしているか」を確かめると判断しやすくなります。代表例はプリンタ印刷で、データをディスクに蓄えてから順に印刷します。
解答・解説
正解はウです
この問題のテーマ
OSの入出力制御にはいくつかの機能があります。この問題では、その中からスプーリングを正しく説明した選択肢を選びます。割込み、多重プログラミング、バッファリングとの違いがわかっているかが問われます。
解き方の考え方
スプーリングの要点は「低速な入出力装置とのやり取りを、補助記憶装置にいったん置いて行う」ことです。そこで各選択肢を、補助記憶を間に入れて入出力を処理しているかという観点で見ていきます。CPUの割当て、制御の移し替え、主記憶上のバッファだけを扱う記述は、それぞれ別の機能の説明だと判断できます。
選択肢ごとの解説
- ×ア あるタスクを実行しているときに,入出力命令の実行によってCPUが遊休(アイドル)状態になると,他のタスクにCPUを割り当てる。アのCPUの割当ての説明は、タスクが入出力を待つ間CPUが空かないように、ほかのタスクへCPUを回す仕組みを述べています。これは多重プログラミング(マルチタスク)の考え方です。補助記憶を介して入出力データを転送する話は含まれていないため、スプーリングの説明には当たりません。
- ×イ 実行中のプログラムを一時中断して,制御プログラムに制御を移す。イの実行中のプログラムを中断する説明は、何かが起きたときに制御プログラムへ制御を移す仕組みで、割込みのことです。入出力データを補助記憶に蓄えて後から順に転送する、という要素はありません。
- ○ウ 主記憶装置と低速の入出力装置との間のデータ転送を,補助記憶装置を介して行うことによって,システム全体の処理能力を高める。ウの補助記憶装置を介した転送の説明は、スプーリングの内容と合っています。出力データをいったん補助記憶のスプール領域に書き込めば、プログラムは低速な装置の完了を待たずに次の処理へ進めます。装置側は空いたときに順に処理するので、システム全体の処理能力が上がります。
- ×エ 多数のバッファから成るバッファプールを用意し,主記憶装置にあるバッファにアクセスする確率を上げることによって,補助記憶装置のアクセス時間を短縮する。エのバッファプールの説明は、主記憶上のバッファにデータが見つかる確率を上げて、補助記憶へのアクセス時間を短くする仕組みです。これはディスクキャッシュ(バッファキャッシュ)のことです。目的は補助記憶を速く使うことにあり、低速な入出力装置との転送を補助記憶経由にするスプーリングとは別のものです。
補足
身近な例はプリンタへの印刷です。印刷データをいったんディスクに蓄え、プリンタが空いたときに順に印刷します。その間、アプリケーションは印刷の終わりを待たずに次の作業へ移れます。
POINT
- スプーリングは、低速な入出力装置とのデータ転送を補助記憶装置(スプール領域)経由で行う機能です。
- CPUが入出力の完了を待たずに済むため、スループットが向上します。
- 入出力待ちの間にCPUをほかのタスクへ回すのは多重プログラミングで、スプーリングとは区別します。
- 実行中のプログラムを中断して制御プログラムへ制御を移すのは割込みです。
- 主記憶上のバッファで補助記憶へのアクセスを速くするのはディスクキャッシュ(バッファキャッシュ)です。
