資格道場 › レッスン一覧 › ソフトウェア
ソフトウェア・4/10・13分

バッファとスプーリング

ゴール

バッファとスプーリングの役割を見分けられるようになり、「バッファサイズの不等式」「バッファリング時間」「スプーリングを使った印刷完了時刻」「スプールファイル容量」の計算問題を自力で解けるようになる。

OS の入出力管理では「速い装置と遅い装置の速度差をどう吸収するか」が定番テーマです。特にスプーリングは公開過去問で本試験系 9 回・免除 21 回出ている最頻出の用語で、定義問題と計算問題の両方で出ます。

このレッスンで稽古する(用語チェック・過去問)

結論:どちらも「速度差の吸収」。置き場所と規模が違う

バッファは、処理装置(CPU)と入出力装置のあいだに置く一時的な記憶域で、両者の処理速度の違いを緩和します。スプーリングは、その考え方を大きくしたものです。遅い出力装置(プリンタなど)に送るデータを、いったん補助記憶装置(ディスク)にまとめて書き出し、CPU は待たずに次の仕事へ進みます。

たとえるなら、バッファは「レジ横の小さなカゴ」、スプーリングは「倉庫にいったん全部預けて、配送係が自分のペースで運ぶ」仕組みです。どちらも「速い側が遅い側を待たない」ための工夫です。

項目 バッファ スプーリング
置き場所 主に主記憶上の一時領域 補助記憶装置(ディスク)上のスプールファイル
規模 小さい(数ブロック分) 大きい(ジョブ数件分の出力をまるごと)
目的 処理速度の違いを緩和 CPU を低速装置から切り離し、システム全体のスループット(単位時間あたりの処理量)を上げる
典型例 動画のバッファリング、通信の受信バッファ 印刷待ちキュー
バッファなし:CPUが待たされるCPU入出力装置(遅い)受け取るまで待つ待ちバッファあり: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 点だけ押さえれば迷いません。

バッファリング時間(動画や音声の再生前の溜め込み)も同じ考え方です。「ダウンロードにかかる時間 − 再生にかかる時間」だけ先に溜めておけば、再生中に途切れません。

溜まる量時間L(バッファサイズ)(S − R) × T毎秒 S − R ずつ増える0TL ≧ (S − R) × T ならあふれない
送る速さSと受け取る速さRの差の分だけバッファに溜まり続け、T秒後の量(S − R) × T以上のサイズLがあればあふれない。

計算2:スプーリングを使ったジョブと印刷の完了時刻

スプーリングがあると、CPU 処理と印刷は同時に進められます。ただしプリンタが 1 台なら、印刷は 1 件ずつ順番に行います。

解き方は表(タイムライン)を書くだけです。

  1. 実行の終了時刻を順に足し算で出す(多重度 1 なら前のジョブが終わってから次)
  2. 各ジョブの印刷開始=max(自分の実行終了時刻, 前の印刷の終了時刻)
  3. 印刷終了=印刷開始+印刷時間

多重度とは、同時に実行できるジョブの数のことです。「発生のペース」と「処理能力」を比べる問題では、実行側と印刷側の両方の処理能力を確かめます。

CPU処理と印刷は同時に進むCPUプリンタジョブ1ジョブ2ジョブ3印刷1印刷2印刷3前の印刷終了を待つ時間印刷開始は次の遅い方自分の実行終了時刻 / 前の印刷の終了時刻
スプーリングではCPU処理と印刷が同時に進み、各印刷は自分の実行終了時刻と前の印刷の終了時刻の遅い方から始まる。

計算3:スプールファイルの必要容量(出題は少なめ)

「プリンタが止まっているあいだに溜まるデータ量」を計算します。1 ジョブのデータ量 × 圧縮率 × 1 時間のジョブ数 × 耐える時間 で求めます。

試験での問われ方

  • 定義問題:「低速の出力装置」「補助記憶装置を介して」「スループット」がそろっていればスプーリングです。スワッピング・ページング・バッファプール・割込みの説明が選択肢に混ざります。
  • バッファの機能:「処理速度の違いを緩和」が正解の決まり文句です。割込みやデバイスドライバの説明で迷わせてきます。
  • 不等式:(R − S) と (S − R)、< と ≧ の 4 通りを並べてくるので、引き算の向きと不等号の向きを両方確認します。
  • 時間計算:実行時間と印刷時間を単純に足した値(280 秒、240 分など)が必ず選択肢にあります。
