バッファアンダーラン

コンピューティングにおいて、バッファアンダーランまたはバッファアンダーフローとは、2つのデバイスまたはプロセス間の通信に使用されるバッファにデータが読み込まれる速度が、バッファからデータが読み込まれる速度よりも遅い場合に発生する状態です。この場合、バッファからデータを読み出すプログラムは、バッファが満たされるまで処理を一時停止する必要があります。バッファリングされるデータは、この種のストップ・スタート・アクセスに適していないことが多いため、このような状況に対処することは望ましくない、場合によっては深刻な副作用を引き起こす可能性があります。

並行プログラミングの観点から見ると、バッファ アンダーランはリソース不足の一形態と考えることができます。

上記で定義された用語は、バッファオーバーフローとは異なります。バッファオーバーフローとは、メモリの一部が固定サイズのバッファを形成しているにもかかわらず、そのサイズを超えるデータで満たされ、割り当てられたチャンク外のメモリ位置が上書きされる状態です。ただし、バッファアンダーランとアンダーフローは、バッファアンダーライトの意味で使われることもあります。バッファアンダーライトとは、プログラムがバッファの先頭より前のメモリ位置にデータを書き込むように仕向けられ、そこに存在する可能性のあるデータ(例えばパーミッションビット)が上書きされる状態です。[ 1 ]

一般的な原因と解決策

バッファアンダーランは、多くの場合、バッファリングされている接続に関連する一時的な問題の結果です。たとえば、 CPU時間をめぐって他のプロセスが競合している 2 つのプロセス間の接続、または帯域をめぐってデバイスが競合している物理リンクなどです。

このような問題に対する最も簡単な対策は、バッファサイズを増やすことです。受信データストリームを1秒あたり1ビットで読み取る必要がある場合、10ビットのバッファでは接続がブロックされても最大10秒で切断されますが、60ビットのバッファでは最大1分間のブロックが許容されます。しかし、この方法ではプロセスまたはデバイスが利用できるメモリ量が増加し、コストが高くなる可能性があります。この方法では、バッファが最初は満杯(読み取りプロセス開始前にかなりの時間を要する可能性があります)で動作し、接続がブロックされていない限り常に満杯の状態が続くと想定されています。平均的に、データが必要な速度よりも速く到着しない場合、接続のブロックは累積します。例えば、60ビットのバッファを持つ仮想的な接続で毎分1ビットを「ドロップ」すると、接続が1時間アクティブ状態のままであればバッファアンダーランが発生します。リアルタイムアプリケーションでは、バッファサイズを大きくすると入出力間のレイテンシも増加します。これは、ビデオ会議などの低レイテンシアプリケーションでは望ましくありません。

CDおよびDVDの記録に関する問題

バッファ アンダーランは、 CD/DVD の書き込み中に深刻な問題を引き起こす可能性があります。書き込みが開始されると、停止して完璧に再開することができないため、アンダーランに必要な一時停止によりディスク上のデータが無効になることがあります。バッファは通常、ハード ディスクや他の CD/DVD などの比較的低速なソースから満たされるため、他の同時タスクによる CPU またはメモリの負荷が高くなると、小さなバッファの容量を簡単に使い果たす可能性があります。そのため、バッファ アンダーラン保護と呼ばれる手法が、 Plextor BurnProof、Nero UltraBuffer、Yamaha SafeBurn、JustLink、Seamless Linkなど、さまざまな商標で、さまざまな CD/DVD ライター ベンダーによって実装されています。この手法により、レーザーは確かに任意の時間書き込みを停止し、バッファが再びいっぱいになったときに再開することができます。連続した書き込み間のギャップは非常に小さくなります。

この問題を防ぐもう 1 つの方法は、書き換え可能なメディア( CD-RWDVD-RWDVD-RAM ) を使用するときに、単一の更新されたアドレス テーブルによって参照される小さな「パケット」にデータを編成するUDFファイル システムを使用することです。これにより、より短いバーストで書き込むことができます。

マルチメディア再生

グラフィックコントローラフレームバッファが更新されない場合、バッファに新しいデータが届くまでコンピュータ画面の画像がハングアップしたように見えます。多くのビデオプレーヤープログラム(MPlayerなど)は、システムが過負荷になった場合にフレームをドロップする機能を備えており、意図的にバッファアンダーランを発生させて処理速度を維持します。

オーディオコントローラのバッファはリングバッファです。アンダーランが発生し、オーディオコントローラが停止しない場合、実装に応じてバッファ内のサウンドを繰り返し続けるか、無音を出力します。このような効果は一般に「マシンガン」またはMax Headroomスタッタリング効果と呼ばれます。これは、オーディオ再生中にオペレーティングシステムがハングした場合に発生します。エラー処理ルーチン(例:ブルースクリーンオブデス)によって、最終的にオーディオコントローラが停止する可能性があります。

手動でオーディオをつなぎ合わせたり、サンプルを再トリガーしたり、プラグインを使用したりして、音楽やサウンドアートの作成中にこのオーディオのグリッチを意図的に模倣することを、スタッター編集と呼びます。

参考文献