MREMAP(2)          Manuel du programmeur Linux          MREMAP(2)


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 incor­
       rectement (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 effi­
       cace.


OPTIONS
       Ces valeurs sont combinées par un OU binaire ( | ) dans le
       champ flags lors de l'appel de mremap.




Linux                      8 Avril 1997                         1





MREMAP(2)          Manuel du programmeur Linux          MREMAP(2)


       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 projec­
              tion 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  systeme  est spécifique à Linux et ne doit pas
       être employé dans des programmes conçus pour  être  porta­
       bles. BSD 4.2 a un appel système mremap(2) avec une séman­
       tique 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.







Linux                      8 Avril 1997                         2