プロセス間通信のLinux ###、共有メモリ(共有メモリ)

共有メモリ(プロセス間通信最速):使用して、ユーザーモードカーネルモードにコピーされたが、2段階の共有メモリを必要としないユーザーモードカーネルモードにコピーされたデータから、一般的な操作データ、仮想アドレス空間物理メモリの動作を操作する、その後、別の仮想アドレス空間はまた、すなわちコピーすることなく、このデータを有することができます。共有メモリを直接仮想アドレス空間は、仮想アドレス空間操作にページ・テーブルをマッピングすることによって、物理メモリを適用し、動作は実際には同じ物理メモリ領域であるため、通信のので、他の手段のデータ伝送と比較した場合、二段階少ないユーザ・モードカーネル状態データコピー処理は、このようにメモリは、最速のプロセス間通信の間で共有されています。

複数のプロセスが同じメモリ領域を共有しているため、必然的にいくつかのユーザ・モード同期機構、ミューテックス(プロセス間ミューテックスを有していてもよい)、セマフォ、条件変数、読み書きロックを、必要とするので、ファイルをロックすることができます。共有データのデータの整合性を簡素化し、同時アクセスを避けるために、カーネルは、共有メモリリソースへの特別なアクセスのためのメカニズムを提供します。これは呼ばれるミューテックスまたはミューテックスオブジェクト。

 

メモリモデル

Linuxシステムでは、プロセスごとの仮想メモリは、複数のページに分割されます。これらのメモリページは、実際のデータが含まれています。各プロセスは、メモリアドレスから仮想メモリページとの間のマッピング関係を維持します。各プロセスが独自のメモリアドレスを持っていますが、異なるプロセスが同時に共有メモリの目的を達成するように、自分のアドレス空間に同じメモリページをマップすることができます。共有メモリを使用して、次の4つの手順が必要です。

  1. プロセスは、最初に新しい共有メモリブロックは新しいメモリページを作成し割り当てる必要があります。すべてのプロセスが同じメモリへのアクセスを共有したい、とだけ新しい共有メモリを作成するためのプロセスでなければなりませんので。メモリの割り当てブロックはすでに再び新しいページを作成しませんが存在するが、唯一の識別にメモリブロックの識別子を返します。

  2. その後、ページの共有仮想アドレスへのプロセス自体からのマッピングを作成し、独自のアドレス空間に共有メモリをバインドする必要があり、各プロセスの共有メモリブロックにアクセスする必要があります。

  3. 共有メモリのために使用されるプロセスの終了後、マッピングが削除されます。

  4. このプロセスは、もは​​や共有メモリ・ブロックを使用する必要があり、あなたは、1つの(唯一の)を持っていない必要があります。このプロセスは、共有メモリブロックの解放である共有メモリページの解放のために責任があります

 

共有メモリ(共有メモリ)は、標準システムVとPOSIX標準、詳細な基準に分けることができます。

ルーム#Linuxの##のSystem V IPCスタンダード&POSIX標準

公開された170元の記事 ウォンの賞賛207 ビュー459万+

おすすめ

転載: blog.csdn.net/xiaoting451292510/article/details/103731059