remap_file_pages
Section: System Calls (2)
Updated: 4 décembre 2022
Index
Return to Main Contents
NOM
remap_file_pages - Créer une projection non linéaire d'un fichier
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#define _GNU_SOURCE /* Consultez feature_test_macros(7) */
#include <sys/mman.h>
[[obsolète]] int remap_file_pages(void addr[.size], size_t size,
int prot, size_t pgoff, int flags);
DESCRIPTION
Note : cet appel système a été indiqué comme obsolète à partir de Linux
3.16. Dans Linux 4.0, l'implémentation a été remplacée par une émulation
plus lente dans le noyau. Le peu d'applications qui utilisent cet appel
système devraient envisager de passer à des alternatives. Ce changement a eu
lieu, car le code du noyau de cet appel système était complexe et,
semble-t-il, peu utilisé voire inusité. S'il avait quelques cas
d'utilisation dans des applications de base de données sur des systèmes
32 bits, ces cas n'existent plus sur des systèmes 64 bits.
L'appel système remap_file_pages() est utilisé pour créer une projection
non linéaire, c'est-à-dire une projection dans laquelle les pages du fichier
sont projetées en mémoire dans un ordre non séquentiel. L'avantage
d'utiliser remap_file_pages() au lieu de faire des appels répétés à
mmap(2) est que la première approche n'impose pas au noyau de créer des
structures de données VMA (Virtual Memory Area : zone mémoire virtuelle)
supplémentaires.
Pour créer une projection non linéaire, nous allons effectuer les étapes
suivantes :
- 1.
-
Utiliser mmap(2) pour créer une projection (qui est initialement
linéaire). Cette projection doit être créée avec l'attribut MAP_SHARED.
- 2.
-
Utiliser un ou plusieurs appels à remap_file_pages() pour réorganiser la
correspondance entre les pages de la projection et les pages du fichier. Il
est possible d'accéder à la même page d'un fichier dans plusieurs endroits
de la région projetée.
Les paramètres pgoff et size spécifient la région du fichier à reloger
dans la projection : pgoff est un décalage de fichier (Ndt : file
offset) dans l'unité de taille de page du système ; size est la longueur
de la région en octets.
Le paramètre addr sert à deux choses. Tout d'abord, il identifie la
projection des pages que l'on souhaite réorganiser. Ainsi, addr doit être
une adresse tombant dans une région précédemment projetée par un appel à
mmap(2). Ensuite, addr spécifie l'adresse à laquelle les pages du
fichier identifiées par pgoff et size seront placées.
Les valeurs spécifiées dans addr et size doivent être des multiples de
la taille de page système. Si elles ne le sont pas, le noyau arrondit par défaut les deux valeurs au multiple de taille de page le plus proche.
Le paramètre prot doit être spécifié à 0.
Le paramètre flags a la même signification que pour mmap(2), mais tous
les attributs autres que MAP_NONBLOCK sont ignorés.
VALEUR RENVOYÉE
S'il réussit, remap_file_pages() renvoie 0. S'il échoue, -1 est
renvoyé et errno est positionné pour indiquer l'erreur.
ERREURS
- EINVAL
-
addr ne fait pas référence à une projection valide créée avec l'attribut
MAP_SHARED.
- EINVAL
-
addr, size, prot ou pgoff n'est pas valable.
VERSIONS
L'appel système remap_file_pages() est apparu dans Linux 2.5.46 ; la
prise en charge de la glibc a été ajouté dans la glibc 2.3.3.
STANDARDS
L'appel système remap_file_pages() est spécifique à Linux.
NOTES
Depuis Linux 2.6.23, remap_file_pages() ne crée des projections non
linéaires que sur les systèmes de fichiers en mémoire comme tmpfs(5),
hugetlbfs ou ramfs. Sur les systèmes de fichiers avec cache,
remap_file_pages() n’est pas beaucoup plus efficace que mmap(2) pour
ajuster les parties du fichier associées à leur adresse.
VOIR AUSSI
getpagesize(2), mmap(2), mmap2(2), mprotect(2), mremap(2),
msync(2)
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
Jean-Philippe MENGUAL <jpmengual@debian.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- VERSIONS
-
- STANDARDS
-
- NOTES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 06:49:41 GMT, May 18, 2024