The OpenNET Project / Index page

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

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

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

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

    НАЗВАНИЕ

    mlock - запрещает страничный обмен в некоторых областях памяти  

    СИНТАКСИС

    #include <sys/mman.h>
    
    int mlock(const void *addr, size_t len);
    
     

    ОПИСАНИЕ

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

    Блокировка памяти не попадает в стек, т.е., страницы, блокированные несколько раз при помощи функций mlock или mlockall , будут разблокированы одним вызовом munlock (с соответствующими параметрами) или munlockall. Страницы, помещенные в несколько областей памяти или принадлежащие нескольким процессам, будут заблокированы в памяти до тех пор, пока они заблокированы хотя бы в одной из областей памяти или хотя бы одним процессом. В POSIX-системах, в которых доступны mlock и munlock , в <unistd.h> задана константа _POSIX_MEMLOCK_RANGE , а значение PAGESIZE в <limits.h> задает количество байтов на странице.  

    ЗАМЕЧАНИЯ

    В Linux addr автоматически округляется вниз до ближайшей границы страницы. Однако, согласно POSIX 1003.1-2001, возможны реализации этой функции, требующие, чтобы addr был выравнен по границе страниц, поэтому переносимые приложения должны гарантировать выравнивание.  

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

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

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

    ENOMEM
    Часть заданной области памяти не соответствует страницам в области памяти процесса, или процесс попытался превысить максимально заданное ему количество блокированных страниц. Не-суперпользовательским процессам разрешено блокировать до их текущего RLIMIT_MEMLOCK ограничения ресурсов.
    EPERM
    У процесса, вызвавшего эту функцию, нет соответствующих прав. Блокировка страниц разрешена только процессам, имеющим привилегии root.

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

    EINVAL
    len - не является положительным числом.
     

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

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

    СМ. ТАКЖЕ

    mlockall(2), munlock(2), munlockall(2), munmap(2), setrlimit(2)


     

    Index

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


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




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

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