Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die meisten Pagingvorgänge erfolgen in einem Kontext des System paging-Prozesses. Die einzige Ausnahme ist die Aktualisierung der Seitentabelle aus dem UpdateGpuVirtualAddress-Rückruf, der in einem speziellen Begleitkontext erfolgt und synchron zum Rendern erfolgt.
Der DirectX-Grafikkern verwendet den System paging-Prozess, um Pagingvorgänge auszuführen, z. B.:
- Übertragen der Zuordnung zwischen System- und GPU-Speicher (Graphics Processing Unit)
- Füllen von Zuordnungen mit Einem Muster
- Aktualisieren von Seitentabellen
- Zuordnungen zum Blendensegment
- Leeren des Übersetzungs-Look-Aside-Puffers
Der Pagingprozess verfügt über einen eigenen virtuellen GPU-Adressraum, GPU-Kontexte und DMA-Puffer (Direct Memory Access) (pagingpuffer genannt). Es verfügt über eigene Seitentabellen, die im physischen Speicher angeheftet und nur bei Energieübergängen entfernt werden.
Der virtuelle Adressraum für den Pagingprozess weist ein vordefiniertes Layout auf, wird während der Adapterinitialisierung und jedes Mal, nachdem der Speicherinhalt aufgrund von Energieübergängen verloren geht, initialisiert.
Der DirectX-Grafikkern initialisiert genügend Seitentabellen und Seitentabelleneinträge in der Stammseitentabelle, um den virtuellen Adressraum von 1 GB abzudecken. Der Scratch-Bereich wird verwendet, um temporäre Zuordnungen während der Übertragungs- und Auffüllvorgänge an den virtuellen Adressraum des Pagingprozesses zuzuordnen. Wenn eine Zuordnung nicht in den Scratchbereich für virtuelle Adressen passt, erfolgt der Übertragungsvorgang in Blöcken.
Für den Auslagerungsprozess wird eine Systemstammseitentabellenzuordnung erstellt. Der Inhalt wird während der Initialisierung festgelegt und ändert sich nie (außer nach Energieübergängen).
Die Seitentabellen des Systemprozesses sind in zwei Teile unterteilt:
Es wird eine Systemseitentabelle erstellt, die die Scratch-Page-Tabelle im Adressraum des Systemprozesses widerspiegelt. Dies ermöglicht es dem Systemprozess, die Seitentabellen für den Scratchbereich zu ändern und den Speicher nach Bedarf aus dem Grundbereich zuzuordnen/aufzuheben. Der Inhalt der Seitentabellen wird während der Adapterinitialisierung festgelegt und ändert sich nie. Die Tabellentabelleneinträge der Seitentabelle für den Scratchbereich werden verwendet, um Zuordnungen dem virtuellen Adressraum des Pagingprozesses zuzuordnen. Sie werden während der Initialisierung als ungültig initialisiert und später für Pagingvorgänge verwendet. Die Seitentabellen des Pagingprozesses werden während der Adapterinitialisierung und des Einschaltereignisses über UpdatePageTable-Pagingvorgänge initialisiert. Bei diesen Vorgängen muss pageTableUpdateModeCPU_VIRTUAL und sofort mit der CPU abgeschlossen werden (der Pagingpuffer sollte nicht verwendet werden).
Updates der Seitentabelleneinträge für alle anderen Prozesse erfolgt mit dem vom Treiber angegebenen PageTableUpdateMode. Diese Updates erfolgen im Kontext des Pagingprozesses.
So erfolgt die Einrichtung:
- Eine Stammseitentabellenzuordnung und Tabellenzuordnungen auf niedrigerer Ebene werden erstellt, um 1 GB Adressraum abzudecken.
- Die Zuordnungen werden in ein Speichersegment committet.
- Für den Treiber werden mehrere UpdatePageTable-Pagingvorgänge ausgegeben, um die Seitentabelleneinträge zu initialisieren.
Als Beispiel für die Initialisierung des virtuellen Adressraums des Pagingprozesses betrachten wir den Fall mit den folgenden Parametern:
- Seitengröße beträgt 4.096 Byte
- Der virtuelle Adressraum des Pagingprozesses beträgt 1 GB.
- Seitentabelleneintragsgröße beträgt 4 Byte
In diesem Fall benötigen wir ein 2-stufiges Übersetzungsschema aus:
- Eine Systemstammseitentabelle
- Eine Systemseitentabelle
- 255 Seitentabellen
Die folgende Abbildung zeigt, wie die Seitentabellen basierend auf dem Speicherort der Stammseitentabelle und der Seitentabelle im physischen Arbeitsspeicher initialisiert werden. Beachten Sie, dass die physischen Adressen nur als Abbildung angegeben werden. Eine Seitentabelle umfasst 4 MB des Adressraums. Daher deckt die Systemseitentabelle alle Seitentabellen im Scratchbereich ab. Der Scratch-Bereich beginnt mit einer virtuellen Adresse von 4 MB.
Wie Sie sehen, ist der virtuelle Adressbereich von 0 bis 4095 ungültig.