共有メモリのプロセス間通信メカニズムは、主にプロセス間で大量のデータを転送するために使用されます。次の図は、共有メモリを使用してプロセス間で大量のデータを転送する概略図を示しています。
共有メモリは、メモリ内に個別に開かれたメモリ空間であり、アクセス許可、サイズ、最近のアクセス時刻などの独自のデータ構造を持ちます。データ構造は次のように定義されます:
リーリー
2 つのプロセスがこの共有メモリ空間を使用する前に、プロセスのアドレス空間と共有メモリ空間の間の接続を確立する必要があります。つまり、共有メモリ空間をプロセスにマウントします。システムは共有メモリに次の制限を課します:
リーリー
* 最初のパラメータはキー値で、通常は ftok() 関数によって生成されます
* 2 番目のパラメータは、作成される共有メモリセグメントのサイズ (バイト単位) です
* 3番目のパラメータは、共有メモリセグメントの作成識別子を識別するために使用されます
*/
リーリー
※第一引数は操作対象の共有メモリ識別子です
* 2番目のパラメータは実行される操作です
※第3引数はshmid_ds構造体の一時共有メモリ変数情報です
*/
リーリー
/*
※第一引数は操作対象の共有メモリ識別子です
* 2 番目のパラメータは、共有メモリのマップされたアドレスを指定するために使用されます。0 でない場合、このパラメータはシステムによって割り当てられます
。
※第3パラメータは共有メモリセグメントのアクセス権限とマッピング条件を指定します
*/
リーリー
/*
※パラメータは割り当てられた共有メモリの先頭アドレスです
*/
リーリー
2. 新しいプログラムを実行するために exec() が呼び出される場合、マウントされているすべての共有メモリは自動的にアンマウントされます。
3. exit() 関数がプロセス内で呼び出された場合、マウントされているすべての共有メモリが現在のプロセスから切断されます。
プログラム例/* 共有メモリを申請 */
リーリー/* 共有メモリをプロセスのアドレス空間にマップする */
リーリー/* マップ解除 */
リーリー/* 共有メモリを削除 */
リーリー出力結果:
以上がLinux プロセス間でメモリを共有する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。