oracular (2) remap_file_pages.2.gz

Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

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

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