UNIXでのサポート
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/01/22 20:55 UTC 版)
POSIX には共有メモリの標準化APIとして POSIX Shared Memory がある。これは、sys/mman.h にある shm_open という関数を使う。POSIXのプロセス間通信(POSIX:XSI拡張の一部)には共有メモリ関数として shmat、shmctl、shmdt が含まれている。 shm_open で生成された共有メモリは永続的であり、プロセスが明示的に削除しない限りシステム内に存在し続ける。ただしこれには欠点もあり、共有メモリを削除すべきプロセスがその前に異常終了したとき、その共有メモリがシステムのシャットダウンまで残存し続けることになる。そのような問題を避けるには、mmapを使って共有メモリを作成すればよい。2つの通信しあうプロセスが同じ名前の一時ファイルをオープンし、それに対してmmapすることでファイルをメモリにマッピングする。結果として、メモリマップされたファイル(メモリマップトファイル)への変更はもう一方のプロセスからも同時に観測できる。この技法の利点は、両方のプロセスが終了したとき、OSが自動的にファイルをクローズし、共有メモリを削除する点である。 Linuxカーネル 2.6 では、RAMディスク形式の共有メモリとして /dev/shm が導入された。より正確に言えば、誰でも書き込めるメモリ内のディレクトリであり、その容量の上限は /etc/default/tmpfs で指定できる。/dev/shm 機能サポートはカーネルの設定ファイルで指定でき、デフォルトでは無効となっている。なお、RedHat や Debian ベースのディストリビューションではデフォルトで有効になっている。
※この「UNIXでのサポート」の解説は、「共有メモリ」の解説の一部です。
「UNIXでのサポート」を含む「共有メモリ」の記事については、「共有メモリ」の概要を参照ください。
- UNIXでのサポートのページへのリンク