web-dev-qa-db-ja.com

Posix共有メモリとマップトファイル

このテーマについて少し学んだので、POSIX共有メモリ(shm_open)とPOSIXマップファイル(mmap)の本当の違いは何でしょうか。

どちらも、古いIPCメカニズムではなく、/ dev/tmpfsサブシステムを使用しているようです。

では、共有メモリよりもmmapファイルを使用する利点はありますか?

ありがとう。

25
SyBer

区別は必ずしも明確ではありません。共有メモリは、メモリマップトファイルを介して実装できます。 これに関する優れた記述はここにあります(C/C++プログラミングに適用されます)

15
ennuikiller

私の理解では、共有メモリはマップされたファイルの上に構築されていますが、 このページ は、メモリマップされたファイルを共有メモリとして使用する機能が条件付きであることを示しているようです。

Mmap()関数の使用は、QSHRMEMCTLシステム値によって制限されます。このシステム値が0の場合、mmap()関数はPROT_WRITE機能を持つ共有マッピングを作成しない場合があります。基本的に、これにより、マップされるストリームファイルの内容を変更する可能性のあるメモリマップの作成が防止されます。 flagsパラメーターがMAP_SHAREDを示し、protパラメーターがPROT_WRITEを指定し、QSHRMEMCTLシステム値が0の場合、mmap()関数は失敗し、エラー番号のEACCESが発生します。

2
John Knoeller

基本的に共有メモリはIPCの形式です。共有領域は/ dev/shmに作成され、メモリのみ(RAM)に作成され、ディスク操作を必要としないため、IPCのより高速な方法です。ただしIPCは、ディスクファイルを使用してからmmapを使用して実行することもできますが、比較的低速になります。または、ディスクファイルでバックアップされないmmapでMAP_ANONYMOUSをいつでも使用できます。

0
Rajat Paliwal