ソフトウェアフロー制御 (ソフトウェアフローセイギョ) とは | 意味や読み方など丁寧でわかりやすい用語解説
ソフトウェアフロー制御 (ソフトウェアフローセイギョ) の読み方
日本語表記
ソフトウェアフロー制御 (ソフトウェアフローセイギョ)
英語表記
Software flow control (ソフトウェアフローコントロール)
ソフトウェアフロー制御 (ソフトウェアフローセイギョ) の意味や用語解説
ソフトウェアフロー制御は、データ通信において送信側と受信側のデータ転送速度の差を調整し、データの溢れや損失を防ぐための仕組みである。これは、特にシリアル通信のような連続的なデータ転送を行う際に重要な役割を果たす。送信側が受信側よりも高速にデータを送り続けると、受信側のデータ処理能力が追いつかず、一時的にデータを保持するための領域であるバッファが満杯になり、それ以上のデータが受信できずに破棄されてしまう。この問題を解決するため、ソフトウェアフロー制御は通信路を流れるデータ自体を使って、一時的にデータ転送を停止させたり再開させたりする制御を行う。ハードウェアフロー制御が専用の物理的な信号線(RTS/CTSなど)を用いるのに対し、ソフトウェアフロー制御はデータが流れる同じ通信線上で特定の制御文字を送受信することで実現される点が大きな特徴である。 具体的なソフトウェアフロー制御の方式として最も広く用いられるのがXON/XOFFプロトコルである。これは、受信側がデータを受信できない状態になりそうだと判断した際、送信側に対して特定の制御文字「XOFF」(Transmit Off、送信停止)を送ることで、データ送信の一時停止を要求する。XOFFを受け取った送信側は、それ以上のデータ送信を中断する。その後、受信側のバッファに空きができ、再びデータを受け入れられる状態になったら、受信側は別の制御文字「XON」(Transmit On、送信開始)を送信側に送る。XONを受け取った送信側は、中断していたデータ送信を再開する。このようにして、受信側のバッファの状態に応じて、送信側がデータ送信を停止・再開することで、バッファのオーバーフローを防ぎ、データの確実な受信を保証する仕組みがソフトウェアフロー制御である。 ソフトウェアフロー制御の大きな利点は、追加の物理的な配線が不要である点だ。RS-232Cなどのシリアル通信では、一般的に3本の配線(送信データ線、受信データ線、GND)だけでも通信が可能であり、ソフトウェアフロー制御を用いれば、これ以上の配線を増やすことなく流量制御が実現できる。これは、配線の簡素化や、すでに配線が済んでいる環境でフロー制御を後から導入する際に非常に有利となる。また、その実装も比較的シンプルであり、多くの組み込みシステムや通信デバイスでサポートされている。 一方で、いくつかの欠点も存在する。第一に、制御文字XONやXOFFがデータそのものと衝突する可能性がある点である。例えば、本来送りたいデータの中に偶然XONやXOFFと同じバイト列が含まれていた場合、受信側や送信側がそれを制御文字と誤認し、予期せぬ通信停止や再開が発生してしまう可能性がある。この問題を回避するためには、データの中に制御文字と同じ値が現れた場合に、その制御文字を特別なシーケンス(エスケープシーケンス)で囲んで送るなどの工夫が必要となる場合があるが、これはプロトコルの複雑化を招く。 第二に、制御文字の伝送遅延が問題となることがある。受信側がXOFFを送信してから、それが送信側に到達して送信が実際に停止するまでの間に、送信側はさらにデータを送り続けてしまう可能性がある。このわずかな時間差の間に、受信バッファが完全に満杯になり、データが失われるリスクが生じる。特に、通信速度が高速な場合や、通信経路が長距離にわたる場合、この遅延は無視できない問題となることがある。このため、受信バッファの空き容量がある程度余裕を持った状態でXOFFを送信する必要がある。 第三に、制御文字自体の送信に通信帯域が消費されるため、純粋なデータ転送効率がわずかに低下する可能性がある。また、ソフトウェアフロー制御は基本的に全二重通信(送受信が同時に行える通信)でのみ有効である。半二重通信(送受信どちらか一方しか行えない通信)では、制御文字の送受信がデータ送信を妨げてしまうため、適切に機能しない。 これらの特性から、ソフトウェアフロー制御は、モデムを介したダイヤルアップ通信、古いシリアルプリンターとの接続、組み込み機器間のデータ転送など、比較的低速から中速のシリアル通信で広く利用されてきた。特に、物理的な配線の制約が大きい環境や、シンプルなプロトコルが求められる場合に選択されることが多い。しかし、より高速で信頼性の高い通信が求められる現代においては、専用の制御線を持つハードウェアフロー制御が好まれる傾向にある。ハードウェアフロー制御では、データと制御信号が完全に分離されているため、制御信号がデータと誤認されるリスクがなく、制御信号の伝達も通常は高速であるため、より安定したフロー制御が可能となる。ソフトウェアフロー制御は、ハードウェアの制約や既存のシステムとの互換性を考慮する場合に、依然として有効な選択肢の一つとして認識されている。