MINCORE(2) | Руководство программиста Linux | MINCORE(2) |
mincore - определяет, хранятся ли страницы в памяти
#include <unistd.h> #include <sys/mman.h>
int mincore(void *addr, size_t length, unsigned char *vec);
Требования макроса тестирования свойств для glibc (смотрите feature_test_macros(7)):
mincore(): начиная с glibc 2.19: _DEFAULT_SOURCE в glibc 2.19 и старее: _BSD_SOURCE || _SVID_SOURCE
mincore() возвращает вектор, описывающий страницы виртуальной памяти вызывающего процесса, которые находятся в физической памяти (core, RAM) и поэтому доступ к ним не приводит к обращению к дискам. Ядро возвращает информацию о страницах, которые расположены начиная с адреса addr и занимают length байт.
Значение аргумента addr должно быть кратно размеру системной страницы. Значение аргумента length может быть не кратно размеру страницы, но так как возвращается информация по целым страницам, length округляется до следующего значения, кратного размеру страницы. Размер страницы (PAGE_SIZE) может быть получен с помощью sysconf(_SC_PAGESIZE).
Аргумент vec должен указывать на массив размером не менее (length+PAGE_SIZE-1) / PAGE_SIZE байт. При возврате самый младший значимый бит каждого байта будет установлен, если соответствующая страница находится в памяти, и будет сброшен, если это не так. (Значения других битов каждого байта не определено; эти биты зарезервированы для использования в будущем.) Естественно, информация, возвращаемая в vec, носит моментальный характер: страницы, которые не заблокированы в памяти, могут быть удалены из неё или добавлены в любой момент, и содержимое vec может стать неактуальным уже на момент возврата из вызова.
При нормальном завершении работы mincore() возвращает ноль. При ошибках возвращается -1, а переменной errno присваивается соответствующее значение.
EAGAIN ядру временно не хватает ресурсов.
Доступен начиная с Linux 2.3.99pre1 и glibc 2.2.
Системный вызов mincore() не определён в стандарте POSIX.1 и отсутствует во всех реализациях UNIX.
До ядра версии 2.6.21, mincore() не возвращал правильные данные для отображений MAP_PRIVATE или для нелинейных отображений (заданных с помощью remap_file_pages(2)).
fincore(1), madvise(2), mlock(2), mmap(2), posix_fadvise(2), posix_madvise(3)
2017-09-15 | Linux |