次のページ 前のページ 目次へ

13. モデムで使うべき速度は?

著者は「速度」を「データ転送速度」のつもりで使っていますが、ほとん どの人は間違って速度と呼んでいます。最近のモデムは状況が許す最も高い速 度を自動的に選択するので、ユーザがモデムの電話回線上での速度を選べませ ん。しかし、モデムとコンピュータ間の速度なら選べます。この速度を「DTE 速度」と呼ぶこともあります。ここで、``DTE'' は Data Terminal Equipment を表します(コンピュータは DTE です)。信号が流れる経路の中でこの部分が ボトルネックにならないよう、この速度を充分に速く設定する必要があります。 DTE 速度の設定は、この接続で可能な限り高い速度にします。多くの場合、恐 らくそれより低い速度でしか使わないでしょう。

外付けモデムでは、DTE 速度はモデムと PC の間のケーブルを流れるデータの 速度です (bit/sec で表現します)。内蔵モデムでは、シリアルポートのよう に動作するので、外付けモデムと同じように考えます。モデムボードとコン ピュータはかなり高速なバスで直接接続されているので、速度に限界があるこ とはおかしいと感じるかもしれません。しかし、モデムボードには速度に限界 のある(そして速度を設定できる) 専用のシリアルポートがあるのです。

13.1 速度とデータ圧縮

どのような速度を選びましたか? 「データ圧縮」がなければ、モデムの 速度とちょうど同じ DTE 速度を選ぶ人もいるでしょう。データ圧縮はコンピュー タからモデムへ送るデータを扱い、より少ないデータへ符号化します。例えば、 PC からモデムへの速度が 20,000 bytes/sec (bps) で圧縮率が 2:1 なら、 10,000 bytes/sec のデータだけが電話回線上を流れます。従って、圧縮率が 2:1 だと、電話回線上での最も高いモデムの速度の2 倍を設定する必要があり ます。圧縮率が 3:1 なら、3 倍高速に設定しなければなりません。

13.2 どこで速度を設定するの?

通常、DTE 速度は通信プログラムのメニューや、ダイヤルインの際に使う getty コマンドのオプションで設定します。モデム間の DCE 速度は設定でき ません。

13.3 充分に高い速度へ設定できない

ハードウェアがサポートする最も高い速度を知る必要があります。1998 年の終りには、多くのハードウェアは 115.2K bps 程度の速度をサポートして いました。そして、少数の 56K 内蔵モデムだけが 230.4K bps をサポートし ていました。最近の Linux カーネルは (115.2K 以上の)速い速度をサポート していますが、以下に挙げる複数の理由により、それを利用するには困難が伴 うかもしれません。

  1. アプリケーションプログラム(あるいは stty) が 速い速度に対応できない。
  2. setserial のデフォルト速度は 115,200 bps である (しかし、変更は簡単です)。

どのようにハードウェア中で速度が設定されているか :除数とボーレート

ここに、通常使用する除数の一覧を挙げます。(最高速度が 115,200 なら) 対応する速度は : 1 (115.2K), 2 (57.6K), 3(38.4K), 6 (19.2K), 12 (9.6K), 24 (4.8K), 48 (2.4K), 96 (1.2K) などです。シリアルドライバは (正の整数の) 「除数」だけを送り、ハードウェアに速度を設定します。この 「除数」でハードウェアの最高速度を割り、より遅い速度になります(明らか ですが、除数 1 はハードウェアに最高速度で動作するよう命令します)。

通常、(通信プログラムか stty で) 115.2k の速度を指定したなら、シリアル ドライバはポートのハードウェアを、最も速い速度を指定する除数 1 に設定 します。最高速度が 230.4k のハードウェアをたまたま持っていたなら、 115.2k を指定すると除数が 1 となり、実際に設定される速度は 230.4k にな ります。設定の 2 倍になります。事実、どの速度に設定しても、本当の速度 は設定の 2 倍になります。460.8k で動作するハードウェアでは、本当の速度 は設定した速度の 4 倍になります。

速度設定のおまけ

(必ずしも問題を解決できるとは限りませんが)この状態を修正するため、 ``setserial'' の baud_base オプションを使って 230.4k などポートの 正しい最高速度へ変更するのが良いでしょう。(アプリケーションや stty で) 速度を設定したなら、除数 1 を使い設定した通りの速度を使えるようになり ます。問題 : (1999 年の中ごろでは) stty と多くの通信プログラムは最高速 度が 115.2k であり、230.4k などには設定できないでしょう。従って、この ような場合でのひとつの解決法は、setserial で何も変更せず、正しい 速度は常に設定の 2 倍であると自分に言い聞かせることです。

それほど好ましくはないのですが、もうひとつおまけがあります。(setserial で) baud_base をハードウェアの最高速度へ設定します。この操作は、 115.2k に設定したなら正確に 115.2k の設定になるよう、計算方法を修正し ます。使っている通信プログラムなどがこの修正をしてくれないなら、どのよ うにして最高速度へ設定するのか更に理解する必要があります。幸運にも、 setserial には修正の方法があります : ``divisor 1'' とともに ``spd_cust'' パラメータを用います。通信プログラムで速度を 38400 に設定すると、ポートの除数は 1 と設定され最高速度で動作します。例えば :

setserial /dev/ttyS2 spd_cust baud_base 230400 divisor 1

(spd_cust とともに用いる)上に挙げた特殊用途以外の目的には、 ``divisor'' オプションを試さないでください。

通信プログラムで設定できないような高速の設定を使いたいとしても、上の例 と同じくらい簡単にはいきません。しかし、同じ原理が適用できます。 baud_base をデフォルト設定のままにし、速度設定の際に除数のみを設 定します。従って、実際の速度はシリアルドライバに設定した除数で、モデム の最高速度を割った値になります。 どのようにハー ドウェア中で速度が設定されているか : 除数とボーレート をご覧ください。

水晶の振動数は baud_base ではありません

たいてい、設定した baud_base はハードウェア中の水晶発振子の振 動数よりも、ずっと小さな値だということを知ってください。これは、正確な 最高速度を得るために、水晶の振動数を 1/16 にすることもあるからです。多 くのサンプル点の各ビットを 1 か 0 か決定するために、この高い水晶の振動 数を使用します。これが水晶の振動数を比較的高くしなければならない理由で す。

13.4 速度表

56k モデムがあるので、最低でも 16650 UART を使うのがもっとも良いで す。しかし、ほとんどのモデムは 56k を出せません。次に良いのは、230,400 bps を出すよう 16650 UART を調整することです。モデムの速度によって異な る、望ましいシリアルの速度をここに挙げます :


次のページ 前のページ 目次へ