1

2 つのプロセス間で適度な量のメモリを移動する必要がある場合は、次のようにします。

  • 書き込み用のファイルを作成する
  • ftruncate を目的のサイズに
  • mmap してリンクを解除する
  • 必要に応じて使用する

別のプロセスがそのデータを必要とする場合、次のことを行います。

  • UNIXソケットを介して最初のプロセスに接続します
  • 最初のプロセスは、UNIX ソケット メッセージを介してファイルの fd を送信します。
  • fdをmmapする
  • 必要に応じて使用する

これにより、コピーなしでプロセス間でメモリを移動できますが、作成されるファイルはメモリにマウントされたファイルシステム上にある必要があります。そうしないと、ディスク ヒットが発生し、パフォーマンスが低下する可能性があります。ファイルシステムを使わずにそのようなことをする方法はありますか? ポインターとともに fd を返す malloc のような関数がそれを行います。

[編集] ファイル記述子を持つことで、カーネルによって維持される参照カウント メカニズムも提供されます。

4

1 に答える 1

4

System VまたはPOSIX共有メモリに何か問題がありますか (多少異なりますが、最終的には同じ結果になります)? このようなシステムでは、プロセスがメモリにアクセスするときのプロセス間の調整について心配する必要がありますが、これはメモリ マップト ファイルにも当てはまります。

于 2011-07-25T23:45:18.050 に答える