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 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).
Les processus temps réel qui utilisent
mlockall()
pour s'affranchir des délais sur les fautes de pages devraient réserver
suffisamment de pages de pile avant d'entrer dans la partie critique,
ainsi, aucune faute de page ne serait provoquée par ces appels.
Cela peut être fait en appelant une fonction qui alloue, de manière
automatique, une grande variable de type tableau et qui écrit
dans la mémoire occupée par ce tableau afin de toucher (Ndt : to touch)
ces pages de pile.
De cette manière, il y aura suffisamment de pages mappées
pour la pile verrouillée en RAM.
Cette écriture apparement inutile, permet de garantir qu'aucune faute
de page (même due au mécanisme de copie-à-l'écriture) ne se produira
dans la section critique.
Les verrouillages mémoire ne sont pas hérités par un fils créé avec
fork(2)
et sont automatiquement retirés (déverrouillage) lors d'un
execve(2)
ou lorsque le processus s'achève.
Le verrouillage mémoire sur un espace d'adresse est automatiquement
retiré si l'espace d'adresse est démappé avec
munmap(2).
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.