Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ovladače, které provádějí DMA, používají tři různé adresní prostory, jak je znázorněno na následujícím obrázku.
Na jakékoli platformě Windows má ovladač přístup k úplnému virtuálnímu adresnímu prostoru podporovanému procesorem. V 32bitovém procesoru představuje virtuální adresní prostor čtyři gigabajty. Procesor přeloží adresy ve virtuálním adresním prostoru na adresy ve fyzickém adresním prostoru systému pomocí stránkovací tabulky. Každá položka stránkovací tabulky (PTE) mapuje jednu stránku virtuální paměti na stránku fyzické paměti, což v případě potřeby vede k operaci stránkování. Seznam popisovačů paměti (MDL) poskytuje podobné mapování vyrovnávací paměti přidružené k operacím DMA ovladače.
Zařízení se liší ve své schopnosti přistupovat k celému virtuálnímu adresnímu prostoru systému. Zařízení používá adresy v logickém adresním prostoru zařízení. Každý HAL používá mapovacích registrů k překladu zařízení nebo logické adresy na fyzickou adresu (umístění ve fyzické paměti RAM). U hardwaru zařízení provádí mapové registry stejnou funkci, jakou MDL (a stránkovací tabulka) provádí pro software (ovladače): překládají adresy do fyzické paměti.
Vzhledem k tomu, že tyto adresní prostory jsou adresovány samostatně, ovladač nemůže použít ukazatel na virtuální adresní prostor k adresování umístění ve fyzické paměti a naopak. Ovladač musí nejprve přeložit virtuální adresu na fyzickou adresu. Podobně zařízení nemůže pro přímý přístup k fyzické paměti použít logickou adresu. Zařízení musí nejprve přeložit adresu.
HAL musí nastavit objekty adaptérů, které podporují DMA pro širokou škálu zařízení DMA a vstupně-výstupních sběrnic na různých počítačích. Například většina řadičů ISA DMA, podřízených zařízení a zařízení hlavní sběrnice nemá dostatek adresních řádků pro přístup k plnému fyzickému adresního prostoru systému 32 gigabajtů 32bitového procesoru (nebo fyzické adresy 64 gigabajtového systému procesoru x86 běžícího v 36bitovém režimu PAE). Naproti tomu zařízení PCI DMA mají obecně více než dostatek adresních řádků pro přístup k celému fyzickému adresnímu prostoru systému v 32bitových procesorech. Každý hal proto poskytuje mapování mezi logickou adresou rozsahy, ke kterým mají zařízení DMA přístup, a fyzické adresy rozsahy jednotlivých počítačů.
Každý objekt adaptéru je přidružený k jednomu nebo více registrům mapování v závislosti na množství dat, která se mají přenést, a množství dostupné paměti. Během přenosů DMA používá HAL každý registr mapy k aliasování logické stránky, která je přístupná zařízení, na stránku fyzické paměti v CPU. Fakticky mapové registry poskytují podporu funkce scatter-gather pro ovladače používající DMA, a to bez ohledu na to, zda jejich zařízení mají scatter-gather možnosti.
Následující obrázek znázorňuje takové mapování fyzických adres na logické adresy pro ovladač zařízení ISA DMA, které nemá scatter/gather schopnosti.
Předchozí obrázek znázorňuje následující typy mapování:
Každý registr map mapuje rozsah fyzických adres (na které odkazují plné čáry) na logické adresy s nízkým pořadím (tečkované čáry) pro zařízení ISA DMA.
V této části se používají tři mapové registry pro přiřazení tří stránkovaných rozsahů dat v systémové fyzické paměti na tři rozsahy logických adres o velikosti stránky pro zařízení ISA DMA s nízkým pořadím.
Zařízení ISA používá mapované logické adresy pro přístup k systémové paměti během operací DMA.
Pro srovnatelné zařízení PCI DMA by se také použily tři registry map pro tři rozsahy dat o velikosti stránky. Mapované logické rozsahy adres by ale nemusely být nutně identické s odpovídajícími rozsahy fyzických adres, takže by zařízení PCI také používalo logické adresy pro přístup k systémové paměti.
Každá položka v MDL mapuje umístění ve virtuálním adresním prostoru na fyzickou adresu.
Všimněte si korespondence mezi registrem mapy a virtuálně-fyzickou položkou v MDL.
Každá mapová registrace a každá virtuální položka v MDL mapuje maximálně celou fyzickou stránku dat pro operaci přenosu DMA.
Každý registr mapy a každá virtuální položka v MDL může mapovat méně než celou stránku dat. Například počáteční virtuální položka v MDL může mapovat na posun od fyzické hranice stránky, jak je znázorněno výše na obrázku Fyzické, logické a virtuální mapování adres.
Každý mapovací registr a každý virtuální záznam v MDL mapuje minimálně jeden bajt.
V IRP, který požaduje operaci čtení nebo zápisu, každá virtuální položka v MDL, který je pro ovladače neprůhledný, na adrese Irp->MdlAddress, představuje hranici stránky v systémové fyzické paměti pro uživatelský buffer. Podobně každý další registr mapování potřebný pro jeden přenos DMA představuje hranici stránky v logickém rozsahu adres, na které má zařízení přístup, namapované na fyzickou paměť systému.
Na každé platformě Windows má každý objekt adaptéru přidruženou sadu jednoho nebo více registrů map umístěných na platformě specifické základní adrese, která je pro ovladače neprůhledná. Z pohledu řidiče je základna registru mapy zobrazená na obrázku, který ilustruje mapování adres pro ukázkové zařízení ISA DMA, popisovačem sady mapových registrů, které mohou být hardwarové registry v čipu, v systémovém řadiči DMA nebo v adaptéru hlavní sběrnice, nebo dokonce HAL-vytvořené virtuální registry v systémové paměti.
Počet registrů map dostupných u objektu adaptéru se může lišit pro různá zařízení a platformy Windows. Hal může například zpřístupnit více registrů map ovladačům, které používají systémový DMA na některých platformách než na jiných platformách, protože řadiče DMA na různých platformách Windows mají různé možnosti.