Processus de pagination du système

La plupart des opérations de pagination se produisent dans un contexte du processus de pagination du 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 du 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 de l’unité de traitement graphique locale (GPU) et du système
  • Remplir les allocations avec un motif
  • Mettre à jour les tables de pages
  • Attribuer les allocations au segment d'ouverture
  • Vider la mémoire tampon de recherche de traduction

Le processus de pagination possède son propre espace d’adressage virtuel GPU, les contextes GPU et les mémoires tampons d’accès direct à la mémoire (DMA) (appelées mémoires tampons de pagination). Il possède ses propres tables de page, épinglées dans la mémoire physique et expulsé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 que le contenu de la mémoire est perdu en raison de transitions d’alimentation.

Diagramme montrant la relation entre les espaces d’adressage virtuels et physiques dans le processus de pagination du système.

Le noyau graphique DirectX initialise un nombre suffisant de tables de pages ainsi que d’entrées dans la table de pages racine pour couvrir un espace d’adressage virtuel de 1 Go. La zone tampon est utilisée pour mapper temporairement des allocations pendant les opérations de transfert et de remplissage vers l’espace d’adressage virtuel du processus de pagination. Si une allocation ne correspond pas à la zone temporaire d’adresse virtuelle, l’opération de transfert sera réalisée par morceaux.

Une allocation de table de page racine système est créée pour le processus de pagination. Son contenu est défini pendant 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, reflétant la table de pages de la zone tampon dans l’espace d’adressage du processus système. Cela permet au processus système de modifier les tables de pages de la zone de scratch et de mapper/démapper la mémoire de cette zone si nécessaire. Le contenu des tables de pages est défini pendant l’initialisation de l’adaptateur et ne change jamais. Les entrées de la table de pages de l'espace temporaire sont utilisées pour cartographier les allocations à l'espace d’adressage virtuel du processus de pagination. Elles sont initialisées comme non valides pendant l’initialisation et utilisées ultérieurement pour les opérations de pagination. Les tables de page du processus de pagination sont initialisées via les opérations de pagination UpdatePageTable pendant l’initialisation de l’adaptateur et l’événement d’alimentation. Pour ces opérations, PageTableUpdateMode est forcé à CPU_VIRTUAL et doit être terminé immédiatement à l’aide du CPU (la mémoire tampon de pagination ne doit pas être utilisée).

Les mises à jour des entrées de la 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 :

  1. Une allocation de table de pages racine et des allocations de tables de pages de niveau inférieur sont créées pour couvrir 1 Go d’espace d’adressage.
  2. Les allocations sont validées sur un segment de mémoire.
  3. Plusieurs opérations de pagination UpdatePageTable sont émises au pilote pour initialiser les entrées de la table de pages.

En guise d’exemple d’initialisation de l’espace d’adressage virtuel du processus de pagination, prenons 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 de 2 niveaux constitué des éléments suivants :

  • Une table de page racine système
  • Tableau d’une page système
  • 255 tables de pages de zone de stockage temporaire

La figure suivante montre comment les tables de pages sont initialisées en fonction de l’emplacement de la table de page racine et de la table de pages en mémoire physique. Notez que les adresses physiques ne sont fournies que sous forme d’illustration. Un tableau 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 temporaire. 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.

Diagramme illustrant le processus d’initialisation de la table de pages dans un schéma de traduction de 2 niveaux.