Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La plupart des opérations de pagination se produisent dans un contexte du processus de pagination système. La seule exception est la mise à jour de la table de pages à partir du rappel UpdateGpuVirtualAddress, qui se produit dans un contexte complémentaire spécial et se produit de façon synchrone de rendu.
Le noyau graphique DirectX utilise le processus de pagination système pour effectuer des opérations de pagination, telles que :
- Transférer l’allocation entre la mémoire du système et la mémoire gpu (Graphics Processing Unit) locale
- Remplir les allocations avec un modèle
- Mettre à jour les tables de pages
- Mapper les allocations au segment d’ouverture
- Vider la mémoire tampon d’apparence de traduction
Le processus de pagination dispose de son propre espace d’adressage virtuel GPU, de contextes GPU et de mémoires tampons d’accès direct à la mémoire (DMA) (appelées mémoires tampons de pagination). Il a ses propres tables de pages qui sont épinglées dans la mémoire physique et supprimées uniquement pendant les transitions d’alimentation.
L’espace d’adressage virtuel pour le processus de pagination a une disposition prédéfinie, est initialisé pendant l’initialisation de l’adaptateur et chaque fois après que le contenu de la mémoire est perdu en raison de transitions d’alimentation.
Le noyau graphique DirectX initialise suffisamment de tables de pages et d’entrées de table de pages dans la table de pages racine pour couvrir l’espace d’adressage virtuel de 1 Go. La zone de travail est utilisée pour mapper temporairement les allocations pendant les opérations de transfert et de remplissage à l’espace d’adressage virtuel du processus de pagination. Si une allocation ne tient pas dans la zone de travail de l’adresse virtuelle, l’opération de transfert est effectuée en blocs.
Une allocation de table de pages racine système est créée pour le processus de pagination. Son contenu est défini lors de l’initialisation et ne change jamais (sauf après les transitions d’alimentation).
Les tables de pages du processus système sont divisées en deux parties :
Une table de pages système est créée qui reflète la table de pages de zone de travail dans l’espace d’adressage du processus système. Cela permet au processus système de modifier les tables de pages de zone de travail et de mapper/démapper la mémoire à partir de la zone de travail si nécessaire. Le contenu des tables de pages est défini lors de l’initialisation de l’adaptateur et ne change jamais. Les entrées de table de page de la table de la zone de travail sont utilisées pour mapper les allocations à l’espace d’adressage virtuel du processus de pagination. Ils sont initialisés comme non valides pendant l’initialisation et utilisés ultérieurement pour les opérations de pagination. Les tables de pages du processus de pagination sont initialisées via les opérations de pagination UpdatePageTable lors de l’initialisation de l’adaptateur et de l’événement de mise sous tension. Pour ces opérations, le PageTableUpdateMode est forcé de CPU_VIRTUAL et doit être effectué immédiatement à l’aide du processeur (la mémoire tampon de pagination ne doit pas être utilisée).
Mises à jour des entrées de table de pages pour tous les autres processus sont effectuées à l’aide du PageTableUpdateMode spécifié par le pilote. Ces mises à jour sont effectuées dans le contexte du processus de pagination.
Voici comment l’installation est effectuée :
- Une allocation de table de page racine et des allocations de tables de pages de niveau inférieur sont créées pour couvrir 1 Go d’espace d’adressage.
- Les allocations sont validées dans un segment de mémoire.
- Plusieurs opérations de pagination UpdatePageTable sont émises pour le pilote pour initialiser les entrées de table de pages.
À titre d’exemple d’initialisation de l’espace d’adressage virtuel du processus de pagination, considérons le cas avec les paramètres suivants :
- La taille de la page est de 4 096 octets
- L’espace d’adressage virtuel du processus de pagination est de 1 Go
- La taille d’entrée de la table de pages est de 4 octets
Dans ce cas, nous avons besoin d’un schéma de traduction à 2 niveaux composé des éléments suivants :
- Une table de pages racine système
- Une table de pages système
- 255 tables de pages de zone de travail
La figure suivante montre comment les tables de pages sont initialisées en fonction de l’emplacement de la table de pages racine et de la table de pages dans la mémoire physique. Notez que les adresses physiques sont fournies uniquement à titre d’illustration. Une table de pages couvre 4 Mo de l’espace d’adressage. Ainsi, la table de pages système couvre toutes les tables de pages de zone de travail. La zone de travail commence à partir de 4 Mo d’adresse virtuelle.
Comme vous le voyez, la plage d’adresses virtuelles comprise entre 0 et 4095 n’est pas valide.