最終更新日:2026年7月21日
fe fe-technology computer-system buffer transfer-rate
まず結論
送信側の方が受信側より速いとき、バッファにたまる量は次の式で求めます。
バッファにたまる量
=(入力速度 − 出力速度)× 時間
送信速度を 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 - 送信量全体ではなく、送信量と受信量の差を考える
- 迷ったら、簡単な数字を入れて符号と不等号を確認する