The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

mlockall (2)
  • mlockall (2) ( FreeBSD man: Системные вызовы )
  • >> mlockall (2) ( Русские man: Системные вызовы )
  • mlockall (2) ( Linux man: Системные вызовы )
  • mlockall (3) ( Solaris man: Библиотечные вызовы )
  • mlockall (3) ( POSIX man: Библиотечные вызовы )
  •  

    НАЗВАНИЕ

    mlockall - запрещает страничный обмен всему процессу  

    СИНТАКСИС

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

    ОПИСАНИЕ

    mlockall запрещает страничный обмен для всех страниц в области памяти вызывающего процесса. Это касается всех страниц сегментов кода, данных и стека, разделяемых библиотек, пользовательских данных ядра, разделяемой памяти и отраженных в память файлов. Все эти страницы будут помещены в ОЗУ, если вызов mlockall был выполнен успешно, и останутся там до тех пор, пока не будут освобождены вызовами munlock или munlockall, или если процесс завершит работу или запустит другую программу при помощи exec. Блокировка страниц не наследуется дочерними процессами, созданными при помощи fork. Блокировка памяти используется, в основном, в двух случаях: в алгоритмах реального времени и в работе с защищенными данными. Программам реального времени необходимы предсказуемые задержки в работе, и страничный обмен наряду с системой переключения процессов может привести к неожиданным задержкам в работе. Такие приложения часто переключаются в режим реального времени при помощи функции sched_setscheduler. Криптографические системы защиты данных очень часто содержать критичные данные, например, пароли или секретные ключи в структурах данных. В результате страничного обмена эти данные могут попасть в область подкачки, находящуюся на устройстве длительного хранения (таком, как жесткий диск), где к этим данным после того, как они пропадут из памяти, может получить доступ практически кто угодно. Такие программы обычно используют функцию mlock для блокировки небольших областей памяти, в которых находятся защищаемые данные. Параметр flags формируется побитовым сложением следующих констант:
    MCL_CURRENT
    Заблокировать все страницы, находящиеся в адресном пространстве процесса на текущий момент.
    MCL_FUTURE
    Заблокировать все страницы, которые будут переданы процессу в будущем. Это могут быть страницы растущей кучи или стека, а также отраженные в память файлы и разделяемые области памяти.

    Если была задана константа MCL_FUTURE, и после этого количество заблокированных процессом страниц превысит лимит, то системный вызов, потребовавший новые страницы, их не получит и пошлет сообщение об ошибке ENOMEM. Если новые страницы будут затребованы растущим стеком, то ядро не разрешит увеличение стека и пошлет процессу сигнал SIGSEGV. Процессы, выполняющиеся в реальном времени, должны резервировать для себя достатчное количество страниц в стеке до входа в процедуры, критические по времени, чтобы системные вызовы не привели к сбою работы процесса. Этого можно достичь путем вызова функции, которая содержит достаточно большой массив; в этот массив функция записывает данные для того, чтобы задействовать страницы памяти. Таким образом, стеку будет выделено достаточное количество страниц, и они будут заблокированы в ОЗУ. Запись в эти страницы предотвращает возможные ошибки типа copy-on-write, которые могут возникнуть в критичной по времени выполнения части программы. Блокированные отрезки памяти не попадают в стек, т.е. страницы, блокированные несколько раз при помощи функций mlockall или mlock, будут разблокированы одним вызовом munlockall. Страницы, помещенные в несколько областей памяти или принадлежащие нескольким процессам, будут заблокированы в памяти до тех пор, пока они заблокированы хотя бы в одной из областей памяти или, по меньшей мере, одним процессом. В POSIX-системах, в которых доступны mlock и munlock, в <unistd.h> задана константа _POSIX_MEMLOCK_RANGE , а значение PAGESIZE в <limits.h> задает количество байтов в странице.  

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

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

    НАЙДЕННЫЕ ОШИБКИ

    ENOMEM
    Процесс попытался превысить максимальное заданное для него количество блокированных страниц. Обычным процессам (не-root) разрешено блокировать до их текушего RLIMIT_MEMLOCK ограничения ресурсов.
    EPERM
    Вызывающий процесс не имеет соответствующих прав и привилегий. Процессам разрешено блокировать страницы, если они обладают возможностью CAP_IPC_LOCK (обычно она действительна только для root) или если их текущее ограничение ресурсов RLIMIT_MEMLOCK не равно нулю.
    EINVAL
    Было задано неверное значение поля flags.
     

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

    POSIX.1b, SVr4. SVr4 описывает дополнительный код ошибки EAGAIN.  

    СМ. ТАКЖЕ

    munlockall(2), mlock(2), munlock(2)


     

    Index

    НАЗВАНИЕ
    СИНТАКСИС
    ОПИСАНИЕ
    ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
    НАЙДЕННЫЕ ОШИБКИ
    СООТВЕТСТВИЕ СТАНДАРТАМ
    СМ. ТАКЖЕ


    Поиск по тексту MAN-ов: 




    Спонсоры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2022 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру