Skip to the content.

最終更新日:2026年7月21日

まず結論

送信側の方が受信側より速いとき、バッファにたまる量は次の式で求めます。

バッファにたまる量
=(入力速度 − 出力速度)× 時間

送信速度を S、受信速度を R、連続送信時間を T、バッファサイズを L とすると、オーバーフローしない条件は次のとおりです。

L ≧ (S − R) × T

基本情報技術者試験では、次の3点で判断します。

  • 1秒あたりに増える量は S − R
  • T秒間なら (S − R) × T
  • 容量は必要量以上なので L ≧ 必要量

直感的な説明

バッファは、送信側と受信側の速度差を一時的に吸収する「待合場所」です。

例えば、送信側が1秒に100バイトを送り、受信側が1秒に80バイトしか処理できないとします。

入る量:100バイト/秒
出る量: 80バイト/秒
差  : 20バイト/秒

この20バイトが毎秒バッファへ残ります。

10秒間続けば、バッファには次の量がたまります。

20 × 10 = 200バイト

したがって、バッファサイズは少なくとも200バイト必要です。

定義・仕組み

バッファとは、処理速度の異なる装置やタスクの間で、データを一時的に保存する領域です。

この問題では、送信タスクがバッファへデータを入れ、受信タスクがバッファからデータを取り出します。

送信タスク
   ↓ S
バッファ
   ↓ R
受信タスク

1秒あたりにたまる量

1秒でバッファへ入る量は S、1秒で出ていく量は R です。

したがって、1秒あたりの増加量は次の式になります。

S − R

考える順番は、次のとおりです。

入ってくる量 − 出ていく量

T秒間にたまる量

1秒あたりに S − R だけ増えるため、T秒間では次の量がたまります。

(S − R) × T

これは、送信量全体ではありません。

送信中も受信側は処理を続けているため、バッファへ残るのは両者の差分です。

S × T − R × T
= (S − R) × T

オーバーフローしない条件

バッファがあふれないためには、バッファサイズ L が最大滞留量以上である必要があります。

L ≧ (S − R) × T

容量がちょうど最大滞留量と同じでも、あふれません。そのため、> ではなく を使います。

科目Aでどう出る?

科目Aでは、送信速度・受信速度・時間から、オーバーフローしないバッファサイズの条件を選ぶ問題として出やすいです。

次の順に考えると安全です。

1. どちらがバッファへ入れる側か
2. どちらがバッファから出す側か
3. 1秒あたりの差はいくつか
4. 何秒続くか
5. 容量は必要量以上か
確認すること 判断
入る速度 送信速度 S
出る速度 受信速度 R
1秒あたりの滞留量 S − R
T秒間の滞留量 (S − R) × T
オーバーフローしない条件 L ≧ (S − R) × T

符号を確認する

問題文で S > R と示されているなら、S − R は正の値です。

一方、R − S は負になります。

S > R
↓
S − R > 0
R − S < 0

バッファにたまる量が負になるのは不自然なので、式の順番を見直します。

不等号を確認する

オーバーフローを防ぐには、容量が必要量以上でなければなりません。

容量 ≧ 必要量

したがって、L < 必要量 となる選択肢は切れます。

数字を入れて確かめる

式だけで迷う場合は、簡単な数字を入れてみます。

S = 100バイト/秒
R = 80バイト/秒
T = 10秒

すると、

(100 − 80) × 10
= 200バイト

となります。

バッファサイズは200バイト以上必要です。

関連して、システム全体の単位時間あたりの処理量を確認したい場合は、スループットとは?単位時間あたりの処理量とスプーリングの関係も参考になります。

科目Bでどう使う?

科目Bでは、プログラム中でバッファへ追加される量と、取り出される量を追跡する場面で同じ考え方を使います。

ただし、必ず一定速度とは限りません。

各区間ごとに、次のように整理します。

現在のバッファ量
+ 入ってきた量
− 取り出された量
= 次のバッファ量

処理が繰り返される場合は、各時点でバッファ量が容量を超えないか確認します。

バッファ量 > 容量
→ オーバーフロー

よくある誤解・混同

R − S と考える

バッファへ入る量から、出ていく量を引きます。

入る量 − 出る量
= S − R

問題文で送信側の方が速いなら、R − S では負の値になってしまいます。

送信量全体 S × T が必要容量になる

受信側も同時にデータを取り出しています。

そのため、必要容量は送信量全体ではなく、送信量と受信量の差です。

S × T − R × T
= (S − R) × T

容量は必要量より小さくてもよい

必要量より小さいバッファでは、途中であふれます。

L < 最大滞留量
→ オーバーフローする

必要なのは、次の条件です。

L ≧ 最大滞留量

送信速度が受信速度以下でも同じ式で容量が増え続ける

S ≤ R なら、受信側が送信側以上の速度で処理できます。

一定速度で同時に動作するという前提では、バッファ量は増え続けません。

S > R
→ バッファにたまり続ける

S ≤ R
→ バッファにたまり続けない

確認問題(基本情報技術者試験対策)

送信タスクが1秒当たり120バイトをバッファへ送り、受信タスクが1秒当たり90バイトを取り出す。これを8秒間連続して行うとき、オーバーフローを防ぐために必要な最小バッファサイズはどれか。

  • ア. 30バイト
  • イ. 90バイト
  • ウ. 240バイト
  • エ. 960バイト
▶ クリックして答えと解説を見る(ここを開く)

正解:ウ

1秒あたりにたまる量は、

120 − 90 = 30バイト

8秒間では、

30 × 8 = 240バイト

したがって、必要な最小バッファサイズは240バイトです。

まとめ(試験直前用)

  • バッファは、送信側と受信側の速度差を一時的に吸収する
  • 1秒あたりにたまる量は「入る速度 − 出る速度」
  • 送信速度をS、受信速度をRとすると、滞留量は S − R
  • T秒間の最大滞留量は (S − R) × T
  • オーバーフローしない条件は L ≧ (S − R) × T
  • 送信量全体ではなく、送信量と受信量の差を考える
  • 迷ったら、簡単な数字を入れて符号と不等号を確認する

© 2024-2026 stemtazoo. All rights reserved.