Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
remap_file_pages - 非線形ファイルマッピングを作成する。
書式
#define _GNU_SOURCE /* feature_test_macros(7) 参照 */ #include <sys/mman.h> int remap_file_pages(void *addr, size_t size, int prot, size_t pgoff, int flags);
説明
Note: this system call was marked as deprecated starting with Linux 3.16. In Linux 4.0, the implementation was replaced by a slower in-kernel emulation. Those few applications that use this system call should consider migrating to alternatives. This change was made because the kernel code for this system call was complex, and it is believed to be little used or perhaps even completely unused. While it had some use cases in database applications on 32-bit systems, those use cases don't exist on 64-bit systems. 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 は領域の長さであり、単位はバ イトである。 addr 引数は 2 つの目的で使われる。 第 1 の目的は、この引数によって再編成したいページの マッピングを識別することである。 よって addr は mmap(2) の呼び出しで過去にマップされた領 域内のアドレスでなければならない。 第 2 の目的は、 pgoff と size で識別されるファイルペー ジが置かれる予定のアドレスを、 addr によって指定することである。 addr と size に指定する値は、システムのページサイズの倍数とすべきである。 それ以外の場 合、カーネルは「両方」の値を 最も近いページサイズの倍数へ「切り下げる」。 prot 引数は 0 に指定されなければならない。 flags 引数は mmap(2) のものと同じ意味であるが、 MAP_NONBLOCK 以外の全てのフラグは無視され る。
返り値
成功した場合、 remap_file_pages() は 0 を返す。 エラーの場合、-1 が返され、 errno が適切 に設定される。
エラー
EINVAL addr が MAP_SHARED フラグを指定して作成された有効なマッピングを参照していない。 EINVAL addr, size, prot, pgoff のいずれかが不正である。
バージョン
remap_file_pages() システムコールは Linux 2.5.46 で登場した。 glibc でのサポートは glibc バージョン 2.3.3 で追加された。
準拠
remap_file_pages() システムコールは Linux 固有のものである。
注意
Linux 2.6.23 以降、 remap_file_pages() は tmpfs(5), hugetlbfs, ramfs などのインメモリー ファイルシステム上にのみ非線形マッピングを作成する。 裏にデータストアを持つファイルシステ ム上では、 remap_file_pages() は、 ファイルのどの部分がどのアドレスにマッピングされている かの調整が、 mmap(2) を使った場合ほど効率的ではない。
関連項目
getpagesize(2), mmap(2), mmap2(2), mprotect(2), mremap(2), msync(2)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。