MLOCKALL(2)

NOM
mlockall - Desactiver la pagination pour le processus appelant.

SYNOPSIS
#include <sys/mman.h>

int mlockall(int flags);

DESCRIPTION
mlockall desactive la pagination (paging) pour toutes les pages representees dans l'espace d'adressage du processus appelant. Ceci inclut les pages de code, de donnees, et le segment de pile, tout autant que les bibliotheques partagees, l'espace utilisateur dans le noyau, la memoire partagee et les fichiers projetes en memoire. Quand l'appel systeme mlockall reussit, on a l'assurance que toutes les pages concernees resident en memoire vive (RAM) et y resteront jusqu'a un deverrouillage par la fonction munlock ou munlockall ou encore jusqu'a ce que le processus se termine ou demarre un programme avec exec. Les processus fils n'heritent pas du verrouillage des pages a travers un fork. Il y a deux domaines principaux d'applications au verrouillage de pages : les algorithmes en temps reel, et le traitement de donnees confidentielles. Les applications temps reel reclament un comportement temporel deterministe, et la pagination est, avec l'ordonnancement, une cause majeure de delais imprevus. Ces algorithmes basculent habituellement sur un comportement d'ordonnancement temps reel avec sched_setscheduler. Les logiciels de cryptographie manipulent souvent quelques octets hautement confidentiels, comme des mots de passe ou des cles privees. A cause de la pagination ces donnees secretes risquent d'etre transferees sur un support physique ou elles pourraient etre lues par un ennemi longtemps apres que le logiciel se soit termine. Neanmoins pour les applications securisees, seule une petite partie de la memoire doit etre verrouillee, pour laquelle la fonction mlock est parfaitement appropriee. Le parametre flags est constitue par un OU logique ( | ) entre les constantes symboliques suivantes :

MCL_CURRENT
    Verrouiller toutes les pages correspondant actuellement a l'espace d'adressage du processus.

MCL_FUTUR
    Verrouiller toutes les pages qui seront dans l'espace d'adressage du processus dans le futur. Ceci concerne par exemple les nouvelles pages reclamees par un agrandissement de la pile ou du tas, autant que des nouveaux fichier representes en memoire, ou de nouvelles regions de memoire partagee.

Si MCL_FUTURE a ete reclame, et que le nombre de pages verrouillees excede la limite maximale, l'appel systeme ayant entraine le depassement echouera avec une erreur ENOMEM. Si le probleme se pose a cause de l'expansion de la pile, le noyau empechera l'agrandissement de celle-ci et declenchera un signal SIGSEGV. Les processus temps-reel doivent reserver suffisament de pages avant d'entrer dans des portions critiques, pour eviter tout declenchement de faute de page. Ceci peut etre effectue simplement en appelant une fonction reclamant une variable automatique suffisamment grande, et qui ecrit dans cette variable de maniere a allouer ces pages pour la pile. L'ecriture dans la variable garantit qu'il ne se produira meme pas de faute de page de copie-sur-ecriture durant l'execution de la section critique. Il n'y a pas d'empilement des verrouillages memoire, ce qui signifie qu'une page verrouillee plusieurs fois par mlock ou mlockall sera liberee en un seul appel a munlock pour la zone memoire correspondante ou par un appel a munlockall. Les pages qui sont verrouillees par plusieurs zones, ou par plusieurs processus restent en memoire vive tant qu'il y a au moins un processus ou une zone qui les verrouille. Sur les systemes POSIX ou mlockall et munlockall sont disponibles, la constante symbolique _POSIX_MEMLOCK est definie dans <unistd.h>

VALEUR RENVOYEE
mlockall renvoie 0 si il reussit, ou -1 s'il echoue, auquel cas errno contient le code d'erreur.

ERREURS

ENOMEM
    Le processus a depasse le nombre maximal de page verrouillees.

EPERM
    L'appelant n'a pas les privileges appropries, seul le Super-User peut verrouiller des pages.

EINVAL
    Un attribut inconnu a ete speccifie.

CONFORMITE
POSIX.1b, SVr4. SVr4 documente un code d'erreur EAGAIN supplementaire.

VOIR AUSSI
munlockall(2), mlock(2), and munlock(2).