Les MANs Linux en français...
MREMAP
Section: Manuel du programmeur Linux (2)Updated: 8 Avril 1997
Index Retour au Menu Principal
NOM
mremap - Modifier une projection (mapping) de la mémoire virtuelle.SYNOPSIS
#include <unistd.h>#include <sys/mman.h>
void * mremap(void *old_address, size_t old_size , size_t new_size, unsigned long flags);
DESCRIPTION
mremap agrandit (ou diminue) une projection (mapping) de mémoire virtuelle en mémoire réelle, en la déplaçant éventuellement (sous contrôle de l'argument flags et de la place disponible dans l'espace d'adressage virtuel).old_address est l'ancienne adresse du bloc de mémoire virtuelle à agrandir (ou à diminuer). Notez que old_address doit être alignée sur une frontière de page.
old_size est la taille du bloc de mémoire virtuelle.
new_size est la taille désirée pour le nouveau bloc de mémoire.
L'argument flags contient les options décrites plus bas.
Sous Linux, la mémoire est divisée en pages. Un processus utilisateur dispose d'un ou plusieurs segments linéaires de mémoire virtuelle. A chaque segment correspond une ou plusieurs projections dans les pages de mémoire réelle (dans la table des pages).
Chaque segment de mémoire virtuelle dispose de ses propres droits d'accès (sa protection), ce qui peut déclencher des fautes de segmentation si la mémoire est utilisée incorrectement (par exemple, en écrivant dans un segment en lecture seule).
De même une tentative d'accès à la mémoire en-dehors des segments déclenche également une faute de segmentation.
mremap utilise le schéma de la table des pages de Linux. mremap modifie la correspondance entre les adresses virtuelles et les pages de mémoire réelle. Ce mécanisme peut être utilisé pour implémenter un realloc très efficace.
OPTIONS
Ces valeurs sont combinées par un OU binaire ( | ) dans le champ flags lors de l'appel de mremap.- MREMAP_MAYMOVE
-
indique que le bloc virtuel peut être déplacé si le
redimensionnement ne peut pas être effectué à la même
adresse virtuelle.
VALEUR RENVOYÉE
mremap renvoie une pointeur sur la nouvelle zone de mémoire virtuelle s'il réussit. En cas d'échec, -1 est renvoyé et errno contient le code d'erreur.ERREURS
- EINVAL
- Un argument invalide a été fourni. old_address n'était probablement pas alignée sur une frontière de pages.
- EFAULT
- "Segmentation fault." Une adresse dans l'intervalle entre old_address et old_address+old_size n'est pas une adresse virtuelle valide pour ce processus. On peut également obtenir EFAULT même s'il existe des projections recouvrant la zone complète demandée, mais que ces projections sont de types différents.
- EAGAIN
- Le segment de mémoire est verrouillé et sa projection ne peut pas être modifiée.
- ENOMEM
- La zone de mémoire ne peut pas être agrandie à l'emplacement actuel, et l'option MREMAP_MAYMOVE n'a pas été fournie dans flags. Ou encore il n'y a plus assez de mémoire virtuelle disponible.
CONFORMITÉ
Cet appel système est spécifique à Linux et ne doit pas être employé dans des programmes conçus pour être portables. BSD 4.2 a un appel système mremap(2) avec une sémantique totalement différente.VOIR AUSSI
getpagesize(2), realloc(3), malloc(3), brk(2), sbrk(2), mmap(2) (Modern Operating Systems by Andrew S. Tannenbaum, Inside Linux by Randolf Bentson, The Design of the UNIX Operating System by Maurice J. Bach.)
TRADUCTION
Christophe Blaess, 1997.
Index
Time: 21:41:14 GMT, December 19, 2004