共有メモリマッピングファイルと共有メモリ領域は互いに基づいて実装されていますか?

共有メモリマッピングファイルと共有メモリ領域は互いに基づいて実装されていますか?

共有メモリマッピングファイルと共有メモリ領域は互いに基づいて実装されていますか?次の二つの文章はこんな言葉をするようで、私が見るには鶏か卵かという質問のようです。

次のオペレーティングシステムの概念は、共有メモリマッピングファイルを紹介します。複数のプロセスがファイルの内容を保持する同じ物理メモリ領域を共有して、同じファイルを共有しますか?

複数のプロセスが同時に同じファイルをマップできます。、データ共有を許可します。すべてのプロセスの書き込みは仮想メモリ内のデータを変更し、ファイルの同じ部分をマップする他のすべてのプロセスで見ることができます。仮想メモリに関する以前の議論を考慮すると、メモリマッピングされた部分の共有を実装する方法が明らかになりました。 各共有プロセスの仮想メモリマップは、同じ物理メモリページ、つまりディスクブロックのコピーを保持するページを指します。このメモリ共有を図 9.22 に示します。

ここに画像の説明を入力してください。

以下では共有メモリについても紹介します。

  • 複数のプロセスがメモリマッピングファイルを共有してメモリ領域を共有しますか?

  • 「メモリマッピングファイル」はディスクまたはメインメモリにありますか?ディスクにあると思いましたが、「メモリマッピングファイルは通信プロセス間の共有メモリ領域として機能する」というのはメインメモリに常駐するという意味のようです。

ほとんどの場合、共有メモリは実際にはメモリマッピングファイルを介して実装されます。。この場合、プロセスは、通信プロセスメモリが同じファイルを仮想アドレス空間にマッピングすることを可能にし、共有メモリを使用して通信できます。メモリマップされたファイルは、通信プロセス間の共有メモリ領域として機能します(図9.23)。

ここに画像の説明を入力してください。

ありがとうございます。

答え1

共有メモリマッピングファイルと共有メモリ領域は互いに基づいて実装されていますか?

結局のところ、それはほぼ/dev/shm 仮想ディスクです。

「メモリマッピングファイル」はディスクまたはメインメモリにありますか?

はい!

アクセスされるファイル部分は、(スイッチによって)バッファ、すなわちRAMにコピーされる。

このメモリへのすべての書き込みはファイルにすぐに表示されますが、バッファが同期またはフラッシュされるまで物理ディスクに書き込まれません。

答え2

共有メモリは、通常のファイル、ブロックデバイス、またはスワップを介してバックアップできます。メモリ領域の作成方法によって異なります。

複数のプロセスが同じ共有メモリ領域を使用している場合、その仮想アドレスは同じ物理アドレスを指します。あるプロセスの書き込みは、メモリに接続されているディスクファイル(存在する場合)を介さずに別のプロセスで直接表示できます。

共有メモリの後ろにファイルがある場合、カーネルは時々RAMで変更されたページをファイルに同期します。メモリを使用するプロセスは通常、このようなことがいつ発生するかを知る必要はありませんが、必要に応じてmsyncより速く発生するように呼び出すことができます。

共有メモリの後ろにファイルがない場合は、非共有プロセスメモリと同様に、一部のRAMを取得する必要があるときにカーネルがスワップページを移動する可能性があります。交換すると、共有メモリをマップするすべてのプロセスですぐに使用できる新しい物理アドレスが得られます。

最初に見たときに私を混乱させたもう1つの事実は、マップファイルを使用している場合は、プロセスが1つだけ含まれていても変更を適用してファイルmmapに保存するためにマップファイルを使用する必要があることです。MAP_SHARED最初はMAP_SHAREDこの関数の名前が間違っていると思いましたが、後で考えると、を使用するか、read後で提供されるファイルにアクセスする他のプロセスと修正を「共有」していますmmap。だからそれは意味があります。

関連情報