Kartenregister

Treiber, die DMA ausführen, verwenden drei verschiedene Adressräume, wie in der folgenden Abbildung dargestellt.

Zuordnungen physischer, logischer und virtueller Adressen.

Auf jeder Windows-Plattform hat ein Treiber Zugriff auf den vollständigen virtuellen Adressraum, der vom Prozessor unterstützt wird. Auf einem 32-Bit-Prozessor stellt der virtuelle Adressraum vier Gigabyte dar. Die CPU übersetzt Adressen im virtuellen Adressraum mithilfe einer Seitentabelle in Adressen im physischen Adressraum des Systems. Jeder Seitentabelleneintrag (Page Table Entry, PTE) ordnet eine Seite des virtuellen Arbeitsspeichers einer Seite des physischen Arbeitsspeichers zu, was bei Bedarf zu einem Auslagerungsvorgang führt. Eine MDL (Speicherdeskriptorliste) stellt eine ähnliche Zuordnung für einen Puffer bereit, der DMA-Vorgängen des Treibers zugeordnet ist.

Geräte variieren in ihrer Fähigkeit, auf den vollständigen virtuellen Adressraum des Systems zuzugreifen. Ein Gerät verwendet Adressen im logischen (Geräte-)Adressraum. Jede HAL verwendet Zuordnungsregister , um ein Gerät oder eine logische Adresse in eine physische Adresse (einen Standort im physischen RAM) zu übersetzen. Für die Gerätehardware führen Kartenregister dieselbe Funktion wie die MDL (und die Seitentabelle) für die Software (Treiber) aus: Sie übersetzen Adressen in physischen Arbeitsspeicher.

Da diese Adressräume separat adressiert werden, kann ein Treiber keinen Zeiger im virtuellen Adressraum verwenden, um einen Speicherort im physischen Speicher zu adressieren und umgekehrt. Der Treiber muss die virtuelle Adresse zuerst in eine physische Adresse übersetzen. Ebenso kann ein Gerät keine logische Adresse verwenden, um direkt auf physischen Arbeitsspeicher zuzugreifen. Das Gerät muss zuerst die Adresse übersetzen.

Eine HAL muss Adapterobjekte einrichten, die DMA für eine Vielzahl von DMA-Geräten und E/A-Bussen auf verschiedenen Computern unterstützen. Beispielsweise verfügen die meisten ISA DMA-Controller, untergeordneten Geräte und Bus-master-Geräte über unzureichende Adresszeilen, um auf den gesamten physischen Systemadressraum eines 32-Bit-Prozessors zuzugreifen (oder auf die physische Systemadresse eines x86-Prozessors mit 64 Gigabyte, der im 36-Bit-PAE-Modus ausgeführt wird). Im Gegensatz dazu verfügen PCI-DMA-Geräte in der Regel über mehr als genügend Adresszeilen, um auf den vollständigen physischen Systemadressraum in 32-Bit-Prozessoren zuzugreifen. Daher bietet jede HAL Zuordnungen zwischen den logischen Adressbereichen , auf die DMA-Geräte zugreifen können, und den physischen Adressbereichen jedes Computers.

Jedes Adapterobjekt ist einem oder mehreren Kartenregistern zugeordnet, abhängig von der Menge der zu übertragenden Daten und der Menge des verfügbaren Arbeitsspeichers. Während DMA-Übertragungen verwendet die HAL jedes Zuordnungsregister, um eine vom Gerät zugängliche logische Seite mit einer Seite des physischen Arbeitsspeichers in der CPU zu aliasen. In der Tat bieten Kartenregister Scatter-/Gather-Unterstützung für Treiber, die DMA verwenden, unabhängig davon, ob ihre Geräte über Scatter-/Gather-Funktionen verfügen.

Die folgende Abbildung veranschaulicht eine solche physisch-logische Adresszuordnung für den Treiber eines ISA DMA-Geräts ohne Scatter/Gather-Funktionen.

