REMAP_FILE_PAGES
Section: Linux Programmer's Manual (2)
Updated: 2004-10-28
Index
JM Home Page
roff page
名前
remap_file_pages - 非線形ファイルマッピングを作成する。
書式
#define _GNU_SOURCE
#include <sys/mman.h>
int remap_file_pages(void *start, size_t size, int prot,
ssize_t pgoff, int flags);
説明
remap_file_pages()
システムコールは非線形なマッピング、
つまりファイルのページがメモリ上で連続しない順番でマップされる
マッピングを作成するために使われる。
remap_file_pages()
を使う方が
mmap(2)
を繰り返して使うより優れている点は、
前者の方法ではカーネルが VMA (Virtual Memory Area, 仮想メモリ領域)
データ構造体を追加で作成する必要がないことである。
非線形マッピングを作成するためには、
以下のようなステップを実行する:
- 1.
-
mmap(2)
を使い、マッピングを作成する (このマッピングは最初は線形である)。
このマッピングは
MAP_SHARED
フラグを指定して作成されなければならない。
- 2.
-
remap_file_pages()
を 1 回以上呼び出して、
マッピングのページとファイルのページの対応関係を再構成する。
ファイルの同じページをマッピング領域の複数の場所に
マップすることが可能である。
pgoff
と
size
引き数は、マッピング内で再配置されるファイルの領域を指定する。
pgoff
はファイルオフセットであり、単位はシステムのページサイズである。
size
は領域の長さであり、単位はバイトである。
start
引き数は 2 つの目的で使われる。
第 1 の目的は、この引き数によって再編成したいページの
マッピングを識別することである。
よって
start
は
mmap(2)
の呼び出しで過去にマップされた領域内のアドレスでなければならない。
第 2 の目的は、
pgoff
と
size
で識別されるファイルページが置かれる予定のアドレスを、
start
によって指定することである。
start
と
size
に指定する値は、システムのページサイズの倍数とすべきである。
それ以外の場合、カーネルは「両方」の値を
最も近いページサイズの倍数へ「切り下げる」。
prot
引き数は 0 に指定されなければならない。
flags
引き数は
mmap(2)
のものと同じ意味であるが、
MAP_NONBLOCK
以外の全てのフラグは無視される。
返り値
成功した場合、
remap_file_pages()
は 0 を返す。
エラーの場合、-1 が返され、
errno
が適切に設定される。
エラー
- EINVAL
-
start
が
MAP_SHARED
フラグを指定して作成された有効なマッピングを参照していない。
- EINVAL
-
start,
size,
prot,
pgoff
のいずれかが不正である。
バージョン
remap_file_pages()
システムコールは Linux 2.5.46 で登場した。
glibc でのサポートは glibc バージョン 2.3.3 で追加された。
準拠
remap_file_pages()
システムコールは Linux 固有のものである。
関連項目
getpagesize(2),
mmap(2),
mmap2(2),
mprotect(2),
mremap(2),
msync(2),
feature_test_macros(7)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- バージョン
-
- 準拠
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:59 GMT, November 19, 2007