Linux |
CentOS 4.8 |
|
mlock(2) |
mlock − Désactiver la pagination pour certaines parties de la mémoire. |
#include <sys/mman.h> int mlock(const void *addr, size_t len); |
mlock désactive la pagination (paging) pour la portion de mémoire débutant à l’adresse addr avec une longueur de len octets. Quand l’appel système mlock réussit, on a l’assurance que toutes les pages contenant une partie de la zone mémoire spécifiée résident en mémoire vive (RAM) et y resteront jusqu’à un déverrouillage par la fonction munlock ou munlockall, ou encore jusqu’à ce que le processus se termine ou démarre un programme avec exec. Les processus fils n’héritent pas du verrouillage des pages à travers un fork. 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 comportement d’ordonnancement temps réel avec sched_setscheduler. Les logiciels de cryptographie manipulent souvent quelques octets hautement confidentiels, comme des mots de passe ou des clés privées. A 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 se soit terminé. Il n’y a pas d’empilement des verrouillages mémoire, ce qui signifie qu’une page verrouillée plusieurs fois par mlock ou mlockall sera libérée en un seul appel à munlock pour la zone mémoire correspondante ou par un appel à munlockall. Les pages qui sont verrouillées par plusieurs zones, ou par plusieurs processus restent verrouillées en mémoire vive tant qu’il y a au moins un processus ou une zone qui les verrouille. Sur les systèmes POSIX où mlock et munlock sont disponibles, la constante symbolique _POSIX_MEMLOCK_RANGE est définie dans <unistd.h> et la valeur symbolique PAGESIZE de <limits.h> indique le nombre d’octets par page. |
mlock renvoie 0 si il réussit, ou −1 s’il échoue, auquel cas errno contient le code d’erreur. |
ENOMEM |
Une partie des adresses incluses dans la zone désirée ne correspond pas à une page de l’espace d’adressage accessible, ou le processus a essayé de dépasser le nombre maximal de pages verrouillées. |
||
EPERM |
L’appelant n’a pas les privilèges appropriés, seul le Super−User peut verrouiller des pages. |
||
EINVAL |
len n’est pas un nombre positif. |
POSIX.1b, SVr4. SVr4 documente un code d’erreur EAGAIN supplémentaire. |
munlock(2), mlockall(2), munlockall(2). |
Christophe Blaess, 1997. |
mlock(2) |