REMAP_FILE_PAGES
Section: Linux Programmer's Manual (2)
Updated: 2017-09-15
Index
JM Home Page
roff page
名前
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/ に書かれている。
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- バージョン
-
- 準拠
-
- 注意
-
- 関連項目
-
- この文書について
-
This document was created by
man2html,
using the manual pages.
Time: 03:33:33 GMT, December 05, 2022