mlockall()

Заблокировать весь диапазон адресного пространства процесса

Прототип:

#include <sys/mman.h>
int mlockall( int flags );

Аргументы:

flags
Флаги, указывающие, какие страницы блокировать. Один или несколько из следующих битов:
MCL_CURRENT
Блокировать страницы, в настоящее время смапированные в адресное пространство процесса.
MCL_FUTURE
Блокировать страницы, которые будут смапированы в адресное пространство процесса в будущем, когда будет выполняться мапирование.

Библиотека:

libc

Описание:

Функция mlockall() блокирует все страницы, мапированные адресным пространством процесса, и делает их резидентными до тех пор, пока они не будут разблокированы, или пока процесс не завершится или не запустит другой процесс. То, какие страницы будут заблокированы, зависит от параметра flags.

Резидентная память — это термин, используемый для обозначения того, что адреса всегда находятся в физической памяти.

Необходимо иметь права суперпользователя, чтобы заблокировать страницы. При попытке заблокировать страницы используйте любой из следующих подходов:

Тщательно контролируемый подход
Блокировать страницы одну за другой, вызывая mmap(), а затем mlock().
Глобальный подход
Блокировать все страницы одновременно, выполнив одно из следующих действий:

Возвращаемое значение:

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EAGAIN
Часть или вся память, заданная операцией, не может быть заблокирована при выполнении вызова.
EINVAL
Параметр flags равен нулю.
ENOMEM
Блокировка страниц, мапированных в указанном диапазоне, превысит установленный реализацией предел объёма памяти, которую может заблокировать процесс. Это ограничение определяется реализацией и зависит от значения RLIMIT_MEMLOCK структуры rlimit.
EPERM
Вызывающий процесс не имеет соответствующих прав для выполнения запрошенной операции.

Классификация:

POSIX 1003.1 Process Memory Locking

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

mlock(), mmap(), munlock(), munlockall()




Предыдущий раздел: Описание API системной библиотеки