shm_overview - POSIX
共有メモリの概要
POSIX 共有メモリ API
を使用すると、メモリのある領域を共有して、
プロセス間で情報をやり取りすることができる。
この API
では以下のインターフェースが採用されている。
- shm_open(3)
- 新しいオブジェクトを生成しオープンする、もしくは
既存のオブジェクトをオープンする。これは
open(2)
と同じである。下記にある他のインターフェースで使用する
ファイルディスクリプタを返す。
- ftruncate(2)
- 共有メモリオブジェクトの大きさを設定する。
- mmap(2)
- 呼び出したプロセスの仮想アドレス空間に共有メモリオブジェクトを
マップする。
- munmap(2)
- 呼び出したプロセスの仮想アドレス空間から
共有メモリオブジェクトをアンマップする。
- shm_unlink(3)
- 共有メモリオブジェクト名を削除する。
- close(2)
- shm_open(3)
で割り当てられたファイルディスクリプタが不要になった際に、
そのファイルディスクリプタをクローズする。
- fstat(2)
- その共有メモリオブジェクトについての情報が入った
stat
構造体を取得する。
このシステムコールが返す情報には、オブジェクトのサイズ
( st_size)、 許可属性
(st_mode)、 所有者 ( st_uid)、
グループ ( st_gid)
がある。
- fchown(2)
- 共有メモリオブジェクトの所有権を変更する。
- fchmod(2)
- 共有メモリオブジェクトの許可属性を変更する。
Versions¶
POSIX 共有メモリは Linux 2.4 と glibc
2.2
以降でサポートされている。
持続性¶
POSIX
共有メモリオブジェクトはカーネル内で保持される。
共有メモリオブジェクトは、システムがシャットダウンされるか、
全てのプロセスがそのオブジェクトをアンマップし、
shm_unlink(3)
で削除されるまで、存在し続ける。
リンク¶
POSIX 共有メモリ API
を使用したプログラムは
cc -lrt
でコンパイルし、リアルタイムライブラリ
librt
とリンクしなければならない。
ファイルシステム経由での共有メモリオブジェクトへのアクセス¶
Linux
では、共有メモリオブジェクトは通常
/dev/shm
以下にマウントされる仮想ファイルシステム
(
tmpfs)
内に作成される。
カーネル 2.6.19 以降の Linux
では、
仮想ファイルシステム内のオブジェクトの許可属性の制御に、
アクセス制御リスト (ACL;
access control lists)
を使うことができる。
POSIX.1-2001.
通常は、共有メモリオブジェクトにアクセスするプロセスは、
POSIX
セマフォなどを使ってプロセス間で同期をとらなければならない。
System V 共有メモリ (
shmget(2),
shmop(2) など)
は古い共有メモリ API
である。 POSIX
共有メモリは、より簡単で、うまく設計されたインタフェースを提供している。
一方で、POSIX
共有メモリは System V
共有メモリと比べると
利用できるシステムが少ない
(特に、古いシステムでは少ない)。
関連項目¶
fchmod(2),
fchown(2),
fstat(2),
ftruncate(2),
mmap(2),
mprotect(2),
munmap(2),
shmget(2),
shmop(2),
shm_open(3),
shm_unlink(3),
sem_overview(7)
この文書について¶
この man ページは Linux
man-pages
プロジェクトのリリース
3.41 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。