zion - mlock
Nom
mlock - Désactiver la pagination pour certaines parties de la mémoire.
Résumé
.nf #include <sys/mman.h> int mlock(const void *addr, size_t len); .fi
Description
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.
Notes
Dans l'appel-système de Linux, addr est automatiquement arrondie à la frontière de page la plus proche. Toutefois, POSIX 1003.1-2001 permet à l'implémentation d'imposer que addr soit alignée sur une frontière de page. Les programmes portable en prendront soin.
Valeur renvoyée
L'appel mlock renvoie 0 si il réussit, ou -1 s'il échoue, auquel cas errno contient le code d'erreur, et rien n'est modifié sur les verrouillages de la mémoire du processus.
Erreurs
ENOMEM
Une partie des adresses incluses dans la zone désirée ne correspond pas à une page de l'espace d'adressage accessible, ou le processus a essayé de dépasser le nombre maximal de pages verrouillées. |
EPERM
L'appelant n'a pas les privilèges appropriés, seul le Super-User peut verrouiller des pages. |
EINVAL len
n'est pas un nombre positif. |
Conformité
POSIX.1b, SVr4. SVr4 documente un code d'erreur EAGAIN supplémentaire.
Voir aussi
munlock (2), mlockall (2), munlockall (2). munmap (2), setrlimit (2)
Traduction
Christophe Blaess, 1996-2003.
Poster un commentaire