Unix-system-calls-madvise

提供:Dev Guides
移動先:案内検索

[top]#

[[File:]]

[[File:]]

|Web |This Site

  • 初心者向けのUnix *
  • 高度なUnix *

選択した読書

Copyright©2014 by finddevguides

  Home     References     Discussion Forums     About TP  

madvise()-Unix、Linuxシステムコール

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] image:http://www.finddevguides.com/add- this.gif [AddThisソーシャルブックマークボタン]

広告

NAME

madvise-メモリの使用に関するアドバイスを与える

概要

  • #include <sys/mman.h> *
  • int madvise(void * start 、size_t length 、int * *advice ); *

説明

*madvise* ()システムコールは、アドレス_start_で始まり、サイズ_length_バイトのアドレス範囲でページング入出力を処理する方法についてカーネルにアドバイスします。 これにより、アプリケーションは、マップされたメモリ領域または共有メモリ領域を使用する方法をカーネルに伝えることができるため、カーネルは適切な先読みおよびキャッシュ技術を選択できます。 この呼び出しは、アプリケーションのセマンティクスに影響を与えません( *MADV_DONTNEED* の場合を除く)が、そのパフォーマンスに影響を与える可能性があります。 カーネルはこのアドバイスを自由に無視できます。

アドバイスは_advice_パラメーターで示されます。

Tag

説明

*MADV_NORMAL*

特別な扱いはありません。 これがデフォルトです。

*MADV_RANDOM*

ランダムな順序でページ参照を期待します。 (したがって、先読みは通常よりも有用でない場合があります。)

*MADV_SEQUENTIAL*

順番にページ参照を期待してください。 (したがって、指定された範囲のページは積極的に先読みされ、アクセスされた直後に解放される可能性があります。)

*MADV_WILLNEED*

近い将来アクセスを期待してください。 (したがって、先にいくつかのページを読むことをお勧めします。)

*MADV_DONTNEED*

近い将来アクセスを期待しないでください。 (当面は、アプリケーションは指定された範囲で終了するため、カーネルはそれに関連付けられたリソースを解放できます。)この範囲内のページへの後続のアクセスは成功しますが、メモリコンテンツの再読み込みが発生します基礎となるマップされたファイル( mmap ()を参照)または基礎となるファイルなしのマッピング用のゼロフィルオンデマンドページ。

返り値

成功すると madvise ()はゼロを返します。 エラーの場合、-1を返し、_errno_が適切に設定されます。

エラー

Tag Description
EAGAIN A kernel resource was temporarily unavailable.
EBADF The map exists, but the area maps something that isn’t a file.
EINVAL The value len is negative, start is not page-aligned, advice is not a valid value, or the application is attempting to release locked or shared pages (with MADV_DONTNEED).
EIO (for MADV_WILLNEED) Paging in this area would exceed the process’s maximum resident set size.
ENOMEM (for MADV_WILLNEED) Not enough memory: paging in failed.
ENOMEM Addresses in the specified range are not currently mapped, or are outside the address space of the process.

Linuxノート

現在のLinux実装(2.4.0)は、このシステムコールをアドバイスとしてではなくコマンドとして認識しているため、このアドバイスに応じて通常行うことを実行できない場合にエラーを返す可能性があります。 (上記のエラーの説明を参照してください。)これは非標準の動作です。

Linuxの実装では、アドレス_start_をページに揃える必要があり、_length_をゼロにすることができます。 指定されたアドレス範囲の一部がマッピングされていない場合、Linuxバージョンの madvise ()はそれらを無視し、残りに呼び出しを適用します(ただし、システムコールから ENOMEM を返す必要があります)。

歴史

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

準拠

POSIX.1b。 POSIX.1-2001は、POSIX_MADV_NORMALなどの定数を使用して posix_madvise ()を記述し、ここで説明した動作に近い動作をします。 ファイルアクセス用の同様の posix_fadvise ()があります。

関連項目

[[File:]] image :http://www.finddevguides.com/images/next.gif [next] [[File:]]

広告

  
Advertisements