Главная » 2017 » Ноябрь » 21 » man 2 remap_file_pages
01:32
man 2 remap_file_pages

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


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, устарел. В 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, игнорируются.



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


При удачном выполнении remap_file_pages() возвращается 0. При ошибке возвращается
-1, а значение errno устанавливается соответствующим образом.




СООТВЕТСТВИЕ СТАНДАРТАМ


Системный вызов 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)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 384 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar