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

名称
ライブラリ
書式
解説
戻り値
エラー
バグ
関連項目
歴史

jman



Time: 07:06:28 GMT, January 12, 2009