【きょうゆうメモリ】

共有メモリ とは?

💡 みんなで使う共用ホワイトボード、書くときは順番を守って
📌 このページのポイント
共有メモリによるプロセス間通信 プロセスA 独自メモリ空間 読み書き可能 共有メモリ 共通のメモリ領域 データ領域 プロセスB 独自メモリ空間 読み書き可能 排他制御が必須 セマフォ / ミューテックス 共有メモリ コピー不要 → 高速 パイプ/ソケット カーネル経由 → 安全 vs
共有メモリのイメージ
ひよこ ひよこ

共有メモリってどういう仕組みなの?

ペンギン先生 ペンギン先生

普通、プロセスはそれぞれ独立したメモリ空間を持っているんだけど、共有メモリを使うと特定の領域を複数のプロセスから直接読み書きできるようになるんだよ。

ひよこ ひよこ

なんでわざわざメモリを共有するの?

ペンギン先生 ペンギン先生

パイプソケットだとデータをカーネル経由でコピーする必要があるけど、共有メモリならコピーなしで直接アクセスできるから、大量のデータを高速にやり取りできるんだよ。

ひよこ ひよこ

でも同時に書き込んだらおかしくならないの?

ペンギン先生 ペンギン先生

そこが一番の注意点だね。セマフォミューテックスといった排他制御の仕組みを使って、同時に書き込まないようにする必要があるんだ。

ひよこ ひよこ

どんな場面で使われるの?

ペンギン先生 ペンギン先生

データベースのバッファプールや、Webサーバーのワーカープロセス間のデータ共有、画像処理パイプラインなど、速度が重要な場面で使われるよ。

ひよこ ひよこ

速いけど気をつけることも多いんだね!

ペンギン先生 ペンギン先生

その通りだよ。POSIXではshm_openやmmapで実装するのが一般的だね。さらにマルチプロセッサ環境では、CPUごとのキャッシュ整合性(キャッシュコヒーレンシ)も意識する必要があって、設計にはかなりの注意が求められるんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「共有メモリ」って出てきたら「複数のプロセスが同じメモリ領域を使ってデータをやり取りする仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Shared Memory」 = 共有メモリ
💬 Sharedは「共有された」、Memoryは「記憶領域」という意味で、複数のプロセスが同じメモリを共有する仕組みのことだよ
← 用語集にもどる