Adresszuordnung für ein beispiel isa dma-Gerät.

Die vorherige Abbildung zeigt die folgenden Zuordnungstypen:

  1. Jedes Kartenregister ordnet für ein ISA DMA-Gerät einen Bereich von physischen Adressen (auf die durchgezogene Linien verwiesen wird) logischen Adressen mit niedriger Reihenfolge (gepunktete Linien) zu.

    Hier werden drei Kartenregister verwendet, um drei ausgelagerte Datenbereiche im physischen Systemspeicher zu drei seitengroßen Bereichen logischer Adressen mit niedriger Reihenfolge für ein ISA DMA-Gerät zu aliasen.

  2. Das ISA-Gerät verwendet die zugeordneten logischen Adressen, um während DMA-Vorgängen auf den Systemspeicher zuzugreifen.

    Für ein vergleichbares PCI-DMA-Gerät würden auch drei Kartenregister für drei seitengroße Datenbereiche verwendet. Die zugeordneten logischen Adressbereiche sind jedoch nicht unbedingt mit den entsprechenden physischen Adressbereichen identisch, sodass ein PCI-Gerät auch logische Adressen für den Zugriff auf den Systemspeicher verwenden würde.

  3. Jeder Eintrag in der MDL ordnet einen Standort im virtuellen Adressraum einer physischen Adresse zu.

Beachten Sie die Korrespondenz zwischen einem Kartenregister und einem virtuellen zu physischen Eintrag in der MDL:

  • Jedes Kartenregister und jeder virtuelle Eintrag in einer MDL ordnet höchstens eine vollständige physische Datenseite für einen DMA-Übertragungsvorgang zu.

  • Jedes Kartenregister und jeder virtuelle Eintrag in einer MDL können weniger als eine vollständige Datenseite zuordnen. Beispielsweise kann der anfängliche virtuelle Eintrag in einer MDL einem Offset von der physischen Seitengrenze zugeordnet werden, wie weiter oben in der Abbildung Zuordnungen physischer, logischer und virtueller Adressen gezeigt.

  • Jedes Kartenregister und jeder virtuelle Eintrag in einer MDL-Zuordnung, mindestens ein Byte.

In einem IRP, der einen Lese- oder Schreibvorgang anfordert, stellt jeder virtuelle Eintrag in der Opaque-to-Drivers-MDL unter Irp-MdlAddress> eine Seitengrenze im physischen Systemspeicher für einen Benutzerpuffer dar. Auf ähnliche Weise stellt jedes zusätzliche Kartenregister, das für eine einzelne DMA-Übertragung benötigt wird, eine Seitengrenze im logischen Adressbereich dar, der für das Gerät zugänglich ist und für den physischen Systemspeicher alias wird.

Auf jeder Windows-Plattform verfügt jedes Adapterobjekt über einen zugeordneten Satz von mindestens einem Kartenregister, der sich an einer plattformspezifischen Basisadresse (und einer undurchsichtigen Basisadresse für Treiber) befindet. Aus Der Sicht eines Treibers ist die Kartenregisterbasis in der Abbildung, die die Adresszuordnung für ein BEISPIEL-ISA-DMA-Gerät veranschaulicht, ein Handle für eine Reihe von Kartenregistern, die Hardwareregister in einem Chip, in einem System-DMA-Controller oder in einem Bus-master-Adapter sein können, oder sogar virtuelle Hal-Register im Systemspeicher sein können.

Die Anzahl der mit einem Adapterobjekt verfügbaren Kartenregister kann für verschiedene Geräte und Windows-Plattformen variieren. Beispielsweise kann die HAL treibern, die System-DMA auf einigen Plattformen verwenden, mehr Kartenregister als auf anderen Plattformen zur Verfügung stellen, da die DMA-Controller auf verschiedenen Windows-Plattformen unterschiedliche Funktionen aufweisen.