ソフトウェアによる共有メモリ
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/01/22 20:55 UTC 版)
「共有メモリ」の記事における「ソフトウェアによる共有メモリ」の解説
ソフトウェアにおける共有メモリは、以下のいずれかを意味する。 プロセス間通信 (IPC) の技法の一つ。同時に動作しているプログラム間でデータを交換する方法である。1つのプロセスがメモリ上に他のプロセスからもアクセスできる領域を作成する。 通常、アクセスする主体ごとにコピーを用意するようなデータがあるとき、仮想記憶機構や何らかの明示的プログラム機構を使ってそれらが同じ実体(物理メモリ)をアクセスするようマッピングすること。共有ライブラリやXIP(英語版) (Execute in Place) でよく使われる。 スレッド実装の一方式 プロセス群は共有メモリ領域に通常のメモリ領域と同じようにアクセスできるので、他のプロセス間通信(名前付きパイプ、ソケット、CORBAなど)と比較して通信手段としては非常に高速である。しかし、プロセス群が同じマシン上で動作しなければならないという制約があり(他のIPC手段はネットワーク上でも機能する)、プロセスが別々のCPU上で動作する場合はハードウェアによる共有メモリを使っていることになり、キャッシュコヒーレンシなどに注意が必要となる。プロセス間の通信がFIFOなストリーム型の場合は、名前付きパイプも通信手段として検討すべきである。一般に共有メモリ自体は保護機能をもたないので動作は高速である。しかし共有されるメモリは不定のタイミングで複数のプロセスからアクセスされる可能性がある。競合を避ける為にはセマフォやロックなどで競合を回避しなければならない。 共有メモリによるIPCは、例えばUNIX上のXサーバとアプリケーションの間で画像を転送する場合や、WindowsのCOMライブラリで CoMarshalInterThreadInterfaceInStream() 関数が返す IStream オブジェクトの内部で使われている。一般的に共有メモリが使われるアプリケーションとしてOracleなどのデータベースがある。Unix版OracleではSGAと呼ばれる共有メモリ空間にデータベースバッファキャッシュがおかれて複数のプロセスからアクセスさせて性能の向上を図っている。 動的ライブラリは一度メモリ上に置かれると、それが複数のプロセスにマッピングされ、プロセスごとにカスタマイズされるページ群(シンボル解決に違いが生じる部分)だけが複製され、通常コピーオンライトという機構で、そのページに書き込もうとしたときにコピーが行われる。
※この「ソフトウェアによる共有メモリ」の解説は、「共有メモリ」の解説の一部です。
「ソフトウェアによる共有メモリ」を含む「共有メモリ」の記事については、「共有メモリ」の概要を参照ください。
- ソフトウェアによる共有メモリのページへのリンク