5

のマニュアルページを見たときshmat。API のプリミティブ機能は、それに関連付けられたメモリ セグメントshmidを呼び出しプロセスのアドレス空間にアタッチすることであると説明されています。

私が持っている質問は次のとおりです。

  • アタッチという用語は、私には一般的に見えます。attach が参照する基本的なアクティビティが何であるかを理解するのが難しいと思います。?
  • メモリのセグメントをマッピングするとはどういう意味ですか?
4

2 に答える 2

2

作成さchar *ptr=shmat(seg_id,NULL,0); れたセグメントIDshmget()を、この上記のコードを含むプロセスに関数ごとに添付します。

seg_idは新しく作成されたセグメントのセグメントIDであり NULL、オペレーティングシステムがユーザーに代わってセグメントの開始アドレスを処理することを意味します 。両方の0フラグです。read/write

プロセスが共有メモリに接続する場合は常に、そのセグメントに接続して別のプロセスがアクセスできるように、プロセスをデタッチする必要があります(リソースのロックメカニズムが存在する場合)。

切り離す:shmdt(ptr);

于 2012-11-06T10:04:07.317 に答える
1

ここに良い説明があります:http://www.makelinux.net/alp/035

「Linuxでは、各プロセスの仮想メモリはページに分割されます。各プロセスは、そのメモリアドレスから実際のデータを含むこれらの仮想メモリページへのマッピングを維持します。各プロセスには独自のアドレスがありますが、複数のプロセスのマッピングはメモリの共有を許可する同じページ」

于 2012-11-06T10:02:22.983 に答える