ИМЯ

remap_file_pages - создаёт нелинейное файловое отображение

LIBRARY

Standard C library ( libc, -lc)

СИНТАКСИС

#define _GNU_SOURCE         /* Смотрите feature_test_macros(7) */
#include <sys/mman.h>
[[deprecated]] int remap_file_pages(void addr[.size], size_t size,
                                    int prot, size_t pgoff, int flags);

ОПИСАНИЕ

Замечание: данный системный вызов, начиная с Linux 3.16, устарел. В Linux 4.0 реализация была заменена на более медленную эмуляцию ядром. В приложениях, где он используется, нужно применять альтернативные вызовы. Данное изменение было сделано из-за сложности кода ядра этого системного вызова, и считается, что им почти никто или вообще никто не пользуется. Какое-то время он использовался в приложениях баз данных на 32-разрядных системах, но этих вариантов использования на 64-разрядных системах замечено не было.
Системный вызов remap_file_pages() используется для создания нелинейного отображения, то есть отображения, в котором страницы файла отображаются в память непоследовательно. Преимущество использования remap_file_pages() по сравнению с повторением вызовов mmap(2) в том, что первый не требует от ядра создания дополнительных структур данных VMA (областей виртуальной памяти).
Для создания нелинейного отображения выполните следующее:
1.
Создайте отображение (пока линейное) с помощью mmap(2). Данное отображение должно создаваться с флагом MAP_SHARED.
2.
Выполните переупорядочивание соответствия между страницами отображения и страницами файла с помощью одного или нескольких вызовов remap_file_pages(). Возможно отображать одну страницу файла в несколько мест отображаемой области.
В аргументах pgoff и size указывается область файла, которая будет перенесёна в отображение: в pgoff задаётся смещение в файле, измеряемое в размерах системных страниц; в size задаётся длина области в байтах.
Аргумент addr предназначен для двух целей. Во-первых, им определяется отображение, чьи страницы мы хотим перенести. То есть в addr должен быть указан адрес в области, которая была ранее отображена с помощью вызова mmap(2). Во-вторых, в addr указывается адрес, по которому должны быть помещены файловые страницы, заданные pgoff и size.
Значения, указанные в addr и size, должны быть кратны размеру системной страницы. Если это не так, то ядро округляет оба значения в меньшую сторону до ближайшего числа, кратного размеру страницы.
Значение аргумента prot должно быть 0.
Аргумент flags предназначен для того же, что и в mmap(2), но все флаги, кроме MAP_NONBLOCK, игнорируются.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

On success, remap_file_pages() returns 0. On error, -1 is returned, and errno is set to indicate the error.

ОШИБКИ

EINVAL
Значение addr не ссылается на допустимое отображение, созданное с флагом MAP_SHARED.
EINVAL
Некорректное значение в addr, size, prot или pgoff.

ВЕРСИИ

The remap_file_pages() system call appeared in Linux 2.5.46; glibc support was added in 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)

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан aereiae <[email protected]>, Azamat Hackimov <[email protected]>, Dmitriy S. Seregin <[email protected]>, Katrin Kutepova <[email protected]>, Lockal <[email protected]>, Yuri Kozlov <[email protected]>, Баринов Владимир и Иван Павлов <[email protected]>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на [email protected]

Recommended readings

Pages related to remap_file_pages you should read also:

Questions & Answers

Helpful answers and articles about remap_file_pages you may found on these sites:
Stack Overflow Server Fault Super User Unix & Linux Ask Ubuntu Network Engineering DevOps Raspberry Pi Webmasters Google Search