バッファとスプーリング
バッファとスプーリングの役割を見分けられるようになり、「バッファサイズの不等式」「バッファリング時間」「スプーリングを使った印刷完了時刻」「スプールファイル容量」の計算問題を自力で解けるようになる。
OS の入出力管理では「速い装置と遅い装置の速度差をどう吸収するか」が定番テーマです。特にスプーリングは公開過去問で本試験系 9 回・免除 21 回出ている最頻出の用語で、定義問題と計算問題の両方で出ます。
このレッスンで稽古する(用語チェック・過去問)結論:どちらも「速度差の吸収」。置き場所と規模が違う
バッファは、処理装置(CPU)と入出力装置のあいだに置く一時的な記憶域で、両者の処理速度の違いを緩和します。スプーリングは、その考え方を大きくしたものです。遅い出力装置(プリンタなど)に送るデータを、いったん補助記憶装置(ディスク)にまとめて書き出し、CPU は待たずに次の仕事へ進みます。
たとえるなら、バッファは「レジ横の小さなカゴ」、スプーリングは「倉庫にいったん全部預けて、配送係が自分のペースで運ぶ」仕組みです。どちらも「速い側が遅い側を待たない」ための工夫です。
| 項目 | バッファ | スプーリング |
|---|---|---|
| 置き場所 | 主に主記憶上の一時領域 | 補助記憶装置(ディスク)上のスプールファイル |
| 規模 | 小さい(数ブロック分) | 大きい(ジョブ数件分の出力をまるごと) |
| 目的 | 処理速度の違いを緩和 | CPU を低速装置から切り離し、システム全体のスループット(単位時間あたりの処理量)を上げる |
| 典型例 | 動画のバッファリング、通信の受信バッファ | 印刷待ちキュー |
入出力管理のほかの機能と区別する
「バッファの機能はどれか」という問題では、入出力管理のほかの機能が選択肢に並びます。キーワードで見分けましょう。
| 機能 | 何をするか | 見分けるキーワード |
|---|---|---|
| バッファ | 装置間に記憶域を置き、速度差を緩和する | 「特別な記憶域」「処理速度の違いを緩和」 |
| 割込み | 装置の状態変化(使えるようになった、終わった等)を CPU に知らせる | 「〜を処理装置に伝える」 |
| デバイスドライバ | 装置ごとの違いを吸収し、固有の仕様を意識せずに使えるようにする | 「階層を設ける」「固有の仕様を意識せず」 |
| ファイル抽象化(デバイスファイル) | 装置をファイルと同じように読み書きできるようにする | 「ファイルと同じように取り扱う」 |
スプーリングと似た名前の仕組み(最頻出の比較)
スプーリングの定義問題では、主記憶とディスクのあいだで何かをやり取りする別の仕組みが選択肢として出てきます。ポイントは「低速な入出力装置が登場するのはスプーリングだけ」という点です。
| 用語 | 何と何のあいだで | 目的 |
|---|---|---|
| スプーリング | 主記憶 ⇄ 補助記憶 ⇄ 低速な入出力装置 | CPU を低速装置から解放し、スループットを上げる |
| スワッピング | 主記憶 ⇄ 補助記憶(プロセスやプログラムを丸ごと入れ替える) | 主記憶不足への対処 |
| ページング | 主記憶 ⇄ 補助記憶(ページ単位で入れ替える) | 仮想記憶の実現 |
| ブロッキング | 複数の論理レコードを 1 ブロックにまとめる | 入出力回数を減らす |
| バッファプール | 主記憶上に多数のバッファを用意する | ディスクのデータが主記憶上で見つかる確率を上げ、アクセス時間を短縮する |
| マルチプログラミング | CPU が入出力待ちのあいだに別タスクへ切り替える | CPU の遊休(アイドル)時間を減らす |
flowchart LR
A["CPU(ジョブ実行)"] -->|"高速に書き出す"| B["補助記憶(スプールファイル)"]
B -->|"自分のペースで読み出す"| C["プリンタ(低速)"]
A -->|"書き終えたらすぐ次のジョブへ"| A
計算1:バッファサイズの関係式(本試験系 3 回)
送る側が速く(S)、受け取る側が遅い(R)とき、差の分がバッファに溜まり続けます。T 秒間に溜まる量は (S − R) × T です。
オーバフロー(あふれ)を防ぐには、バッファサイズ L がこれ以上あればよいので、L ≧ (S − R) × T になります。「大きい方から小さい方を引く」「足りればよい=≧」の 2 点だけ押さえれば迷いません。
バッファリング時間(動画や音声の再生前の溜め込み)も同じ考え方です。「ダウンロードにかかる時間 − 再生にかかる時間」だけ先に溜めておけば、再生中に途切れません。
計算2:スプーリングを使ったジョブと印刷の完了時刻
スプーリングがあると、CPU 処理と印刷は同時に進められます。ただしプリンタが 1 台なら、印刷は 1 件ずつ順番に行います。
解き方は表(タイムライン)を書くだけです。
- 実行の終了時刻を順に足し算で出す(多重度 1 なら前のジョブが終わってから次)
- 各ジョブの印刷開始=max(自分の実行終了時刻, 前の印刷の終了時刻)
- 印刷終了=印刷開始+印刷時間
多重度とは、同時に実行できるジョブの数のことです。「発生のペース」と「処理能力」を比べる問題では、実行側と印刷側の両方の処理能力を確かめます。
計算3:スプールファイルの必要容量(出題は少なめ)
「プリンタが止まっているあいだに溜まるデータ量」を計算します。1 ジョブのデータ量 × 圧縮率 × 1 時間のジョブ数 × 耐える時間 で求めます。
試験での問われ方
- 定義問題:「低速の出力装置」「補助記憶装置を介して」「スループット」がそろっていればスプーリングです。スワッピング・ページング・バッファプール・割込みの説明が選択肢に混ざります。
- バッファの機能:「処理速度の違いを緩和」が正解の決まり文句です。割込みやデバイスドライバの説明で迷わせてきます。
- 不等式:(R − S) と (S − R)、< と ≧ の 4 通りを並べてくるので、引き算の向きと不等号の向きを両方確認します。
- 時間計算:実行時間と印刷時間を単純に足した値(280 秒、240 分など)が必ず選択肢にあります。
オーバフローしないバッファサイズ L の関係式
ア L<(R-S)×T
イ L<(S-R)×T
ウ L≧(R-S)×T
エ L≧(S-R)×T
解き方と答えを見る
- 送信側は 1 秒に S、受信側は 1 秒に R を処理する。条件より S > R(送信の方が速い)。
- T 秒間に入ってくる量は S × T、出ていく量は R × T。
- バッファに溜まる量は S × T − R × T = (S − R) × T。S > R なので正の値になる。
- あふれないためには、L がこの量以上あればよい → L ≧ (S − R) × T。
- (R − S) は負の値になるので誤り。< は「足りない」の向きなので誤り。
答え:エ:L ≧ (S − R) × T
音声を途切れずに再生するためのバッファリング時間
ア 50
イ 100
ウ 150
エ 250
解き方と答えを見る
- 単位をビットにそろえる:2.4M バイト × 8 = 19.2M ビット。
- 再生にかかる時間:19.2M ビット ÷ 192k ビット/秒 = 100 秒。
- ダウンロードにかかる時間:19.2M ビット ÷ 128k ビット/秒 = 150 秒。
- ダウンロードの方が 150 − 100 = 50 秒長いので、その分を再生前に溜めておく。
- 確認:50 秒で 128k × 50 = 6.4M ビットを溜める。再生中は 1 秒に 192k − 128k = 64k ビット減り、100 秒で 6.4M ビット減る → ちょうど使い切れて途切れない。
答え:ア:50 秒
ジョブ A〜D の全印刷完了時刻(プリンタ 1 台)
| ジョブ | 実行時間 | 印刷時間 |
|---|---|---|
| A | 50 | 50 |
| B | 30 | 40 |
| C | 20 | 30 |
| D | 40 | 20 |
ア 100
イ 160
ウ 190
エ 280
解き方と答えを見る
- 実行(多重度 1・優先度順 A→B→C→D):A 0〜50、B 50〜80、C 80〜100、D 100〜140。
- A の印刷:実行終了 50 から開始 → 50〜100。
- B の印刷:実行終了は 80 だがプリンタは 100 まで使用中 → 100〜140。
- C の印刷:実行終了 100、プリンタは 140 まで使用中 → 140〜170。
- D の印刷:実行終了 140、プリンタは 170 まで使用中 → 170〜190。
- 最後の印刷が終わるのは 190 秒。単純合計(140 + 140 = 280)ではない。
答え:ウ:190 秒
CPU 処理と印刷が並行する場合の全体時間
ア 120
イ 160
ウ 180
エ 240
出典:基本情報技術者試験 科目A免除 修了試験 20220123 実施分 問17
解き方と答えを見る
- 1 ジョブの印刷時間:400M バイト ÷ 100M バイト × 10 分 = 40 分。
- CPU 処理:ジョブ 1 は 0〜20、ジョブ 2 は 20〜40、ジョブ 3 は 40〜60、ジョブ 4 は 60〜80。
- 印刷:ジョブ 1 は 20〜60、ジョブ 2 は 60〜100、ジョブ 3 は 100〜140、ジョブ 4 は 140〜180。
- 印刷(40 分)の方が CPU 処理(20 分)より遅いので、プリンタがずっと動き続ける。全体は 20 + 40 × 4 = 180 分。
- CPU と印刷を並行させずに足すと (20 + 40) × 4 = 240 分になるが、これは誤り。
答え:ウ:180 分
実行待ち・印刷待ちが増えるかの判定
ア 印刷待ちだけが増加している。
イ 実行待ちだけが増加している。
ウ 実行待ちと印刷待ちが増加している。
エ 実行待ちも印刷待ちも発生していない。
解き方と答えを見る
- ジョブの発生ペース:5 分に 1 件 = 1 分あたり 0.2 件。
- 実行の処理能力:同時に 3 件 × 20 分 → 20 分で 3 件 = 1 分あたり 0.15 件。0.2 > 0.15 なので、実行待ちが増える。
- 印刷の処理能力:2 台 × 15 分 → 15 分で 2 件 ≒ 1 分あたり 0.133 件。
- 印刷に回ってくるペースは実行側の 1 分あたり 0.15 件。0.15 > 0.133 なので、印刷待ちも増える。
- 両方とも処理能力が足りない。
答え:ウ:実行待ちと印刷待ちが増加している
スプールファイルの必要容量
ア 100
イ 250
ウ 500
エ 1000
出典:基本情報技術者試験 科目A免除 修了試験 200906 実施分 問19
解き方と答えを見る
- 1 ジョブの保存量:2M バイト × 50% = 1M バイト。
- プリンタが止まっているあいだに溜まるジョブ数:100 ジョブ/時 × 5 時間 = 500 ジョブ。
- 必要容量:1M バイト × 500 = 500M バイト。
- 圧縮を掛け忘れると 1,000M バイトになる(ひっかけ)。
答え:ウ:500M バイト
要点(試験直前に読む)
- バッファ=装置間の一時記憶域で、処理速度の違いを緩和する。
- スプーリング=主記憶と低速の入出力装置のやり取りを補助記憶経由で行い、スループットを上げる。
- バッファサイズは L ≧ (S − R) × T(速い方から遅い方を引く・足りればよいので ≧)。
- バッファリング時間=ダウンロード時間 − 再生時間。まずバイトをビットにそろえる(×8)。
- スプーリングの時間計算では、印刷開始=max(自分の実行終了, 前の印刷終了)。実行と印刷は並行する。
- スプールファイル容量=1 ジョブの量 × 圧縮率 × 時間あたりのジョブ数 × 耐える時間。
ひっかけ
- スワッピング・ページング・バッファプール・マルチプログラミングの説明がスプーリングの選択肢に並ぶ → 「低速の入出力装置」と「補助記憶を介して」の両方がある選択肢を選ぶ。
- 割込み(状態を伝える)、デバイスドライバ(固有の仕様を隠す)がバッファの選択肢に混ざる → 「記憶域」「速度の違いを緩和」がバッファ。
- (R − S) と (S − R)、< と ≧ を入れ替えた 4 択 → 「速い側 − 遅い側」と「以上あればよい=≧」を両方確認する。
- 実行時間と印刷時間を単純に足した値(280 秒・240 分)が選択肢にある → タイムラインを書き、プリンタの空き待ちと並行処理を反映する。
- 単位のひっかけ(バイトとビット、圧縮率の掛け忘れ、1 時間分だけで計算)→ 計算前に単位と条件をすべて書き出す。
用語(14)
速度の違う装置どうしのあいだに置き、データを一時的に溜めて速度差を吸収する記憶域。
⚠ バッファプールは、ディスクのデータを主記憶上で見つけやすくするための多数のバッファの集まり。目的は「アクセス時間の短縮」で、速度差の緩和とは言い方が違う。
バッファにデータを先に溜めておくこと。動画や音声を途切れずに再生するために使う。
溜める量が容量を超えて、データがあふれること。
低速な入出力装置とのデータのやり取りを補助記憶装置経由で行い、CPU を待たせずにシステム全体のスループットを上げる方式。
⚠ スワッピングやページングも主記憶と補助記憶を使うが、低速な入出力装置は登場しない。「プリンタ」「低速の出力装置」とあればスプーリング。
スプーリングで、出力データを一時的に保存しておく補助記憶上のファイル。
単位時間あたりにシステムが処理できる仕事の量。
⚠ 応答時間(1 件にかかる時間)とは別の指標。スプーリングで上がるのはスループット。
主記憶が足りないとき、プログラムを丸ごと補助記憶へ出し入れする仕組み。
⚠ ページングはページ単位で入れ替える。スワッピングはプログラム(プロセス)単位。
仮想記憶で、プログラムを固定長のページに分けて主記憶と補助記憶のあいだで入れ替える方式。
⚠ スワッピングはプログラム単位で入れ替える。
複数の論理レコードを 1 つのブロックにまとめて、入出力の回数を減らすこと。
⚠ 名前は似ているがスプーリングとは無関係。「まとめる」がキーワード。
主記憶上にバッファをたくさん用意し、補助記憶へのアクセスを減らしてアクセス時間を短くする仕組み。
⚠ スプーリングの選択肢によく混ざる。「主記憶にあるバッファにアクセスする確率を上げる」はバッファプールの説明。
装置の状態変化などを CPU に知らせ、実行中の処理を一時中断して OS に制御を移す仕組み。
⚠ バッファの機能問題で「装置が使えるようになったことを処理装置に伝える」と出たら割込み。
装置ごとの違いを吸収し、OS やアプリが装置固有の仕様を意識せずに使えるようにするソフトウェア。
⚠ 「階層を設ける」「固有の仕様を意識せず」はデバイスドライバ。バッファではない。
同時に並行して実行できるジョブ(プログラム)の数。
あるタスクが入出力待ちで CPU が空いたら、別のタスクに CPU を割り当てて遊休時間を減らす方式。
⚠ スプーリングの選択肢に混ざる。「CPU が遊休状態になると他のタスクに割り当てる」はこちら。
このレッスンの過去問
- 入出力バッファの機能(処理速度差の緩和)平成28年度 春期 基本情報技術者試験 午前 問17
- バッファサイズと送受信速度差の関係式令和元年度 秋期 基本情報技術者試験 午前 問17
- スプーリング機能の定義平成30年度 秋期 基本情報技術者試験 午前 問17
- スプーリングを用いたジョブ実行と印刷の所要時間計算平成29年度 春期 基本情報技術者試験 午前 問16
- スプーリングファイル必要容量の計算基本情報技術者試験 科目A免除 修了試験 200906 実施分 問19