Les appels système
alloc_hugepages()
et
free_hugepages()
ont été introduits dans Linux 2.5.36 et retirés à nouveau dans le 2.5.54.
Ils n'existent que sur i386 et ia64
(compilation avec l'option
CONFIG_HUGETLB_PAGE).
Dans Linux 2.4.20 le numéro d'appel système existe,
mais échoue avec l'erreur
ENOSYS.
Sur un i386, le mécanisme matériel de gestion mémoire manipule des pages
ordinaires (4 KiB) et des pages immenses (2 à 4 MiB).
De même, l'ia64 connaît des pages immenses de diverses tailles.
Ces appels système servent à projeter ces pages immenses dans l'espace
mémoire du processus ou à les libérer.
Les pages immenses sont verrouillées en mémoire et jamais swappées.
Le paramètre
cle
est un identificateur.
Lorsqu'il vaut zéro, les pages sont privées
et non héritées par les processus descendants.
Lorsqu'il est positif, les pages sont partagées
avec les autres applications utilisant la même
cle,
et héritées par les processus enfants.
Le paramètre
adr
de
free_hugepages()
indique quelle page doit être libérée - il a été renvoyé lors de
l'appel
alloc_hugepages().
(La mémoire n'est véritablement libérée que
lorsque tous ses utilisateurs la relâchent).
Le paramètre
adr
de
alloc_hugepages()
est un désir que le noyau peut suivre ou non.
Les adresses doivent être correctement alignées.
Le paramètre
lg
est la taille du segment désiré.
Il doit s'agir d'un multiple de la taille d'une page immense.
Le paramètre
prot
indique le type de protection du segment.
Il s'agit d'une association de
PROT_READ,
PROT_WRITE
et
PROT_EXEC.
Le paramètre
flag
est ignoré, sauf si
cle
est positive.
Dans ce cas, si
flag
vaut
IPC_CREAT,
alors un nouveau segment de page énorme
est créé si aucun n'existe avec cette clé.
Sinon, l'erreur
ENOENT
est renvoyée si aucun segment correspondant à la clé n'existe.
.SHVALEURRENVOYÉE
S'il réussit
alloc_hugepages()
renvoie l'adresse du segment alloué, et
free_hugepages()
renvoie zéro.
En cas d'erreur, ils renvoient -1 et remplissent
errno
avec le code d'erreur.