例題 1

オーバフローしないバッファサイズ L の関係式

図の送信タスクから受信タスクに T 秒間連続してデータを送信する。1 秒当たりの送信量を S,1 秒当たりの受信量を R としたとき,バッファがオーバフローしないバッファサイズ L を表す関係式として適切なものはどれか。ここで,受信タスクよりも送信タスクの方が転送速度は速く,次の転送開始までの時間間隔は十分にあるものとする。
ブロック図: 送信タスク —S→ バッファ(サイズ:L)—R→ 受信タスク

ア L<(R-S)×T
イ L<(S-R)×T
ウ L≧(R-S)×T
エ L≧(S-R)×T

出典:令和元年度 秋期 基本情報技術者試験 午前 問17

解き方と答えを見る
  1. 送信側は 1 秒に S、受信側は 1 秒に R を処理する。条件より S > R(送信の方が速い)。
  2. T 秒間に入ってくる量は S × T、出ていく量は R × T。
  3. バッファに溜まる量は S × T − R × T = (S − R) × T。S > R なので正の値になる。
  4. あふれないためには、L がこの量以上あればよい → L ≧ (S − R) × T。
  5. (R − S) は負の値になるので誤り。< は「足りない」の向きなので誤り。

答え:エ:L ≧ (S − R) × T

例題 2

音声を途切れずに再生するためのバッファリング時間

符号化速度が 192k ビット/秒の音声データ 2.4M バイトを,通信速度が 128k ビット/秒のネットワークを用いてダウンロードしながら途切れることなく再生するためには,再生開始前のデータのバッファリング時間として最低何秒間が必要か。

ア 50
イ 100
ウ 150
エ 250

出典:平成26年度 秋期 基本情報技術者試験 午前 問31

解き方と答えを見る
  1. 単位をビットにそろえる:2.4M バイト × 8 = 19.2M ビット。
  2. 再生にかかる時間:19.2M ビット ÷ 192k ビット/秒 = 100 秒。
  3. ダウンロードにかかる時間:19.2M ビット ÷ 128k ビット/秒 = 150 秒。
  4. ダウンロードの方が 150 − 100 = 50 秒長いので、その分を再生前に溜めておく。
  5. 確認:50 秒で 128k × 50 = 6.4M ビットを溜める。再生中は 1 秒に 192k − 128k = 64k ビット減り、100 秒で 6.4M ビット減る → ちょうど使い切れて途切れない。

答え:ア:50 秒

例題 3

ジョブ A〜D の全印刷完了時刻(プリンタ 1 台)

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

ア 100
イ 160
ウ 190
エ 280

出典:平成29年度 春期 基本情報技術者試験 午前 問16

解き方と答えを見る
  1. 実行(多重度 1・優先度順 A→B→C→D):A 0〜50、B 50〜80、C 80〜100、D 100〜140。
  2. A の印刷:実行終了 50 から開始 → 50〜100。
  3. B の印刷:実行終了は 80 だがプリンタは 100 まで使用中 → 100〜140。
  4. C の印刷:実行終了 100、プリンタは 140 まで使用中 → 140〜170。
  5. D の印刷:実行終了 140、プリンタは 170 まで使用中 → 170〜190。
  6. 最後の印刷が終わるのは 190 秒。単純合計(140 + 140 = 280)ではない。

答え:ウ:190 秒

例題 4

CPU 処理と印刷が並行する場合の全体時間

次の条件で四つのジョブが CPU 処理及び印刷を行う場合に,最初の CPU 処理を開始してから最後の印刷が終了するまでの時間は何分か。 〔条件〕 (1) 多重度 1 で実行される。 (2) 各ジョブの CPU 処理時間は 20 分である。 (3) 各ジョブは CPU 処理終了時に 400 M バイトの印刷データをスプーリングする。スプーリング終了後に OS の印刷機能が働き,プリンタで印刷される。 (4) プリンタは 1 台であり,印刷速度は 100 M バイト当たり 10 分である。 (5) CPU 処理と印刷機能は同時に動作可能で,互いに影響を及ぼさない。 (6) スプーリングに要する時間など,条件に記述されていない時間は無視できる。

