MINCORE

Section: Linux Programmer's Manual (2)
Updated: 2007-07-26
Index JM Home Page roff page
 

名前

mincore - ページがメモリ内にあるかどうかを判定する  

書式

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

int mincore(void *start, size_t length, unsigned char *vec);

glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):

mincore(): _BSD_SOURCE || _SVID_SOURCE  

説明

mincore() は、呼び出し元プロセスの仮想メモリのページがコア (RAM) 内に存在し、 ページ参照時にディスクアクセス (ページ・フォールト) を起こさないか どうかを示すベクトルを返す。カーネルは、アドレス start から始まる length バイトの範囲のページに関する存在情報を返す。

start 引き数はシステムのページサイズの倍数でなければならない。 length 引き数はページサイズの倍数である必要はないが、 ページ全体に関する存在情報が返されるので、事実上 length はページサイズの倍数に切り上げられることになる。 ページサイズ (PAGE_SIZE) は sysconf(_SC_PAGESIZE) を使って入手できる。

vec 引き数は、少なくとも (length+PAGE_SIZE-1) / PAGE_SIZE バイトが 格納できる配列を指していなければならない。 この呼び出しが返るとき、 各バイトの最下位ビットは、対応するページがメモリ内にそのとき存在すれば セットされ、そうでない場合はクリアされる (各バイトのその他のビットは未定義であり、これらのビットは将来の使用に そなえて予約されている)。 もちろん、 vec で返された情報はスナップショットでしかない。 メモリ内にロックされていないページは、任意の時点でメモリ内に 入ったり出たりでき、この呼び出しが返るときには vec の内容はすでに古くなっているかもしれない。  

返り値

成功した場合、 mincore() は 0 を返す。 エラーの場合は -1 を返して、 errno を適切な値に設定する。  

エラー

EAGAIN カーネルが一時的にリソースを使い果たしている。
EFAULT
vec が無効なアドレスを指している。
EINVAL
start がページサイズの倍数でない。
ENOMEM
length が (TASK_SIZE - start) より大きい。 (length に負の値が指定された場合、 その値が大きな符号なし整数として解釈されるために起こることがある。) Linux 2.6.11 以前では、この条件の場合はエラー EINVAL が返されていた。
ENOMEM
start から start + length の間にマップされていないメモリがあった。
 

バージョン

Linux 2.3.99pre1 と glibc 2.2 から利用可能である。  

準拠

mincore() は POSIX.1-2001 に記述されておらず、 全ての Unix 実装で利用可能であるわけではない。  

バグ

カーネル 2.6.21 より前は、 mincore() は、 MAP_PRIVATE マッピングや非線形マッピング (remap_file_pages(2) を使って作成される) について正しい情報を返さなかった。  

関連項目

mlock(2), mmap(2)


 

Index

名前
書式
説明
返り値
エラー
バージョン
準拠
バグ
関連項目

This document was created by man2html, using the manual pages.
Time: 04:31:52 GMT, November 19, 2007