MLOCKALL(2) Manuel du programmeur Linux MLOCKALL(2) NOM mlockall - Dsactiver la pagination pour le processus appelant. SYNOPSIS #include <sys/mman.h> int mlockall(int flags); DESCRIPTION mlockall dsactive la pagination pour toutes les pages prsentes dans l'espace d'adressage du processus appelant. Ceci inclut les pages de code, de donnes, et la pile, tout autant que les bibliothques partages, les donnes utilisateur dans le noyau, la mmoire partage et les fichiers projets en mmoire. Quand l'appel mlockall russit, on a l'assurance que toutes les pages concernes rsident en mmoire vive (RAM) et y resteront jusqu' un dverrouillage par la fonction munlock ou munlockall ou encore jusqu' ce que le proces- sus se termine ou dmarre un programme avec exec(3,n,1 builtins). Les processus fils n'hritent pas du verrouillage des pages travers un fork. Il y a deux domaines principaux d'applications au verrouillage de pages : les algorithmes en temps rel, et le traitement de donnes confidentielles. Les applications temps rel rclament un comporte- ment temporel dterministe, et la pagination est, avec l'ordonnance- ment, une cause majeure de dlais imprvus. Ces algorithmes bascu- lent habituellement sur un ordonnancement temps rel avec sched_setscheduler. Les logiciels de cryptographie manipulent souvent quelques octets hautement confidentiels, comme des mots de passe ou des cls prives. A cause de la pagination ces donnes secrtes risquent d'tre transfres sur un support physique o elles pour- raient tre lues par un ennemi longtemps aprs que le logiciel se soit termin. Nanmoins pour les applications scurises, seule une petite partie de la mmoire doit tre verrouille, pour laquelle la fonction mlock est parfaitement approprie. Le paramtre flags est constitu par un OU binaire ( | ) entre les constantes symboliques suivantes : MCL_CURRENT Verrouiller toutes les pages correspondant actuellement 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 rclames par un agrandisse- ment de la pile ou du tas, autant que les nouveaux fichier projets en mmoire, ou les nouvelles rgions de mmoire partage. Si MCL_FUTUR a t rclam, et que le nombre de pages verrouilles excde la limite maximale, l'appel systme ayant entran le dpassement chouera avec une erreur ENOMEM. Si le problme se pose cause de l'expansion de la pile, le noyau empchera l'agrandisse- ment de celle-ci et dclenchera un signal(2,7) SIGSEGV. Les processus temps-rel doivent rserver suffisamment de pages avant d'entrer dans des portions critiques, pour viter tout dclenchement de faute de page. Ceci peut tre effectu simplement en appelant une fonction rclamant une variable automatique suffisamment grande, et qui crit dans cette variable de manire allouer ces pages pour la pile. L'criture dans la variable garantit qu'il ne se produira mme pas de faute de page de copie-sur-criture durant l'excution de la section critique. Il n'y a pas d'empilement des verrouillages mmoire, ce qui signifie qu'une page verrouille plusieurs fois par mlock ou mlockall sera libre en un seul appel munlock pour la zone mmoire correspon- dante ou par un appel munlockall. Les pages qui sont verrouilles par plusieurs zones, ou par plusieurs processus restent en mmoire vive tant qu'il y a au moins un processus ou une zone qui les ver- rouille. Sur les systmes POSIX o mlockall et munlockall sont disponibles, la constante symbolique _POSIX_MEMLOCK est dfinie dans <unistd.h> VALEUR RENVOYE mlockall renvoie 0 si il russit, ou -1 s'il choue, auquel cas errno contient le code d'erreur. ERREURS ENOMEM Le processus a dpass le nombre maximal de page ver- rouilles. EPERM L'appelant n'a pas les privilges appropris, seul le Super-User peut verrouiller des pages. EINVAL Un attribut inconnu a t spcifi. CONFORMIT POSIX.1b, SVr4. SVr4 documente un code d'erreur EAGAIN supplmentaire. VOIR AUSSI munlockall(2), mlock(2), munlock(2) TRADUCTION Christophe Blaess, 1996-2003. LDP 18 juillet 2003 MLOCKALL(2)