バッファがオーバーフローしないために必要なサイズを求めよう
今回は、送信タスクと受信タスクの処理速度に差があるとき、途中にあるバッファにどれだけデータがたまるのかを考える問題です。
この問題のポイントは、
バッファにたまる量 = 入ってくる量 − 出ていく量
です。
この考え方が分かれば、式を丸暗記しなくても解けます。
- 1. 問題
- 2. 何を確認する問題か
- 3. まず1秒間だけ考えてみよう
- 4. 送信した100バイト全部が残るわけではない
- 5. SとRを使って表してみよう
- 6. なぜR-Sではないのか
- 7. T秒間ではどれだけたまる?
- 8. 数字を入れて確認してみよう
- 9. 時間ごとのバッファの様子
- 10. バッファサイズLはどうすればよい?
- 11. なぜ「以上」なのか
- 12. 「次の転送開始までの時間間隔は十分にある」とは?
- 13. つまずきやすいポイント:S×Tとしてしまう
- 14. つまずきやすいポイント:R-Sとしてしまう
- 15. つまずきやすいポイント:不等号を逆にしてしまう
- 16. 水槽で考えると分かりやすい
- 17. 試験ではこの3ステップで考えよう
- 18. まとめ
問題
図の送信タスクから受信タスクにT秒間連続してデータを送信する。
1秒当たりの送信量をS、1秒当たりの受信量をRとしたとき、バッファがオーバーフローしないバッファサイズLを表す関係式として適切なものはどれか。
ここで、受信タスクよりも送信タスクの方が転送速度は速く、次の転送開始までの時間間隔は十分にあるものとする。
送信タスク → バッファ → 受信タスク
S L R
選択肢は次のとおりです。
ア L < (R-S) \times T
イ L < (S-R) \times T
ウ L \geqq (R-S) \times T
エ L \geqq (S-R) \times T
何を確認する問題か
この問題で確認したいのは、
データが入ってくる速度と、データが出ていく速度に差があるとき、その差がバッファにたまる
という考え方です。
問題では、
- 送信量:1秒当たりS
- 受信量:1秒当たりR
- 送信時間:T秒
- バッファサイズ:L
としています。
さらに問題文には、
受信タスクよりも送信タスクの方が転送速度は速い
とあります。
つまり、
S > R
です。

