MADVISE

Section: System Calls (2)
索引 jman

BSD mandoc
 

索引

名称

madvise , posix_madvise - メモリの使用法について助言を与える  

索引

ライブラリ

Lb libc  

索引

書式

In sys/mman.h Ft int Fn madvise void *addr size_t len int behav Ft int Fn posix_madvise void *addr size_t len int behav  

索引

解説

Fn madvise システムコールによって、自身のメモリ利用の習性の知識があるプロセスは、それを システムに説明できます。 Fn posix_madvise インタフェースは同等で規格に適合するために提供されます。

知られた習性は以下のとおりです:

MADV_NORMAL
デフォルトのページング動作に戻るようにシステムに指示します。
MADV_RANDOM
ページがランダムにアクセスされ、プリフェッチが有利ではないと考えられるという ヒントです。
MADV_SEQUENTIAL
指定のページがフォルトで読み取られたとき、そのページの直前のページの 優先順位を VM システムが下げるようにします。
MADV_WILLNEED
指定の仮想アドレス範囲内にあるページが一時的に高い優先順位を持つようにし、 それらがメモリ内にある場合、解放される可能性を減少させます。 さらに既にメモリ内にあるページはただちにプロセスにマップされ、 それによってプロセス全体にわたるフォルトによる読取りによる 不要なオーバヘッドを除去します。 これは、フォルトによるページのバッキングストアからの 読取りを生じさせるのではなく、 メモリ内に既にあるページを呼び出し側のプロセスに素早くマップさせます。
MADV_DONTNEED
VM システムに、指定の範囲内のページのメモリ内優先順位の減少を許可します。 今後、このアドレス範囲への参照はページフォルトを発生させるでしょう。
MADV_FREE
VM システムにページを解放する自由を与え、指定ページ範囲内の情報がもはや 重要でないことをシステムに通知します。 これは、アドレス空間を有効にしたままで malloc(3) がアドレス空間内の任意の位置のページを解放できるようにする効率的な方法です。 ページが次に参照される時には、そのページは要求時 0 クリアの対象に なっている可能性もありますし、または MADV_FREE 呼び出しの前にそこにあったデータが残っているかもしれません。 ページが再び修正されるまで、そのアドレス空間範囲に対する参照だけでは、 VM システムはバッキングストアから情報をページに読み取る動作を行わなくなります。
MADV_NOSYNC
このマップに関連づけられているデータを 物理的バッキングストアにフラッシュしないようにシステムに要求します。 通常、これにより、ファイルシステムアップデートデーモンが VM システムが汚したページを特に理由もないのに 物理ディスクに書き込む不要な動作を防止します。 VM とファイルシステムの一貫性は常に維持されることに注意してください。 この機能は、マップされたデータが必要なときだけ、 (通常、システムページャにより) フラッシュされることを 保証しているに過ぎません。

この機能を使用する典型的な場合とは、 ファイルを裏に持つ共有メモリ領域をプロセス (IPC) 間通信で使いたいとき、 特に、その領域に格納されるデータを物理的ディスクに書き込む必要がない場合です。 この機能は、SysV 共有メモリ呼び出しで得られる mmap 性能と 同等の性能を与えてくれますし、かつ、SysV 共有メモリ呼び出しを使うより、 きめ細かい制御が可能でより制約が少ない方法でもあります。 しかしこの機能は UNIX プラットホーム間で移植性がないことに注意してください (いくつかのプラットホームではデフォルトで正しく振る舞うかも知れませんが)。 詳しい情報に関しては、 mmap(2) の MAP_NOSYNC セクションを参照してください。

MADV_AUTOSYNC
将来、アドレス範囲内のページが汚された場合のために MADV_NOSYNC の効果を元に戻します。 既に汚されているページについての効果は不定です。 書き戻しするかもしれませんし、しないかもしれません。 書き戻しを確実に行うには、 msync(2) または fsync(2) システムコールを使用します。
MADV_NOCORE
領域は、コアファイルに含まれません。
MADV_CORE
コアファイルの領域を含みます。
MADV_PROTECT
スワップ空間を使い果たした時に、 このプロセスは終了させられるべきではないことを、VM システムに通知します。 プロセスはスーパユーザの特権を持っていなければなりません。 これは、システムが適切に機能するために実行され続けなければならない プロセス群で、思慮分別を持って使用されるべきです。

Fn posix_madvise インタフェースを呼び出す移植可能なプログラムは、上記のフラグではなく別名の POSIX_MADV_NORMAL , POSIX_MADV_SEQUENTIAL POSIX_MADV_RANDOM , POSIX_MADV_WILLNEED および POSIX_MADV_DONTNEED を使用するべきです。  

索引

戻り値

Rv -std madvise  

索引

エラー

Fn madvise システムコールは次の場合に失敗します:

Bq Er EINVAL
Fa behav 引数が有効ではありません。
Bq Er ENOMEM
Fa addr 引数と Fa len 引数で指定された仮想アドレス範囲が有効ではありません。
Bq Er EPERM
MADV_PROTECT が指定され、プロセスがスーパユーザの特権を持っていません。

 

索引

関連項目

mincore(2), mprotect(2), msync(2), munmap(2)  

索引

規格

Fn posix_madvise インタフェースは St -p1003.1-2001 に適合しています。  

索引

歴史

Fn madvise システムコールは BSD 4.4 ではじめて登場しました。


 

索引

Index

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

jman



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