madvise(2) FreeBSD 一般コマンドマニュアル

madvise

前のページ 上に戻る 次のページ

madvise




書式

     #include <sys/types.h>
     #include <sys/mman.h>

     int
     madvise(void *addr, size_t len, int behav);


解説

     madvise() システムコールによって、自身のメモリ利用の習性の知識があるプロ
     セスは、それをシステムに説明できます。これまで知られている習性は、
     <sys/mman.h> で定義されており、次のとおりです。

     #define MADV_NORMAL     0 /* これ以降、特殊な処理は必要ない */
     #define MADV_RANDOM     1 /* ランダムなページ参照が予測される */
     #define MADV_SEQUENTIAL 2 /* シーケンシャルな参照が予測される */
     #define MADV_WILLNEED   3 /* これらのページを必要とする */
     #define MADV_DONTNEED   4 /* これらのページを必要としない */
     #define MADV_FREE       5 /* データは今や重要ではない */
     #define MADV_NOSYNC     6 /* 明示的に物理的バッキングストアが
                                     コミットされない場合 */
     #define MADV_AUTOSYNC   7 /* デフォルトは物理的バッキングストアに
                                     コミットされる */
     #define MADV_NOCORE     8 /* コアファイルにページを含まないこと */
     #define MADV_CORE       9 /* コアファイルにページを復帰させる */

     MADV_NORMAL      デフォルトのページング動作に戻るようにシステムに指示しま
                      す。

     MADV_RANDOM      ページがランダムにアクセスされ、プリフェッチが有利ではな
                      いと考えられるというヒントです。

     MADV_SEQUENTIAL  指定のページがフォルトで読み込まれたとき、そのページの直
                      前のページの優先順位を VM システムが下げるようにします。

     MADV_WILLNEED    指定の仮想アドレス範囲内にあるページが一時的に高い優先順
                      位を持つようにし、それらがメモリ内にある場合、解放される
                      可能性を減少させます。さらに既にメモリ内にあるページはた
                      だちにプロセスにマップされ、それによってプロセス全体にわ
                      たるフォルトによる読み込みによる不要なオーバーヘッドを除
                      去します。これは、フォルトによるページのバッキングストア
                      からの読み込みを生じさせるのではなく、メモリ内に既にある
                      ページを呼び出し側のプロセスに素早くマップさせます。

     MADV_DONTNEED    VM システムに、指定の範囲内のページのメモリ内優先順位の
                      減少を許可します。今後、このアドレス範囲への参照はページ
                      フォルトを発生させるでしょう。

     MADV_FREE        VM システムにページを解放する自由を与え、指定ページ範囲
                      内の情報がもはや重要でないことをシステムに通知します。こ
                      れは、アドレス空間を有効にしたままで malloc(3) がアドレ
                      ス空間内の任意の位置のページを解放できるようにする効率的
                      ジャにより) フラッシュされることを保証しているに過ぎませ
                      ん。

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

     MADV_AUTOSYNC    将来、アドレス範囲内のページが汚された場合のために
                      MADV_NOSYNC の効果を元に戻します。既に汚されているページ
                      についての効果は不定です。書き戻しするかもしれませんし、
                      しないかもしれません。書き戻しを確実に行なうには、
                      msync(2) または fsync(2) システムコールを使用します。

     MADV_NOCORE      領域は、コアファイルに含まれません。

     MADV_CORE        コアファイルの領域を含みます。


戻り値

     関数 madvise() は、処理が成功すると値 0 を返します。そうでない場合、値 -1
     が返され、グローバル変数 errno が設定されてエラーを示します。


エラー

     madvise() 関数は次の場合に失敗します。

     [EINVAL]           addr 引数と len 引数で指定された仮想アドレス範囲が有効
                        ではありません。


関連項目

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


歴史

     madvise() 関数は 4.4BSD ではじめて登場しました。

FreeBSD 4.4                      July 19, 1996                     FreeBSD 4.4

ABELNET VPSサービス