Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I driver che eseguono DMA usano tre spazi indirizzi diversi, come illustrato nella figura seguente.
In qualsiasi piattaforma Windows, un driver ha accesso allo spazio di indirizzi virtuale completo supportato dal processore. In un processore a 32 bit lo spazio indirizzi virtuale rappresenta quattro gigabyte. La CPU converte gli indirizzi nello spazio indirizzi virtuale in indirizzi nello spazio indirizzi fisico del sistema usando una tabella di pagine. Ogni voce della tabella di pagina (PTE) mappa una pagina di memoria virtuale a una pagina di memoria fisica, determinando un'operazione di paging quando necessario. Un elenco MDL (descrittore di memoria) fornisce un mapping simile per un buffer associato alle operazioni DMA del driver.
I dispositivi variano in base alla capacità di accedere allo spazio di indirizzi virtuale completo del sistema. Un dispositivo utilizza gli indirizzi nello spazio degli indirizzi logici del dispositivo. Ogni HAL usa registri di mapping per tradurre un dispositivo o un indirizzo logico in un indirizzo fisico (una posizione nella RAM fisica). Per l'hardware del dispositivo, i registri delle mappe eseguono la stessa funzione che la lista descrittore di memoria (MDL) e la tabella delle pagine eseguono per il software (driver): traducono gli indirizzi in memoria fisica.
Poiché questi spazi indirizzi vengono indirizzati separatamente, un driver non può usare un puntatore nello spazio indirizzi virtuale per indirizzare una posizione nella memoria fisica e viceversa. Il driver deve prima convertire l'indirizzo virtuale in un indirizzo fisico. Analogamente, un dispositivo non può usare un indirizzo logico per accedere direttamente alla memoria fisica. Il dispositivo deve prima tradurre l'indirizzo.
Un hal deve configurare oggetti adattatori che supportano DMA per un'ampia gamma di dispositivi DMA e bus di I/O in computer diversi. Ad esempio, la maggior parte dei controller ISA DMA, i dispositivi subordinati e i dispositivi bus-master non hanno righe di indirizzi sufficienti per accedere allo spazio di indirizzi fisico di sistema a quattro gigabyte completo di un processore a 32 bit (o l'indirizzo fisico di sistema a 64 gigabyte di un processore x86 in esecuzione in modalità PAE a 36 bit). Al contrario, i dispositivi PCI DMA hanno in genere più righe di indirizzi sufficienti per accedere allo spazio di indirizzi fisico completo del sistema in processori a 32 bit. Pertanto, ogni HAL fornisce mapping tra gli intervalli di indirizzi logici a cui i dispositivi DMA possono accedere e intervalli di indirizzi fisici di ogni computer.
Ogni oggetto adattatore è associato a uno o più registri mappa, a seconda della quantità di dati da trasferire e della quantità di memoria disponibile. Durante i trasferimenti DMA, l'HAL usa ogni registro mappa per aliasare una pagina logica accessibile dal dispositivo a una pagina di memoria fisica nella CPU. In effetti, i registri delle mappe forniscono supporto a dispersione/raccolta per i driver che usano DMA, indipendentemente dal fatto che i dispositivi dispongano di funzionalità a dispersione/raccolta.
La figura seguente illustra una mappatura degli indirizzi fisico-logici per il driver di un dispositivo ISA DMA che non supporta le capacità di scatter/gather.
La figura precedente illustra i tipi di mapping seguenti:
Ogni registro mappa un intervallo di indirizzi fisici (puntati da linee solide) a indirizzi logici di ordine inferiore (linee tratteggiate) per un dispositivo ISA DMA.
In questo caso, tre registri mappa vengono usati per eseguire l'alias di tre intervalli di dati di paging nella memoria fisica del sistema a tre intervalli di pagine di indirizzi logici di ordine ridotto per un dispositivo ISA DMA.
Il dispositivo ISA usa gli indirizzi logici mappati per accedere alla memoria di sistema durante le operazioni DMA.
Per un dispositivo PCI DMA paragonabile, vengono usati anche tre registri mappa per gestire tre intervalli di dati delle dimensioni di una pagina. Tuttavia, gli intervalli di indirizzi logici mappati non sarebbero necessariamente identici agli intervalli di indirizzi fisici corrispondenti, quindi un dispositivo PCI utilizzerebbe anche indirizzi logici per accedere alla memoria di sistema.
Ogni voce nella struttura MDL mappa una posizione nello spazio degli indirizzi virtuali a un indirizzo fisico.
Si noti la corrispondenza tra un registro mappa e una voce da virtuale a fisica nell'MDL.
Ogni registro di mappa e ogni voce virtuale in un MDL mappa al massimo una pagina fisica intera di dati per un'operazione di trasferimento DMA.
Ogni registro di mappa e ogni voce virtuale in un MDL potrebbero mappare meno di una pagina completa di dati. Ad esempio, la voce virtuale iniziale in un MDL può mappare uno scostamento dal limite di una pagina fisica, come illustrato in precedenza nella figura mapping di indirizzi fisici, logici e virtuali.
Ogni registro di mappa e ogni voce virtuale in un MDL mappano, almeno, un byte.
In un IRP che richiede un'operazione di lettura o scrittura, ogni voce virtuale nel MDL opaco per i driver all'indirizzo Irp-MdlAddress> rappresenta un confine di pagina nella memoria fisica del sistema per un buffer utente. Analogamente, ogni registro mappa aggiuntivo necessario per un singolo trasferimento DMA rappresenta un limite di pagina nell'intervallo di indirizzi logici accessibile dal dispositivo con alias per la memoria fisica di sistema.
In ogni piattaforma Windows, ogni oggetto adattatore ha un set associato di uno o più registri mappa che si trovano a un indirizzo di base specifico della piattaforma (e opaco ai driver). Dal punto di vista di un driver, la base dei registri di mappa illustrata nella figura che mostra il mapping degli indirizzi per un dispositivo ISA DMA di esempio è un handle per un insieme di registri di mappa, che possono essere registri hardware integrati in un chip, in un controller DMA di sistema, in un adattatore bus-master, o anche registri virtuali creati da HAL nella memoria di sistema.
Il numero di registri mappa disponibili con un oggetto adapter può variare per diversi dispositivi e piattaforme Windows. Ad esempio, la HAL può rendere disponibili più registri mappa per i driver che usano il DMA di sistema su alcune piattaforme rispetto ad altre perché i controller DMA su piattaforme Windows diverse hanno capacità diverse.