私たちは、単一のプロセス内で複数のスレッドによってアクセスされる共有データに非常に精通しています。しかし、どうすれば複数のプロセスで共有されるメモリを作成できますか?
3 に答える
詳細shm_overview(7)
についてはを参照してください。ただし、匿名メモリマッピングを作成/削除するために呼び出す関数の概要は次のとおりです。
shm_open(2)
共有メモリを作成および/または接続し、そのファイル記述子を取得しますftruncate(2)
作成時にメモリセグメントのサイズを設定するオプションmmap(2)
共有メモリをプロセスのアドレス空間にマッピングするにはmunmap(2)
プロセスのアドレス空間からマッピングを削除するにはshm_unlink(3)
共有メモリセグメントを削除するには
必要なルーチンはですmmap
。これはファイル記述子を受け取り、メモリのチャンクへのポインタを返します。その後、複数のプロセスはすべて同じファイル名を使用してアクセスします。もちろん、破損したデータを誰も処理する必要がないように、読み取り/書き込みを調整する必要があります。
ファイル名は、ファイルシステム内の実際のファイルのファイル名にすることも、に渡される名前にすることもできますshm_open
。
実際、それはあなたが何をしようとしているのかによります。追加のプロセスを作成するだけの場合fork()
、特定の(文書化された)例外を除いて、子プロセスは親とメモリを共有します。あなたが電話しない限り、そしてあなたがexec()
。fork()
ただし、なしで使用exec()
すると無数の頭痛につながる可能性があるため、単純な場合を除いて実行しないでください。
残りの回答を完全にするために、作成用のshmget(2)と添付用の shmat( 2)を使用して共有メモリ ブロックを管理することもできます。これは、Google Chrome の Linux バージョンがプロセス間でメモリを共有するために使用するものです。