remap_file_pages - システムコールの説明 - Linux コマンド集 一覧表
名前
remap_file_pages - 非線形ファイルマッピングを作成する。
書式
#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 ()を使い、マッピングを作成する (このマッピングは最初は線形である)。 このマッピングは MAP_SHARED フラグを指定して作成されなければならない。
- 2.
-
remap_file_pages
()を 1 回以上呼び出して、
マッピングのページとファイルのページの対応関係を再構成する。
ファイルの同じページをマッピング領域の複数の場所に
マップすることが可能である。
pgoff と size 引き数は、マッピング内で再配置されるファイルの領域を指定する。 pgoff はファイルオフセットであり、単位はシステムのページサイズである。 size は領域の長さであり、単位はバイトである。
start 引き数は 2 つの目的で使われる。 第 1 の目的は、この引き数によって再編成したいページの マッピングを識別することである。 よって start は mmap ()の呼び出しで過去にマップされた領域内のアドレスでなければならない。 第 2 の目的は、 pgoff と size で識別されるファイルページが置かれる予定のアドレスを、 start によって指定することである。
start と size に指定する値は、システムのページサイズの倍数とすべきである。 それ以外の場合、カーネルは「両方」の値を 最も近いページサイズの倍数へ「切り下げる」。
prot 引き数は 0 に指定されなければならない。
flags 引き数は mmap ()のものと同じ意味であるが、 MAP_NONBLOCK 以外の全てのフラグは無視される。
返り値
成功した場合、 remap_file_pages ()は 0 を返す。 エラーの場合、-1 が返され、 errno が適切に設定される。
注意
remap_file_pages ()システムコールは Linux 2.5.46 で登場した。
エラー
- EINVAL
- start が MAP_SHARED フラグを指定して作成された有効なマッピングを参照していない。
- EINVAL
- start , size , prot , pgoff のいずれかが不正である。
準拠
remap_file_pages ()システムコールは Linux 固有のものである。