まず1秒間だけ考えてみよう
いきなりSやRといった記号だけで考えると少し難しいので、具体的な数字で考えてみます。
例えば、
- 送信:100バイト/秒
- 受信:60バイト/秒
だったとします。
1秒間に送信タスクからバッファへ入ってくる量は、
100バイト
です。
一方、同じ1秒間に受信タスクが取り出す量は、
60バイト
です。
したがって、バッファに残る量は、
100 - 60 = 40
となります。
つまり、
\text{1秒間にたまる量}=40\text{バイト}
です。
送信した100バイト全部が残るわけではない
ここは、この問題で特に大切なところです。
送信タスクが100バイト送ったからといって、100バイト全部がバッファに残るわけではありません。
なぜなら、その間に受信タスクも60バイトを取り出しているからです。
イメージすると、
入ってくる量:100バイト
↓
バッファ
↓
出ていく量:60バイト
なので、
100 - 60 = 40
となります。
バッファに残るのは40バイトです。
SとRを使って表してみよう
今度は、具体的な数字ではなく、問題文の記号を使って考えます。
1秒間にバッファへ入ってくる量は、
S
です。
同じ1秒間にバッファから出ていく量は、
R
です。
したがって、1秒間にバッファへたまる量は、
S-R
となります。
つまり、
\text{1秒間にたまる量}=S-R
です。
なぜR-Sではないのか
問題文では、
S > R
です。
つまり、送信する速度の方が速いということです。
例えば、
S=100
R=60
なら、
S-R=100-60=40
です。
一方、
R-S=60-100=-40
となってしまいます。
この問題で求めたいのは、バッファにどれだけデータが増えていくかです。
したがって、
R-S
ではなく、
S-R
と考えます。
T秒間ではどれだけたまる?
1秒間に、
S-R
だけバッファにデータがたまります。
それがT秒間続きます。
したがって、
katex display=true \times T[/katex]
となります。
つまり、T秒間でバッファにたまる最大量は、
katex display=true \times T[/katex]
です。
数字を入れて確認してみよう
例えば、
- S=100バイト/秒
- R=60バイト/秒
- T=5秒
だったとします。
まず、1秒間にたまる量は、
100-60=40
バイトです。
それが5秒間続くので、
40 \times 5 = 200
となります。
したがって、最大で
200バイト
バッファにたまります。
時間ごとのバッファの様子
| 経過時間 | 送信された量 | 受信された量 | バッファに残る量 |
|---|---|---|---|
| 0秒 | 0 | 0 | 0 |
| 1秒 | 100 | 60 | 40 |
| 2秒 | 200 | 120 | 80 |
| 3秒 | 300 | 180 | 120 |
| 4秒 | 400 | 240 | 160 |
| 5秒 | 500 | 300 | 200 |
このように、バッファの中身は毎秒40バイトずつ増えていきます。
5秒後には200バイトになります。
バッファサイズLはどうすればよい?
T秒後には最大で、
katex display=true \times T[/katex]
だけデータがたまります。
バッファがオーバーフローしないためには、そのデータをすべて保存できるだけの大きさが必要です。
したがって、
L \geqq (S-R) \times T
となります。
よって正解は、
エ
です。
なぜ「以上」なのか
例えば、バッファに最大200バイトたまるとします。
この場合、
- L=100バイト → 足りない
- L=199バイト → 足りない
- L=200バイト → ちょうど入る
- L=300バイト → 余裕がある
となります。
つまり、
L \geqq 200
です。
200バイトより大きくなければならないわけではありません。
200バイトちょうどでも大丈夫です。
そのため、
>
ではなく、
\geqq
を使います。
「次の転送開始までの時間間隔は十分にある」とは?
問題文には、
次の転送開始までの時間間隔は十分にある
と書かれています。
この部分も重要です。
これは、
今回の送信でバッファにたまったデータを、次の送信が始まるまでに受信タスクが処理し終えられる
という意味です。
流れで考えると、
送信開始
↓
T秒間データを送信
↓
バッファにデータがたまる
↓
送信終了
↓
受信タスクが残りのデータを処理
↓
バッファが空になる
↓
次の送信開始
となります。
つまり、前回の送信でたまったデータが残ったまま、次の送信が始まることは考えなくてよいということです。
つまずきやすいポイント:S×Tとしてしまう
この問題でよくある間違いが、
S \times T
としてしまうことです。
確かに、T秒間に送信タスクが送る総量は、
S \times T
です。
しかし、その間に受信タスクもデータを処理しています。
T秒間に受信タスクが処理する量は、
R \times T
です。
したがって、実際にバッファへ残る量は、
S \times T - R \times T
となります。
Tでくくると、
katex display=true \times T[/katex]
となります。
つまずきやすいポイント:R-Sとしてしまう
もう一つ注意したいのが、
R-S
としてしまうことです。
問題文では、
S > R
です。
送信する方が速く、受信する方が遅いため、その差がバッファにたまります。
したがって、
S-R
です。
「速い方 − 遅い方」
と考えると分かりやすいでしょう。
つまずきやすいポイント:不等号を逆にしてしまう
必要なバッファ量が200バイトなら、
L \geqq 200
です。
バッファサイズは、
必要なデータ量以上
でなければなりません。
ここで、
L < 200
としてしまうと、必要なデータを保存できなくなってしまいます。
水槽で考えると分かりやすい
この問題は、水槽に置き換えるとさらに分かりやすくなります。
例えば、
蛇口から毎秒100Lの水が入ってきます。
一方、水槽の下にある排水口からは毎秒60Lの水が出ていきます。
すると、1秒間に水槽へ増える水は、
100-60=40
Lです。
バッファも同じです。
- 水槽 → バッファ
- 蛇口 → 送信タスク
- 排水口 → 受信タスク
と考えることができます。
つまり、
\text{たまる速度}=\text{入ってくる速度}-\text{出ていく速度}
です。
試験ではこの3ステップで考えよう
このタイプの問題が出たら、3段階で考えます。
まず、1秒間にたまる量を求めます。
S-R
次に、T秒間にたまる量を求めます。
katex display=true \times T[/katex]
最後に、バッファサイズはその量以上必要だと考えます。
L \geqq (S-R) \times T
この3ステップです。
まとめ
問題6-4では、
バッファにたまる量は、送信速度と受信速度の差
と考えることがポイントです。
まず、1秒間にたまる量は、
S-R
です。
それがT秒間続くので、
katex display=true \times T[/katex]
となります。
そして、バッファサイズは、その量以上必要なので、
L \geqq (S-R) \times T
となります。
正解:エ
この問題では式を丸暗記するより、
入ってくる量 − 出ていく量 = たまる量
と理解しておくことが大切です。
この考え方を身につけておけば、似たようなバッファやデータ転送の問題にも対応できるようになります。











ディスカッション
コメント一覧
まだ、コメントがありません