Loading

NOM

       madvise - Configure l’utilisation de la mémoire

SYNOPSIS

       #include <sys/mman.h>

       int madvise(void *addr, size_t length, int advice);

   Exigences  de  macros  de  test  de  fonctionnalités  pour  la  glibc (voir
   feature_test_macros(7)) :

       madvise() : _BSD_SOURCE

       L’appel système madvise() conseille le noyau sur la façon de  gérer  la
       pagination  sur l’intervalle d’adresses débutant à l’adresse addr et de
       taille length (en octets). Il permet à une  application  d’indiquer  au
       noyau  l’utilisation qu’elle compte faire de certaines zones de mémoire
       partagée ou projetée de façon à ce que  le  noyau  puisse  choisir  les
       techniques  de  lecture  anticipée et de mise en cache appropriées. Cet
       appel ne modifie pas la sémantique de l’application (sauf dans  le  cas
       de  MADV_DONTNEED),  mais peut avoir un impact sur ses performances. Le
       noyau est libre d’ignorer le conseil.

       Le conseil est spécifié par le paramètre advice qui  peut  prendre  les
       valeurs

       MADV_NORMAL
              Pas  de  traitement  particulier.  Il s’agit du comportement par
              défaut.

       MADV_RANDOM
              Prévoit des accès aux pages dans un ordre aléatoire. (Ainsi,  la
              lecture anticipée sera moins utile qu’elle ne l’est en général.)

       MADV_SEQUENTIAL
              prévoit des accès aux pages dans un  ordre  séquentiel.  (Aussi,
              les  pages  d’un  intervalle donné peuvent être systématiquement
              lues par anticipation, et peuvent être libérées rapidement après
              avoir été accédées.)

       MADV_WILLNEED
              Prévoit  un  accès  dans  un futur proche. (Ainsi, lire quelques
              pages de façon anticipée peut être une bonne idée.)

       MADV_DONTNEED
              Ne prévoit pas d’accès dans un futur  proche.  (Pour  l’instant,
              l’application  en  a  fini avec l’intervalle considéré, ainsi le
              noyau peut‐il libérer les ressources associées  à  ce  dernier.)
              Les  accès ultérieurs aux pages de l’intervalle réussiront, mais
              résulteront  soit  en  un  rechargement   du   fichier   projeté
              sous‐jacent  (voir  mmap(2)),  soit  en  un remplissage avec des
              zéros pour les pages sans fichier.

       MADV_REMOVE (depuis Linux 2.6.16)
              Libérer  un  ensemble  contigu  de  pages  et   les   ressources
              correspondantes.  Actuellement,  ceci  n’est  possible  que  sur
              shmfs/tmpfs ; les autres systèmes de fichiers renvoient l’erreur
              ENOSYS.

       MADV_DONTFORK (depuis Linux 2.6.16)
              Ne  pas  rendre  les pages de cet intervalle disponibles au fils
              après un fork(2). Ceci est utile pour empêcher la sémantique  de
              copie  à l’écriture de changer l’emplacement physique d’une page
              si le père y écrit  après  un  fork(2).  (De  tels  déplacements
              posent des problèmes si le matériel accède directement à la page
              (DMA)).

       MADV_DOFORK (depuis Linux 2.6.16)
              Annuler l’effet de MADV_DONTFORK et  restaurer  le  comportement
              par  défaut,  où  une projection en mémoire est héritée après un
              fork(2).

VALEUR RENVOYÉE

       En cas de succès madvise() renvoie zéro. En cas d’erreur, il renvoie -1
       et errno est positionné de façon adéquate.

ERREURS

       EAGAIN Une ressource du noyau est temporairement indisponible.

       EBADF  La  projection  existe,  mais  la  zone  n’est pas associée à un
              fichier.

       EINVAL la valeur len est négative, addr n’est pas aligné sur une  page,
              advice n’a pas une valeur valide, ou bien l’application tente de
              libérer   des   pages   verrouillées    ou    partagées    (avec
              MADV_DONTNEED).

       EIO    (pour  MADV_WILLNEED) Suivre la consigne de pagination sur cette
              zone  dépasserait  la  limite  maximale  de   mémoire   physique
              utilisable par le processus.

       ENOMEM (pour MADV_WILLNEED) Mémoire insuffisante ; échec de pagination.

       ENOMEM Les adresses de l’intervalle  spécifié  ne  sont  pas  projetées
              actuellement,  ou  n’appartiennent pas à l’espace d’adressage du
              processus.

CONFORMITÉ

       POSIX.1b.  POSIX.1-2001  spécifie  l’appel  posix_madvise(3)  avec  des
       constantes  POSIX_MADV_NORMAL,  etc. et un comportement proche de celui
       décrit ici. Il existe un  appel  similaire  posix_fadvise(2)  pour  les
       accès aux fichiers.

       MADV_REMOVE, MADV_DONTFORK et MADV_DOFORK sont spécifiques à Linux.

NOTES

   Notes sur Linux
       L’implémentation  Linux  actuelle  (2.4.0)  perçoit davantage cet appel
       système  comme  une  commande  que  comme  un  conseil  et  est   ainsi
       susceptible  de  renvoyer  une  erreur  quand  elle  ne  parvient pas à
       réaliser ce qu’elle devrait accomplir en réponse à ce conseil. (Voir la
       description  des  ERREURS  ci‐dessus.)  Il s’agit d’un comportement non
       standard.

       L’implémentation Linux nécessite que l’adresse addr  soit  alignée  sur
       une  page,  et  permet  que length vaille zéro. S’il y a des parties de
       l’intervalle d’adresses spécifié qui ne sont pas projetées, la  version
       Linux  de  madvise()  les  ignore  et  applique  l’appel  au  reste  de
       l’intervalle (mais renvoie ENOMEM comme il se doit).

VOIR AUSSI

       getrlimit(2), mincore(2), mmap(2), mprotect(2), msync(2), munmap(2)

COLOPHON

       Cette page fait partie de  la  publication  3.23  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      être       trouvées       à       l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette  page  de  manuel  a  été traduite par Stéphan Rafin <stephan DOT
       rafin AT laposte DOT net> en 2002, puis a été mise  à  jour  par  Alain
       Portal  <aportal  AT  univ-montp2  DOT  fr>  jusqu’en  2006,  et mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
       francophone de traduction de Debian.

       Veuillez  signaler  toute  erreur   de   traduction   en   écrivant   à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document
       en utilisant la commande « man -L C <section> <page_de_man> ».