のマニュアルページを見たときshmat
。API のプリミティブ機能は、それに関連付けられたメモリ セグメントshmid
を呼び出しプロセスのアドレス空間にアタッチすることであると説明されています。
私が持っている質問は次のとおりです。
- アタッチという用語は、私には一般的に見えます。attach が参照する基本的なアクティビティが何であるかを理解するのが難しいと思います。?
- メモリのセグメントをマッピングするとはどういう意味ですか?
のマニュアルページを見たときshmat
。API のプリミティブ機能は、それに関連付けられたメモリ セグメントshmid
を呼び出しプロセスのアドレス空間にアタッチすることであると説明されています。
私が持っている質問は次のとおりです。
作成さchar *ptr=shmat(seg_id,NULL,0);
れたセグメントIDshmget()
を、この上記のコードを含むプロセスに関数ごとに添付します。
seg_id
は新しく作成されたセグメントのセグメントIDであり
NULL
、オペレーティングシステムがユーザーに代わってセグメントの開始アドレスを処理することを意味します
。両方の0
フラグです。read/write
プロセスが共有メモリに接続する場合は常に、そのセグメントに接続して別のプロセスがアクセスできるように、プロセスをデタッチする必要があります(リソースのロックメカニズムが存在する場合)。
切り離す:shmdt(ptr);
ここに良い説明があります:http://www.makelinux.net/alp/035
「Linuxでは、各プロセスの仮想メモリはページに分割されます。各プロセスは、そのメモリアドレスから実際のデータを含むこれらの仮想メモリページへのマッピングを維持します。各プロセスには独自のアドレスがありますが、複数のプロセスのマッピングはメモリの共有を許可する同じページ」