Linuxリダイレクトは、高速入力と低速出力をどのように管理しますか?

Linuxリダイレクトは、高速入力と低速出力をどのように管理しますか?

これにより、$ cat ssd/file1 > hdd/file1SSDからの読み込みがHDDへの書き込みよりも高速になります。猫が読むデータはどうなりますか?猫に速度を遅くするように指示する入力と出力の間の通信はありますか?

ベストアンサー1

(自体)が実行する作業を検討してくださいcat。入力からメモリのバッファ(サイズによって決定されますcat)に読み込まれ、標準出力に書き込まれます。これ読むそして書くブロックを実行します。入力の終わりに達するまで読み取りが停止し、データ(必要な場合)を待ちます。同様に、書き込みが停止してデータが書き込まれるのを待ちます(必要な場合)。これは、出力と入力の間にいくつかの通信を提供します。入力が出力が吸収できるよりも速くデータを提供すると、書き込みがブロックされ、書き換えができるまでcat読み取りが停止します。

オペレーティングシステムのキャッシュは状況を少し複雑にしますが、動作を大きく変えることはありません。特に書き込みの場合、オペレーティングシステムは、ターゲットがデータを保存するのを待たずに、書き込みデータをキャッシュに保存し、後でフラッシュすることがよくあります。観点から見ると、それをcat停止する前に、より多くのデータを書き込むことができます(反対側に入力データがある限り)。catしかし、基本原則は変わりません。書き込みが読み取りより遅い場合、OSは最終的に書き込みをブロックすることを決定します(例えばこれは、キャッシュへの書き込みを待っているデータが多すぎるか、待ち時間が長すぎるためです。

おすすめ記事