MINHERIT
Section: System Calls (2)
索引
jman
BSD mandoc
索引
名称
minherit
- ページの継承を制御する
索引
ライブラリ
Lb libc
索引
書式
In sys/mman.h
Ft int
Fn minherit void *addr size_t len int inherit
索引
解説
Fn minherit
システムコールは、指定のページが継承の際の特性として
Fa inherit
を持つように変更します。
すべての実装において、継承の際の特性がページ単位で設定できることが
保証されるているわけではありません。
変更の単位はリージョン全体かもしれません。
Fx は、ページ毎に継承特性を調整する機能を持ちます。
継承は、
Fn fork
で作成された子供に対してのみ影響します。
Fn exec
には影響ありません。
exec されたプロセスは、アドレス空間全体を置き換えます。
このシステムコールは親のアドレス空間に対してもまた影響ありません
(親子によるアドレス空間の共有は潜在的にあり得ますが、これは除外します)。
継承は難解な機能であり、ほとんどが
Fn mmap
の
MAP_SHARED
機能で置き換えられています。
しかしながら、
Fn minherit
を使用して、
MAP_PRIVATE
でマップされたメモリブロックを親子間で共有可能です。
これにより、親もしくは子による修正は共有されますが、
元々下層にあるファイルは変更されません。
- INHERIT_SHARE
-
本オプションは、対象のアドレス空間を親子間で共有させます。
本オプションは、
元々下層にあるバッキングストアがどのようにマップされるかには、影響しません。
- INHERIT_NONE
-
本オプションは、対象のアドレス空間の継承を完全に防止します。
当該アドレス空間は子の中ではアンマップされます。
- INHERIT_COPY
-
本オプションは、アドレス空間を子に対しコピーオンライトで継承させます。
本オプションには不幸な副作用があり、
親が fork するときにアドレス空間がコピーオンライトになってしまいます。
元々のマッピングが
MAP_SHARED
の場合、
親が fork した後にはこれは親においては共有されません。
また、元の共有バッキングストアマッピングは、
親においてアンマップして再マップする以外に回復しようがありません。
索引
戻り値
Rv -std minherit
索引
エラー
Fn minherit
システムコールは次の場合に処理を失敗します:
- Bq Er EINVAL
-
Fa addr
引数と
Fa len
引数によって指定される仮想アドレス範囲が有効ではありません。
- Bq Er EACCES
-
Fa inherit
引数によって指定されるフラグが、
Fa addr
引数と
Fa len
引数によって指定されたページに対して適切ではありませんでした。
索引
バグ
一度
MAP_PRIVATE
もしくは
MAP_SHARED
しているものに継承を設定すると、領域をアンマップして再マップする以外に
もともとのコピーオンライトの意味を回復させることはできません。
索引
関連項目
fork(2),
madvise(2),
mincore(2),
mprotect(2),
msync(2),
munmap(2),
rfork(2)
索引
歴史
Fn minherit
システムコールは
Ox ではじめて登場しました。
索引
Index
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 戻り値
-
- エラー
-
- バグ
-
- 関連項目
-
- 歴史
-
Time: 07:06:28 GMT, January 12, 2009