MLOCKALL(2) Manuel du programmeur Linux MLOCKALL(2)
NOM
mlockall - Désactiver la pagination pour le processus
appelant.
SYNOPSIS
#include <sys/mman.h>
int mlockall(int flags);
DESCRIPTION
mlockall désactive la pagination (paging) pour toutes les
pages représentées dans l'espace d'adressage du processus
appelant. Ceci inclut les pages de code, de données, et
le segment de pile, tout autant que les bibliothèques
partagées, l'espace utilisateur dans le noyau, la mémoire
partagée et les fichiers projetés en mémoire.
Quand l'appel système mlockall réussit, on a l'assurance
que toutes les pages concernées 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 ver
rouillage 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étermin
iste, et la pagination est, avec l'ordonnancement, une
cause majeure de délais imprévus. Ces algorithmes bascu
lent 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é.
Néanmoins pour les applications sécurisées, seule une
petite partie de la mémoire doit être verrouillée, pour
laquelle la fonction mlock est parfaitement appropriée.
Le paramètre flags est constitué par un OU logique ( | )
entre les constantes symboliques suivantes :
MCL_CURRENT Verrouiller toutes les pages correspondant
actuellement à l'espace d'adressage du proces
sus.
MCL_FUTUR Verrouiller toutes les pages qui seront dans
Linux 8 Avril 1997 1
MLOCKALL(2) Manuel du programmeur Linux MLOCKALL(2)
l'espace d'adressage du processus dans le
futur. Ceci concerne par exemple les nouvelles
pages réclamées par un agrandissement de la
pile ou du tas, autant que les nouveaux
fichier projetés en mémoire, ou les nouvelles
régions de mémoire partagée.
Si MCL_FUTURE a été réclamé, et que le nombre de pages
verrouillées excède la limite maximale, l'appel système
ayant entrainé le dépassement échouera avec une erreur
ENOMEM. Si le problème se pose à cause de l'expansion de
la pile, le noyau empêchera l'agrandissement de celle-ci
et déclenchera un signal SIGSEGV.
Les processus temps-réel doivent réserver suffisament de
pages avant d'entrer dans des portions critiques, pour
éviter tout déclenchement de faute de page. Ceci peut
être effectué simplement en appelant une fonction récla
mant une variable automatique suffisamment grande, et qui
écrit dans cette variable de manière à allouer ces pages
pour la pile. L'écriture dans la variable garantit qu'il
ne se produira même pas de faute de page de
copie-sur-écriture durant l'exécution de la section cri
tique.
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 liberé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 en mémoire vive tant qu'il
y a au moins un processus ou une zone qui les verrouille.
Sur les systemes POSIX où mlockall et munlockall sont
disponibles, la constante symbolique _POSIX_MEMLOCK est
définie dans <unistd.h>
VALEUR RENVOYÉE
mlockall renvoie 0 si il réussit, ou -1 s'il échoue,
auquel cas errno contient le code d'erreur.
ERREURS
ENOMEM Le processus a dépassé le nombre maximal de page
verrouillées.
EPERM L'appelant n'a pas les privilèges appropriés, seul
le Super-User peut verrouiller des pages.
EINVAL Un attribut inconnu a été spécifié.
Linux 8 Avril 1997 2
MLOCKALL(2) Manuel du programmeur Linux MLOCKALL(2)
CONFORMITÉ
POSIX.1b, SVr4. SVr4 documente un code d'erreur EAGAIN
supplémentaire.
VOIR AUSSI
munlockall(2), mlock(2), and munlock(2).
TRADUCTION
Christophe Blaess, 1997.
Linux 8 Avril 1997 3