Man page - remap_file_pages(2)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

REMAP_FILE_PAGES

名 前
書 式
説 明
返 り 値
エ ラ ー
バ ー ジ ョ ン
準 拠
注 意
関 連 項 目
こ の 文 書 に つ い て

名 前

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/ に 書 か れ て い る 。