バッファがオーバーフローしないために必要なサイズを求めよう

広告

今回は、送信タスクと受信タスクの処理速度に差があるとき、途中にあるバッファにどれだけデータがたまるのかを考える問題です。

この問題のポイントは、

バッファにたまる量 = 入ってくる量 − 出ていく量

です。

この考え方が分かれば、式を丸暗記しなくても解けます。


問題

図の送信タスクから受信タスクに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秒000
1秒1006040
2秒20012080
3秒300180120
4秒400240160
5秒500300200

このように、バッファの中身は毎秒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

となります。

正解:エ

この問題では式を丸暗記するより、

入ってくる量 − 出ていく量 = たまる量

と理解しておくことが大切です。

この考え方を身につけておけば、似たようなバッファやデータ転送の問題にも対応できるようになります。

訪問数 8 回, 今日の訪問数 13回

広告