MINCORE(2) | Linux Programmer's Manual | MINCORE(2) |
名前¶
mincore - ページがメモリー内にあるかどうかを判定する
書式¶
#include <unistd.h>
#include <sys/mman.h>
int mincore(void *addr, size_t length, unsigned char *vec);
mincore():
glibc 2.19 以降:
_DEFAULT_SOURCE
Glibc 2.19 以前:
_BSD_SOURCE || _SVID_SOURCE
説明¶
mincore() は、呼び出し元プロセスの仮想メモリーのページがコア (RAM) 内に存在し、 ページ参照時にディスクアクセス (ページフォールト) を起こさないか どうかを示すベクトルを返す。カーネルは、アドレス addr から始まる length バイトの範囲のページに関する存在情報を返す。
addr 引数はシステムのページサイズの倍数でなければならない。 length 引数はページサイズの倍数である必要はないが、 ページ全体に関する存在情報が返されるので、事実上 length はページサイズの倍数に切り上げられることになる。 ページサイズ (PAGE_SIZE) は sysconf(_SC_PAGESIZE) を使って入手できる。
vec 引数は、少なくとも (length+PAGE_SIZE-1) / PAGE_SIZE バイトが格納できる配列を指していなければならない。 この呼び出しが返るとき、 各バイトの最下位ビットは、対応するページがメモリー内にそのとき存在すれば セットされ、そうでない場合はクリアされる (各バイトのその他のビットは未定義であり、これらのビットは将来の使用に そなえて予約されている)。 もちろん、 vec で返された情報はスナップショットでしかない。 メモリー内にロックされていないページは、任意の時点でメモリー内に 入ったり出たりでき、この呼び出しが返るときには vec の内容はすでに古くなっているかもしれない。
返り値¶
成功した場合、 mincore() は 0 を返す。 エラーの場合は -1 を返して、 errno を適切な値に設定する。
エラー¶
EAGAIN カーネルが一時的にリソースを使い果たしている。
バージョン¶
Linux 2.3.99pre1 と glibc 2.2 から利用可能である。
準拠¶
mincore() は POSIX.1 に記述されておらず、 全ての UNIX 実装で利用可能であるわけではない。
バグ¶
カーネル 2.6.21 より前は、 mincore() は、 MAP_PRIVATE マッピングや非線形マッピング (remap_file_pages(2) を使って作成される) について正しい情報を返さなかった。
関連項目¶
fincore(1), madvise(2), mlock(2), mmap(2), posix_fadvise(2), posix_madvise(3)
この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。
2017-09-15 | Linux |