madvise   Début   Suivant   Sommaire   Préc.page.lue   Accueil
Section: Manuel du programmeur Linux (2)
Updated: 22 avril 2008
Sommaire  



NOM   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
madvise - Configurer l'utilisation de la mémoire  



SYNOPSIS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
#include <sys/mman.h>

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

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

madvise() : _BSD_SOURCE  




DESCRIPTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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 par un rechargement du fichier projeté sous-jacent (void mmap(2)), soit par un remplissage avec des zéros pour les pages sans fichier.
MADV_REMOVE (Depuis Linux 2.6.16)
Libère une plage donnée de pages et son support associé. Actuellement, seuls shmfs/tmpfs le prennent en charge ; les autres systèmes de fichiers renviennent avec l'erreur ENOSYS.
MADV_DONTFORK (Depuis Linux 2.6.16)
Ne pas rendre les pages de cette plage disponibles au fils après un fork(2). C'est utile pour empêcher la sémantique copie sur écriture de modifier l'emplacement physique d'une page(s) si le parent écrit dedans après un fork(2). (De tels relogements de page entraînent des problèmes pour les matériels qui accèdent par DMA à cette page(s).)
MADV_DOFORK (Depuis Linux 2.6.16)
Annule l'effet de MADV_DONTFORK, restaurant le comportement par défaut par lequel un mappage est hérité à travers fork(2).
 



VALEUR RENVOYÉE   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
EAGAIN
une ressource du noyau est temporairement indisponible.
EBADF
La projection existe, mais la zone n'est pas associé à 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
les adresses de l'intervalle spécifié ne sont pas mappées actuellement, ou n'appartiennent pas à l'espace d'adressage du processus.
ENOMEM
(pour MADV_WILLNEED) Mémoire insuffisante - Échec de pagination.
 



CONFORMITÉ   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
POSIX.1b. POSIX.1-2001 spécifie la fonction posix_madvise(3) avec des constantes POSIX_MADV_NORMAL, etc. et un comportement proche de celui décrit ici. Il existe une fonction similaire posix_fadvise(2) pour les accès aux fichiers.

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




NOTES   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
 



Notes Linux   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

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 mappé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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
getrlimit(2), mincore(2), mmap(2), mprotect(2), msync(2), munmap(2)  



TRADUCTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

Ce document est une traduction réalisée par Stephan Rafin <stephan DOT rafin AT laposte DOT net> le 12 août 2002 et révisée le 6 juin 2008.

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 madvise ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.


 



Sommaire   Début   Suivant   Sommaire   Préc.page.lue   Accueil
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
CONFORMITÉ
NOTES
Notes Linux
VOIR AUSSI
TRADUCTION

Table des mots clés   Début   Suivant   Sommaire   Préc.page.lue   Accueil
EAGAINERREURS
EBADFERREURS
EINVALERREURS
EIOERREURS
ENOMEMERREURS
MADV_DOFORK (Depuis Linux 2.6.16)DESCRIPTION
MADV_DONTFORK (Depuis Linux 2.6.16)DESCRIPTION
MADV_DONTNEEDDESCRIPTION
MADV_NORMALDESCRIPTION
MADV_RANDOMDESCRIPTION
MADV_REMOVE (Depuis Linux 2.6.16)DESCRIPTION
MADV_SEQUENTIALDESCRIPTION
MADV_WILLNEEDDESCRIPTION



Ce document a été créé par man2html suivi de man2html.pl, le 17/10/2008 17:49:12, en utilisant les pages de 'man'.
 

Valid HTML 4.01 Transitional