MADVISE

Section: Manuel du programmeur Linux (2)
Updated: 2001-06-10
Index Retour au Menu Principal

 

NOM

madvise - Donne des conseils sur l'utilisation de la mémoire  

SYNOPSIS


#include <sys/mman.h>

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

DESCRIPTION

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 start et de taille length octets. Il permet à une application d'indiquer au noyau l'utilisation qu'elle compte faire de certaines zones de mémoire partagée ou mappé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, 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 est susceptible d'être 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 violemment 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.)
 

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

EINVAL
la valeur len est négative, start 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).
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 - Echec du passage d'une page en mémoire physique.
EIO
(pour MADV_WILLNEED) suivre la consigne de pagination sur cette zone provoquerait un dépassement de la taille fixée comme limite maximale de mémoire physique utilisable par le processus.
EBADF
La correspondance existe, mais la zone mappe quelque chose qui n'est pas un fichier.
EAGAIN
une ressource du noyau est temporairement indisponible.
 

NOTES SUR LINUX

L'implantation 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 accomplit généralement en réponse à ce conseil. (Voir la description des ERREURS ci dessus.) Il s'agit d'un comportement non standard.

L'implantation Linux nécessite que l'adresse start 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 l'appel système renvoie ENOMEM comme il se doit).  

HISTORIQUE

La fonction madvise est apparue pour la première fois dans BSD 4.4.  

CONFORMITÉS

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

VOIR AUSSI

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

TRADUCTION

Stéphan Rafin, 2002.



 

Index

NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
NOTES SUR LINUX
HISTORIQUE
CONFORMITÉS
VOIR AUSSI
TRADUCTION


Time: 21:40:48 GMT, December 19, 2004