1

私はシステム プログラミングの初心者です。疑問が非常に漠然としている場合は、気をつけてください。

組み込みのユーザー空間バッファーが使用されているため、カーネルを介したシステムコールを介してブロックサイズのデータ​​にアクセスできますが、これには大きなオーバーヘッドがかかりますが、ユーザー空間では小さなサイズのデータ​​に細かくアクセスできます.方法を理解しました.この方法は効率的ですが、これらのユーザーバッファーはファイルを開く各プロセスに関連しているため、理解できませんでした。

両方が同時にファイルにアクセスしている場合、プロセスはファイルに加えられたわずかな変更をどのように認識しますか。

プロセスは古いデータにアクセスしますが、ユーザー空間バッファーにまだある他のプロセスによって変更されたデータにはアクセスしないため、これは問題になりませんか。

間違いがあればご了承ください。

4

1 に答える 1

1

はい、これが起こります。プロセス間の競合状態が存在し、IO がバッファリングされると奇妙な動作が発生する可能性があります。ただし、通常、入力はそれほどバッファリングされないため (通常は一度に 1 行のみ)、それほど悪くはありません。という関数を使用して回避する方法がありますmmap

場合によっては、複数のプロセスで通信する必要があるため、パイプ/ソケットまたはその他の形式の IPC (プロセス間通信) を使用します。

ただし、あなたの主な問題と思われるものに答えるには: いいえ、これは実際には大きな問題にはなりません。2 つのプロセスが同じファイルを操作しているのに、お互いを意識する必要がないのはなぜですか? それはそれほど一般的ではなく、そうである場合、何か奇妙なことが起こり、ユーザーは一度に 1 つのプログラムを本能的に実行し、修正されます。

于 2014-12-15T04:56:24.127 に答える