table of contents
other languages
other sections
MLOCK(2) | Manuel du programmeur Linux | MLOCK(2) |
NOM¶
mlock, munlock, mlockall, munlockall - Verrouiller et déverrouiller la mémoireSYNOPSIS¶
#include <sys/mman.h>int mlock(const void *addr, size_t len); int munlock(const void *addr, size_t len);int mlockall(int flags); int munlockall(void);
DESCRIPTION¶
mlock() et mlockall() verrouillent respectivement une partie et l'ensemble de l'espace d'adressage du processus appelant dans la mémoire physique, pour empêcher cette mémoire d'être évincée dans l'espace d'échange (swap). munlock() et munlockall() ont l'effet inverse, respectivement déverrouillant une partie ou l'ensemble de l'espace d'adressage du processus appelant, afin que les pages dans la zone indiquée puissent à nouveau être évincées dans le swap si le gestionnaire de mémoire du noyau l'exige. Le verrouillage et le déverrouillage de mémoire se font par multiples d'une page.mlock() et munlock()¶
mlock() verrouille les pages sur len octets à partir de l'adresse addr. Toutes les pages qui contiennent une partie de la zone mémoire indiquée seront résidentes en mémoire principale quand l'appel réussit ; elles resteront en mémoire principale jusqu'à leur déverrouillage.mlockall() et munlockall()¶
mlockall() verrouille toutes les pages projetées dans l'espace d'adressage du processus appelant. Cela inclut les pages de code, de données et de pile, ainsi que les bibliothèques partagées, les données utilisateur dans le noyau, la mémoire partagée, et les fichiers projetés en mémoire. Toutes les pages projetées seront résidentes en mémoire principale quand l'appel réussit ; elles resteront en mémoire principale jusqu'à leur déverrouillage.- MCL_CURRENT
- Verrouiller toutes les pages actuellement projetées dans l'espace d'adressage du processus.
- MCL_FUTURE
- Verrouiller toutes les pages qui seront projetées dans l'espace d'adressage du processus dans le futur. Par exemple, de nouvelles pages nécessitées par la croissance du tas et de la pile, ou de nouveaux fichiers projetés en mémoire, ou des zones de mémoire partagée.
VALEUR RENVOYÉE¶
S'ils réussissent, ces appels système renvoient 0. En cas d'erreur, ils renvoient -1, errno contient le code d'erreur, et les verrouillages de mémoire du processus ne sont pas modifiés.ERREURS¶
- ENOMEM
- (Linux 2.6.9 et plus récents) L'appelant avait une limite souple RLIMIT_MEMLOCK non nulle, mais a tenté de verrouiller plus de mémoire que la quantité autorisée. Cette limite n'est pas imposée si le processus est privilégié ( CAP_IPC_LOCK).
- ENOMEM
- (Linux 2.4 et précédents) Le processus appelant a essayé de verrouiller plus de la moitié de la mémoire vive.
- EPERM
- L'appelant n'est pas privilégié mais a besoin de droits ( CAP_IPC_LOCK) pour réaliser les opérations demandées.
- EAGAIN
- Une partie (ou l'ensemble) de l'espace d'adressage indiqué n'a pas pu être verrouillée.
- EINVAL
- La somme de start et len était inférieure à start (l'addition aurait pu conduire à un dépassement par exemple).
- EINVAL
- (Pas sous Linux) addr n'est pas un multiple de la taille de page.
- ENOMEM
- Une partie de la zone indiquée ne correspond pas à des pages projetées dans l'espace d'adressage du processus.
- EINVAL
- Des flags inconnus étaient demandés.
- EPERM
- (Linux 2.6.8 et précédents) L'appelant n'est pas privilégié ( CAP_IPC_LOCK).
CONFORMITɶ
POSIX.1-2001, SVr4.DISPONIBILITɶ
Sur les systèmes POSIX où mlock() et munlock() sont disponibles, la constante symbolique _POSIX_MEMLOCK_RANGE est définie dans <unistd.h> et le nombre d'octets par page peut être déterminé grâce à la constante PAGESIZE si définie dans <limits.h> ou en appelant sysconf(_SC_PAGESIZE).NOTES¶
Il y a deux domaines principaux d'applications au verrouillage de pages : les algorithmes en temps réel, et le traitement de données confidentielles. Les applications temps réel réclament un comportement temporel déterministe, et la pagination est, avec l'ordonnancement, une cause majeure de délais imprévus. Ces algorithmes basculent habituellement sur un ordonnancement temps‐réel avec sched_setscheduler(2). Les logiciels de cryptographie manipulent souvent quelques octets hautement confidentiels, comme des mots de passe ou des clés privées. À cause de la pagination, ces données secrètes risquent d'être transférées sur un support physique où elles pourraient être lues par un ennemi longtemps après que le logiciel s'est terminé. Soyez toutefois conscient que le mode suspendu sur les portables et certains ordinateurs de bureau sauvegardent une copie de la mémoire sur le disque, quels que soient les verrouillages.Notes sur Linux¶
Sous Linux, mlock() et munlock() arrondissent automatiquement addr à la frontière de page la plus proche. Toutefois, POSIX.1-2001 permet à l'implémentation d'imposer que addr soit alignée sur une frontière de page. Les programmes portables en prendront donc soin.Limites et permissions¶
Sous Linux 2.6.8 et précédents, un processus doit être privilégié ( CAP_IPC_LOCK) pour verrouiller de la mémoire, et la limite souple RLIMIT_MEMLOCK définit le nombre maximal d'octets que le processus peut verrouiller en mémoire.BOGUES¶
Dans les noyaux Linux de la branche 2.4 jusqu'à 2.4.17 inclus, le paramètre MCL_FUTURE de mlockall() était hérité par le fils après un fork(2) en raison d'un bogue. Cela a été corrigé dans le noyau 2.4.18.VOIR AUSSI¶
mmap(2), setrlimit(2), shmctl(2), sysconf(3), proc(5), capabilities(7)COLOPHON¶
Cette page fait partie de la publication 3.44 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse <http://www.kernel.org/doc/man-pages/>.TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>. Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <http://manpagesfr.free.fr/> (2003-2006). Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009). Veuillez signaler toute erreur de traduction en écrivant à <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le paquet manpages-fr. Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C <section> <page_de_man> ».14 septembre 2011 | Linux |