ア 120
イ 160
ウ 180
エ 240

出典:基本情報技術者試験 科目A免除 修了試験 20220123 実施分 問17

解き方と答えを見る
  1. 1 ジョブの印刷時間:400M バイト ÷ 100M バイト × 10 分 = 40 分。
  2. CPU 処理:ジョブ 1 は 0〜20、ジョブ 2 は 20〜40、ジョブ 3 は 40〜60、ジョブ 4 は 60〜80。
  3. 印刷:ジョブ 1 は 20〜60、ジョブ 2 は 60〜100、ジョブ 3 は 100〜140、ジョブ 4 は 140〜180。
  4. 印刷(40 分)の方が CPU 処理(20 分)より遅いので、プリンタがずっと動き続ける。全体は 20 + 40 × 4 = 180 分。
  5. CPU と印刷を並行させずに足すと (20 + 40) × 4 = 240 分になるが、これは誤り。

答え:ウ:180 分

例題 5

実行待ち・印刷待ちが増えるかの判定

ある時間帯でのジョブの処理状況を計測したところ,次のとおりであった。どのような状況になっているか。 〔ジョブの処理状況〕 (1) 多重度 3 でジョブを実行する。 (2) ジョブは 5 分間隔で発生し,実行時間は多重度に依存せず 20 分である。 (3) 各ジョブは実行終了後にスプーリング機能を利用して印刷し,印刷時間は 15 分である。 (4) プリンタは 2 台使用する。

ア 印刷待ちだけが増加している。
イ 実行待ちだけが増加している。
ウ 実行待ちと印刷待ちが増加している。
エ 実行待ちも印刷待ちも発生していない。

出典:平成28年度 秋期 基本情報技術者試験 午前 問16

解き方と答えを見る
  1. ジョブの発生ペース:5 分に 1 件 = 1 分あたり 0.2 件。
  2. 実行の処理能力:同時に 3 件 × 20 分 → 20 分で 3 件 = 1 分あたり 0.15 件。0.2 > 0.15 なので、実行待ちが増える。
  3. 印刷の処理能力:2 台 × 15 分 → 15 分で 2 件 ≒ 1 分あたり 0.133 件。
  4. 印刷に回ってくるペースは実行側の 1 分あたり 0.15 件。0.15 > 0.133 なので、印刷待ちも増える。
  5. 両方とも処理能力が足りない。

答え:ウ:実行待ちと印刷待ちが増加している

例題 6

スプールファイルの必要容量

スプーリング機能を使用してプリンタ出力を行うシステムがある。次の条件を満たすためには,スプーリングファイルは少なくとも何 M バイト必要か。 〔条件〕 (1) 1 ジョブ当たりの印刷データ量は,2M バイトである。 (2) スプーリングファイルでは,データが 50%に圧縮される。 (3) 1 時間当たり 100 ジョブを処理する。 (4) 最大 5 時間はプリンタの停止に耐えられる。

ア 100
イ 250
ウ 500
エ 1000

出典:基本情報技術者試験 科目A免除 修了試験 200906 実施分 問19

解き方と答えを見る
  1. 1 ジョブの保存量:2M バイト × 50% = 1M バイト。
  2. プリンタが止まっているあいだに溜まるジョブ数:100 ジョブ/時 × 5 時間 = 500 ジョブ。
  3. 必要容量:1M バイト × 500 = 500M バイト。
  4. 圧縮を掛け忘れると 1,000M バイトになる(ひっかけ)。

答え:ウ:500M バイト

要点(試験直前に読む)

  • バッファ=装置間の一時記憶域で、処理速度の違いを緩和する。
  • スプーリング=主記憶と低速の入出力装置のやり取りを補助記憶経由で行い、スループットを上げる。
  • バッファサイズは L ≧ (S − R) × T(速い方から遅い方を引く・足りればよいので ≧)。
  • バッファリング時間=ダウンロード時間 − 再生時間。まずバイトをビットにそろえる(×8)。
  • スプーリングの時間計算では、印刷開始=max(自分の実行終了, 前の印刷終了)。実行と印刷は並行する。
  • スプールファイル容量=1 ジョブの量 × 圧縮率 × 時間あたりのジョブ数 × 耐える時間。

