Manpages

名 前

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);

説 明

注 意 : こ の シ ス テ ム コ ー ル は (Linux 3.16 以 降 で ) 非 推 奨 と な っ て お り 、 や が て よ り 低 速 な カ ー ネ ル 内 で の エ ミ ュ レ ー シ ョ ン に 置 き 換 え ら れ る 予 定 で あ る 。 こ の シ ス テ ム コ ー ル を 使 用 し て い る ア プ リ ケ ー シ ョ ン は 少 な い が 、 こ う し た ア プ リ ケ ー シ ョ ン は 代 替 手 段 へ の 移 行 を 検 討 す べ き で あ る 。

remap_file_pages() シ ス テ ム コ ー ル は 非 線 形 な マ ッ ピ ン グ 、 つ ま り フ ァ イ ル の ペ ー ジ が メ モ リ ー 上 で 連 続 し な い 順 番 で マ ッ プ さ れ る マ ッ ピ ン グ を 作 成 す る た め に 使 わ れ る 。 remap_file_pages() を 使 う 方 が mmap(2) を 繰 り 返 し て 使 う よ り 優 れ て い る 点 は 、 前 者 の 方 法 で は カ ー ネ ル が VMA (Virtual Memory Area, 仮 想 メ モ リ ー 領 域 ) デ ー タ 構 造 体 を 追 加 で 作 成 す る 必 要 が な い こ と で あ る 。 非 線 形 マ ッ ピ ン グ を 作 成 す る た め に は 、 以 下 の よ う な ス テ ッ プ を 実 行 す る :

1.

mmap(2) を 使 い 、 マ ッ ピ ン グ を 作 成 す る (こ の マ ッ ピ ン グ は 最 初 は 線 形 で あ る )。 こ の マ ッ ピ ン グ は MAP_SHARED フ ラ グ を 指 定 し て 作 成 さ れ な け れ ば な ら な い 。

2.

remap_file_pages() を 1 回 以 上 呼 び 出 し て 、 マ ッ ピ ン グ の ペ ー ジ と フ ァ イ ル の ペ ー ジ の 対 応 関 係 を 再 構 成 す る 。 フ ァ イ ル の 同 じ ペ ー ジ を マ ッ ピ ン グ 領 域 の 複 数 の 場 所 に マ ッ プ す る こ と が 可 能 で あ る 。

pgoffsize 引 き 数 は 、 マ ッ ピ ン グ 内 で 再 配 置 さ れ る フ ァ イ ル の 領 域 を 指 定 す る 。 pgoff は フ ァ イ ル オ フ セ ッ ト で あ り 、 単 位 は シ ス テ ム の ペ ー ジ サ イ ズ で あ る 。 size は 領 域 の 長 さ で あ り 、 単 位 は バ イ ト で あ る 。

addr 引 き 数 は 2 つ の 目 的 で 使 わ れ る 。 第 1 の 目 的 は 、 こ の 引 き 数 に よ っ て 再 編 成 し た い ペ ー ジ の マ ッ ピ ン グ を 識 別 す る こ と で あ る 。 よ っ て addrmmap(2) の 呼 び 出 し で 過 去 に マ ッ プ さ れ た 領 域 内 の ア ド レ ス で な け れ ば な ら な い 。 第 2 の 目 的 は 、 pgoffsize で 識 別 さ れ る フ ァ イ ル ペ ー ジ が 置 か れ る 予 定 の ア ド レ ス を 、 addr に よ っ て 指 定 す る こ と で あ る 。

addrsize に 指 定 す る 値 は 、 シ ス テ ム の ペ ー ジ サ イ ズ の 倍 数 と す べ き で あ る 。 そ れ 以 外 の 場 合 、 カ ー ネ ル は 「 両 方 」 の 値 を 最 も 近 い ペ ー ジ サ イ ズ の 倍 数 へ 「 切 り 下 げ る 」 。

prot 引 き 数 は 0 に 指 定 さ れ な け れ ば な ら な い 。

flags 引 き 数 は mmap(2) の も の と 同 じ 意 味 で あ る が 、 MAP_NONBLOCK 以 外 の 全 て の フ ラ グ は 無 視 さ れ る 。

返 り 値

成 功 し た 場 合 、 remap_file_pages() は 0 を 返 す 。 エ ラ ー の 場 合 、 −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。

エ ラ ー

EINVAL

addrMAP_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, hugetlbfs, ramfs な ど の イ ン メ モ リ ー フ ァ イ ル シ ス テ ム 上 に の み 非 線 形 マ ッ ピ ン グ を 作 成 す る 。 裏 に デ ー タ ス ト ア を 持 つ フ ァ イ ル シ ス テ ム 上 で は 、 remap_file_pages() は 、 フ ァ イ ル の ど の 部 分 が ど の ア ド レ ス に マ ッ ピ ン グ さ れ て い る か の 調 整 が 、 mmap(2) を 使 っ た 場 合 ほ ど 効 率 的 で は な い 。

関 連 項 目

getpagesize(2), mmap(2), mmap2(2), mprotect(2), mremap(2), msync(2)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。