Delen via


Kaartregisters

Stuurprogramma's die DMA uitvoeren, gebruiken drie verschillende adresruimten, zoals wordt weergegeven in de volgende afbeelding.

fysieke, logische en virtuele adrestoewijzingen.

Op elk Windows-platform heeft een stuurprogramma toegang tot de volledige virtuele adresruimte die door de processor wordt ondersteund. Op een 32-bits processor vertegenwoordigt de virtuele adresruimte vier gigabytes. De CPU vertaalt adressen in de virtuele adresruimte naar adressen in de fysieke adresruimte van het systeem met behulp van een paginatabel. Elke paginatabelvermelding (PTE) wijst één pagina van het virtuele geheugen toe aan een pagina met fysiek geheugen, wat resulteert in een pagineringsbewerking wanneer dat nodig is. Een MDL (geheugendescriptorlijst) biedt een vergelijkbare toewijzing voor een buffer die is gekoppeld aan bewerkingen van het stuurprogramma voor DMA.

Apparaten verschillen in hun vermogen om toegang te krijgen tot de volledige virtuele adresruimte van het systeem. Een apparaat maakt gebruik van adressen in de logische adresruimte van het apparaat. Elke HAL gebruikt kaartregisters om een apparaat of logisch adres te vertalen naar een fysiek adres (een locatie in het fysieke RAM-geheugen). Voor de hardware van het apparaat voeren kaartregisters dezelfde functie uit die de MDL -tabel (en paginatabel) uitvoert voor de software (stuurprogramma's): ze vertalen adressen naar fysiek geheugen.

Omdat deze adresruimten afzonderlijk worden geadresseerd, kan een stuurprogramma geen aanwijzer in de virtuele adresruimte gebruiken om een locatie in het fysieke geheugen te adresseren en omgekeerd. Het stuurprogramma moet het virtuele adres eerst vertalen naar een fysiek adres. Op dezelfde manier kan een apparaat geen logisch adres gebruiken om rechtstreeks toegang te krijgen tot fysiek geheugen. Het apparaat moet het adres eerst vertalen.

Een HAL moet adapterobjecten instellen die DMA ondersteunen voor een groot aantal DMA-apparaten en I/O-bussen op verschillende computers. De meeste ISA DMA-controllers, onderliggende apparaten en busmaster-apparaten hebben bijvoorbeeld onvoldoende adreslijnen voor toegang tot de volledige fysieke adresruimte van het systeem van vier gigabyte van een 32-bits processor (of het fysieke adres van het systeem van 64 gigabyte van een x86-processor die wordt uitgevoerd in de 36-bits PAE-modus). PCI DMA-apparaten hebben daarentegen over het algemeen meer dan voldoende adreslijnen om toegang te krijgen tot de volledige fysieke adresruimte van het systeem in 32-bits processors. Daarom biedt elke HAL toewijzingen tussen de logische adresbereiken waartoe DMA-apparaten toegang hebben en fysieke adresbereiken van elke computer.

Elk adapterobject is gekoppeld aan een of meer kaartregisters, afhankelijk van de hoeveelheid gegevens die moet worden overgedragen en de hoeveelheid beschikbaar geheugen. Tijdens DMA-overdrachten gebruikt de HAL elk kaartregister om een logische pagina die toegankelijk is voor een apparaat te aliasen naar een pagina met fysiek geheugen in de CPU. In feite bieden mapregisters ondersteuning voor scatter/gather aan stuurprogramma's die gebruikmaken van DMA, ongeacht of hun apparaten scatter/gather-mogelijkheden hebben.

In de volgende afbeelding ziet u een dergelijke toewijzing van fysiek naar logisch adres voor het stuurprogramma van een ISA DMA-apparaat dat geen spreidings-/verzamelmogelijkheden heeft.

adrestoewijzing voor een voorbeeld van een ISA DMA-apparaat.

In de vorige afbeelding ziet u de volgende typen toewijzingen:

  1. Elk kaartregister mapt een reeks fysieke adressen (die worden aangegeven door ononderbroken lijnen) naar laag-ordelijke logische adressen (stippellijnen) voor een ISA DMA-apparaat.

    Hier worden drie kaartregisters gebruikt voor het aliasen van drie paginabereiken met gegevens in het fysieke geheugen van het systeem tot drie bereiken met logische adressen met lage volgorde voor een ISA DMA-apparaat.

  2. Het ISA-apparaat gebruikt de toegewezen logische adressen voor toegang tot systeemgeheugen tijdens DMA-bewerkingen.

    Voor een vergelijkbaar PCI DMA-apparaat zouden drie kaartregisters ook worden gebruikt voor drie gegevensbereiken van paginaformaat. De toegewezen logische adresbereiken zouden echter niet noodzakelijkerwijs identiek zijn aan de bijbehorende fysieke adresbereiken, dus een PCI-apparaat zou ook logische adressen gebruiken om toegang te krijgen tot het systeemgeheugen.

  3. Elke vermelding in de MDL wijst een locatie in de virtuele adresruimte toe aan een fysiek adres.

Noteer de correspondentie tussen een kaartregister en een virtueel-naar-fysiek item in de MDL:

  • Elk kaartregister en elke virtuele vermelding in een MDL komt overeen met maximaal een volledige fysieke pagina gegevens voor een DMA-overdrachtsbewerking.

  • Elk kaart en elke virtuele vermelding in een MDL kan minder dan een volledige pagina aan gegevens in kaart brengen. De eerste virtuele vermelding in een MDL kan bijvoorbeeld worden toegewezen aan een offset van de fysieke paginagrens, zoals eerder in de afbeelding fysieke, logische en virtuele adrestoewijzingen wordt weergegeven.

  • Elke kaartregister en elke virtuele ingang in een MDL mappen minimaal één byte.

In een IRP die een lees- of schrijfbewerking aanvraagt, vertegenwoordigt elke virtuele invoer in de ondoorzichtige MDL voor stuurprogramma's bij Irp-MdlAddress> een pagina-grens in het fysieke systeemgeheugen voor een gebruikersbuffer. Op dezelfde manier vertegenwoordigt elk extra mapregister dat nodig is voor één DMA-overdracht een paginagrens in het logische adresbereik dat toegankelijk is voor het apparaat en is gekoppeld aan het fysieke systeemgeheugen.

Op elk Windows-platform heeft elk adapterobject een gekoppelde set van een of meer mapregisters die zich bevinden op een platformspecifiek (en voor stuurprogramma's ondoorzichtig) basisadres. Vanuit het oogpunt van een stuurprogramma is de kaartregisterbasis die wordt weergegeven in de afbeelding waarin adrestoewijzing voor een voorbeeld van een ISA DMA-apparaat wordt weergegeven, een ingang voor een set kaartregisters die hardwareregisters kunnen zijn in een chip, in een systeem-DMA-controller of in een bus-masteradapter, of zelfs virtuele registers in systeemgeheugen kunnen zijn gemaakt.

Het aantal kaartregisters dat beschikbaar is voor een adapterobject kan variëren voor verschillende apparaten en Windows-platforms. De HAL kan bijvoorbeeld meer kaartregisters beschikbaar maken voor stuurprogramma's die gebruikmaken van systeem-DMA op sommige platforms dan op andere platforms, omdat de DMA-controllers op verschillende Windows-platforms verschillende mogelijkheden hebben.