ひっかけ

  • スワッピング・ページング・バッファプール・マルチプログラミングの説明がスプーリングの選択肢に並ぶ → 「低速の入出力装置」と「補助記憶を介して」の両方がある選択肢を選ぶ。
  • 割込み(状態を伝える)、デバイスドライバ(固有の仕様を隠す)がバッファの選択肢に混ざる → 「記憶域」「速度の違いを緩和」がバッファ。
  • (R − S) と (S − R)、< と ≧ を入れ替えた 4 択 → 「速い側 − 遅い側」と「以上あればよい=≧」を両方確認する。
  • 実行時間と印刷時間を単純に足した値(280 秒・240 分)が選択肢にある → タイムラインを書き、プリンタの空き待ちと並行処理を反映する。
  • 単位のひっかけ(バイトとビット、圧縮率の掛け忘れ、1 時間分だけで計算)→ 計算前に単位と条件をすべて書き出す。

用語(14)

バッファ ばっふぁ(buffer)
速度の違う装置どうしのあいだに置き、データを一時的に溜めて速度差を吸収する記憶域。
⚠ バッファプールは、ディスクのデータを主記憶上で見つけやすくするための多数のバッファの集まり。目的は「アクセス時間の短縮」で、速度差の緩和とは言い方が違う。
バッファリング ばっふぁりんぐ(buffering)
バッファにデータを先に溜めておくこと。動画や音声を途切れずに再生するために使う。
オーバフロー おーばふろー(overflow)
溜める量が容量を超えて、データがあふれること。
スプーリング すぷーりんぐ(SPOOL:Simultaneous Peripheral Operation On-Line)
低速な入出力装置とのデータのやり取りを補助記憶装置経由で行い、CPU を待たせずにシステム全体のスループットを上げる方式。
⚠ スワッピングやページングも主記憶と補助記憶を使うが、低速な入出力装置は登場しない。「プリンタ」「低速の出力装置」とあればスプーリング。
スプールファイル すぷーるふぁいる(spool file)
スプーリングで、出力データを一時的に保存しておく補助記憶上のファイル。
スループット すするーぷっと(throughput)
単位時間あたりにシステムが処理できる仕事の量。
⚠ 応答時間(1 件にかかる時間)とは別の指標。スプーリングで上がるのはスループット。
スワッピング すわっぴんぐ(swapping)
主記憶が足りないとき、プログラムを丸ごと補助記憶へ出し入れする仕組み。
⚠ ページングはページ単位で入れ替える。スワッピングはプログラム(プロセス)単位。
ページング ぺーじんぐ(paging)
仮想記憶で、プログラムを固定長のページに分けて主記憶と補助記憶のあいだで入れ替える方式。
⚠ スワッピングはプログラム単位で入れ替える。
ブロッキング ぶろっきんぐ(blocking)
複数の論理レコードを 1 つのブロックにまとめて、入出力の回数を減らすこと。
⚠ 名前は似ているがスプーリングとは無関係。「まとめる」がキーワード。
バッファプール ばっふぁぷーる(buffer pool)
主記憶上にバッファをたくさん用意し、補助記憶へのアクセスを減らしてアクセス時間を短くする仕組み。
⚠ スプーリングの選択肢によく混ざる。「主記憶にあるバッファにアクセスする確率を上げる」はバッファプールの説明。
割込み わりこみ(interrupt)
装置の状態変化などを CPU に知らせ、実行中の処理を一時中断して OS に制御を移す仕組み。
⚠ バッファの機能問題で「装置が使えるようになったことを処理装置に伝える」と出たら割込み。
デバイスドライバ でばいすどらいば(device driver)
装置ごとの違いを吸収し、OS やアプリが装置固有の仕様を意識せずに使えるようにするソフトウェア。
⚠ 「階層を設ける」「固有の仕様を意識せず」はデバイスドライバ。バッファではない。
多重度 たじゅうど
同時に並行して実行できるジョブ(プログラム)の数。
マルチプログラミング まるちぷろぐらみんぐ(multiprogramming)
あるタスクが入出力待ちで CPU が空いたら、別のタスクに CPU を割り当てて遊休時間を減らす方式。
⚠ スプーリングの選択肢に混ざる。「CPU が遊休状態になると他のタスクに割り当てる」はこちら。

このレッスンの過去問

このレッスンで稽古する