mincore

Autres langues

Langue: fr

Version: 8 janvier 2007 (mandriva - 01/05/08)

Section: 2 (Appels système)

NOM

mincore - Déterminer si des pages se trouvent en mémoire physique

SYNOPSIS

#include <unistd.h>
#include <sys/mman.h>

int mincore(void *start, size_t length, unsigned char *vec);

DESCRIPTION

mincore() renvoie un vecteur qui indique si des pages de mémoire virtuelle d'un processus appelant sont présentes en mémoire physique (RAM) auquel cas un accès à ces pages ne provoquera pas d'accès disque (défaut de page). Le noyau renvoie les informations concernant les pages à partir de l'adresse start sur une longueur de length octets. L'argument start doit être un multiple de la taille de page du système. L'argument length n'a pas besoin d'être un multiple de la taille de page du système, mais puisque les informations sont renvoyées pour des pages entières, length est arrondie par excès au multiple de la taille de page du système. On peut obtenir la taille de page (PAGE_SIZE) avec sysconf(_SC_PAGESIZE).

L'argument vec doit pointé vers un tableau contenant au moins (length+PAGE_SIZE-1) / PAGE_SIZE octets. En retour, le bit de poids faiblr de chaque octet sera positionné à 1 si la page correspondante est présente en mémoire physique et à 0 autrement. (L'état des autres bits de chaque octet est indéfini ; ces bits sont réservés pour une éventuelle utilisation future.) Bien entendu, les informations renvoyées dans vec ne sont qu'un instantané : les pages qui ne sont pas verrouillées en mémoire peuvent aller et venir à tout moment, et le contenu de vec peut être déjà périmé au retour de l'appel.

Pour que mincore() réussisse, start doit être alignée sur une frontière de page. C'est la responsabilité de l'appelant d'arrondir l'adresse à la page la plus proche. Le paramètre length n'est pas nécessairement un multiple de la taille de page. Le vecteur vec doit être assez grand pour contenir (length+PAGE_SIZE-1)/PAGE_SIZE octets. On peut connaître la taille de page en invoquant getpagesize(2).

VALEUR RENVOYÉE

Si elle réussit, la fonction mincore() renvoie zéro. En cas d'erreur, elle renvoie -1 et rempli errno avec la valeur d'erreur.

ERREURS

EAGAIN le noyau manque temporairement de ressources.
EFAULT
vec pointe vers une adresse illégale.
EINVAL
n'est pas aligné sur une frontière de page.
ENOMEM
length est plus grand que (TASK_SIZE - start). (Cela peut arriver si une valeur négative est fournie à length, puisque cette valeur sera interprétée comme étant un très grand entier non signé.) Dans Linux 2.6.11 et précédents, l'erreur EINVAL était renvoyé dans ce cas là.
ENOMEM
la zone entre start et start + length contient de la mémoire non projetée.

VERSIONS

Disponible depuis Linux 2.3.99pre1 et glibc 2.2.

CONFORMITÉ

mincore() n'est pas spécifiée par POSIX.1-2001 et n'est pas disponible sur toutes les implémentations Unix.

BOGUES

Avant le noyau 2.6.21, mincore() ne renvoyait pas d'information correcte pour une projection MAP_PRIVATE, ou pour des projections non linéaires (établies en utilisant remap_file_pages(2)).

VOIR AUSSI

mlock(2), mmap(2)

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 17 janvier 2002 et révisée le 26 novembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 mincore ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.