shmget() と shmat()

shmget() と shmat()

を使用してshmget()特定のサイズ(バイト)の共有メモリブロックを割り当て、を使用してshmat()この共有メモリブロックを呼び出しプロセスのアドレス空間に接続します。

私の理解を確認する必要があります。
共有メモリを使用、作成、接続するプロセスshmget()shmat()、その共有メモリを使用してアドレス空間に接続する他のプロセスがありますshmat()

この共有メモリの(使用された)戻りアドレスはshmat()仮想アドレスであるため、両方のプロセスで異なります。

ただし、共有メモリブロック自体には単一の基本物理アドレスがあり、そのメモリを共有するプロセスの別の仮想アドレスにマッピングされます。そうですか?

答え1

はい、そうです。これはアイデアです。共有メモリ仮想アドレッシングにより、異なるプロセスが同じ物理メモリをマッピングでき、これらのアドレスは同じである必要はありません。

同じ共有メモリページを同じプロセスの別のアドレスに2回マッピングすることもできます。たとえば、GNU Radio(クラシック)はこれを行います。バッファを二重マッピングして、最後に書き込みが最初に書き込みを意味するリングバッファをシミュレートします。

関連情報