subpage_prot
Table des matières
Retour à l'index
NOM
subpage_prot - Définir une protection des sous-pages pour un intervalle
d'adresses
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#include <sys/syscall.h> /* Définition des constantes SYS_* */
#include <unistd.h>
int syscall(SYS_subpage_prot, unsigned long addr, unsigned long len,
uint32_t *map);
Remarque: la glibc ne fournit pas d'enveloppe pour subpage_prot(),
imposant l'utilisation de syscall(2).
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
individuelles 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 assez de mémoire.
STANDARDS
Linux.
HISTORIQUE
Linux 2.6.25 (PowerPC).
L'appel système n'est disponible que si le noyau a été configuré avec
CONFIG_PPC_64K_PAGES.
NOTES
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/admin-guide/mm/hugetlbpage.rst dans les sources du noyau
Linux.
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-Pierre Giraud <jean-pierregiraud@neuf.fr>
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
-
- STANDARDS
-
- HISTORIQUE
-
- NOTES
-
- Justification
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:06 GMT, September 19, 2025