NOM¶
subpage_prot - Définir une protection des sous-pages pour un intervalle
d'adresses
SYNOPSIS¶
long subpage_prot(unsigned long addr, unsigned long len,
uint32_t *map);
Remarque : il n'existe pas de fonction glibc autour de cet appel
système ; consultez
NOTES.
DESCRIPTION¶
L'appel système
subpage_prot() spécifique aux PowerPC fournit
la possibilité de contrôler les permissions d'accès sur des
sous-pages de 4 ko sur des systèmes configurés avec une taille
de page de 64 ko.
La table de protection est appliquée aux pages de mémoire dans la
région démarrant à
addr et sur
len octets. Ces
deux paramètres doivent être alignés sur des frontières de
64 ko.
La table de protection est spécifiée dans le tampon dont l'adresse est
fournie dans
map. La table contient 2 bits par sous-page de
4 ko ; ainsi chaque mot de 32 bits spécifie les
protections de 16 sous-pages de 4 ko dans une page de 64 ko (on
voit donc que le nombre de mots 32 bits pointés par
map doit
valoir le nombre de pages de 64 ko indiqué par
len). Chaque
champ de 2 bits dans la table de protection vaut soit 0 pour autoriser
tout accès, soit 1 pour interdire l'écriture, soit 2 ou 3 pour
interdire tout accès.
VALEUR RENVOYÉE¶
S'il réussit
subpage_prot() renvoie 0. Sinon il renvoie un des codes
d'erreur définis ci-dessous.
ERREURS¶
- EFAULT
- Le tampon indiqué par map n'est pas
accessible.
- EINVAL
- Les paramètres addr ou len sont
incorrects. Ces deux paramètres doivent être alignés sur un
multiple de taille de page du système, et ne doivent pas
désigner une région en dehors de l'espace d'adressage du
processus ou une région qui contient des pages immenses.
- ENOMEM
- Plus de mémoire disponible.
VERSIONS¶
Cet appel système est disponible sur les architectures PowerPC depuis
Linux 2.6.25. L'appel système n'est disponible que si le noyau a
été configuré avec
CONFIG_PPC_64K_PAGES. Aucune prise en
charge dans l'espace utilisateur n'est disponible.
Cet appel système est spécifique à Linux.
NOTES¶
La glibc ne fournit pas de fonction autour de cet appel système ;
appelez-le avec
syscall(2).
Les protections de page habituelles (au niveau de chaque page de 64 ko)
s'appliquent aussi ; le mécanisme de protection des sous-pages est
une contrainte supplémentaire, ainsi un 0 dans un champ sur 2 bits
ne permettra pas d'écrire sur une page qui est par ailleurs
protégée en écriture.
Justification¶
Cet appel système est fourni pour aider l'écriture d'émulateurs
qui opèrent avec des pages de 64 ko sur des systèmes PowerPC.
Quand on émule des systèmes x86, qui utilisent une taille de page
inférieure, l'émulateur ne peut plus utiliser l'unité de
gestion de la mémoire (
memory-management unit, ou MMU) et
les appels système habituels pour contrôler les protections de pages
(l'émulateur pourrait émuler le MMU en vérifiant, et
éventuellement traduisant, chaque adresse mémoire, mais cela est
lent). L'idée est que l'émulateur fournisse un tableau de masques de
protections à appliquer sur un intervalle donné d'adresses
virtuelles. Ces masques sont appliqués au niveau où les entrées
de tables de pages (
page-table entries, ou PTE) matérielles sont
insérées dans la table de pages matérielles basées sur les
PTE Linux, si bien que les PTE Linux ne sont pas affectées. Il en
résulte que les régions de l'espace d'adressage qui sont
protégées basculent vers des pages matérielles de 4 ko au
lieu de 64 ko (pour les machines qui prennent en charge des pages
matérielles de 64 ko).
VOIR AUSSI¶
mprotect(2),
syscall(2)
Documentation/vm/hugetlbpage.txt dans les sources du noyau Linux.
COLOPHON¶
Cette page fait partie de la publication 3.44 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
<
http://www.kernel.org/doc/man-pages/>.
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande «
man -L C
<section> <page_de_man> ».