mlock - Désactiver la pagination pour certaines parties de la mémoire.
mlock
désactive la pagination 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,
jusqu'à ce que les pages soit libérées avec
munmap,
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 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é. (Soyez toutefois conscient que le mode suspendu
sur les portables et certains ordinateurs de bureau sauvegarde une copie
de la mémoire sur le disque, quelques soient les verrouillages).
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.
POSIX.1b, SVr4. SVr4 documente un code d'erreur EAGAIN supplémentaire.
Christophe Blaess, 1996-2003.