Registri mappa

I driver che eseguono DMA usano tre spazi indirizzi diversi, come illustrato nella figura seguente.

mapping di indirizzi fisici, logici e virtuali.

In qualsiasi piattaforma Windows, un driver può accedere allo spazio 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 fisici del sistema usando una tabella di pagina. Ogni voce di tabella di pagina (PTE) esegue il mapping di una pagina di memoria virtuale a una pagina di memoria fisica, causando 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 nella possibilità di accedere allo spazio indirizzi virtuale completo del sistema. Un dispositivo usa gli indirizzi nello spazio indirizzi logico (dispositivo). Ogni HAL usa i registri mappa per tradurre un dispositivo o un indirizzo logico in un indirizzo fisico (una posizione nella RAM fisica). Per l'hardware del dispositivo, i registri mappa eseguono la stessa funzione eseguita dalla tabella MDL (e tabella di pagine) per il software (driver): convertono gli indirizzi in memoria fisica.

Poiché questi spazi indirizzi vengono risolti 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 tradurre 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 gli oggetti adapter 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 DMA ISA, i dispositivi subordinati e i dispositivi master del bus hanno righe di indirizzi insufficienti per accedere allo spazio degli indirizzi fisici del sistema a quattro gigabyte completo di un processore a 32 bit (o l'indirizzo fisico del 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 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 adapter è 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, hal usa ogni registrazione mappa per aliasare una pagina logica accessibile dal dispositivo a una pagina di memoria fisica nella CPU. In effetti, i registri mappa forniscono supporto a dispersione/raccolta per i driver che usano DMA, indipendentemente dal fatto che i dispositivi abbiano funzionalità di dispersione/raccolta.

La figura seguente illustra un mapping di indirizzi fisici a logica per il driver di un dispositivo ISA DMA che non dispone di funzionalità di dispersione/raccolta.

mapping degli indirizzi per un dispositivo isa dma di esempio.

La figura precedente mostra i tipi di mapping seguenti:

  1. Ogni registro mappa esegue il mapping di un intervallo di indirizzi fisici (puntati da linee solide) a indirizzi logici di ordine basso (linee tratteggiate) per un dispositivo ISA DMA.

    In questo caso, tre registri mappa vengono usati per aliasre tre intervalli di dati a pagina nella memoria fisica del sistema a tre intervalli di indirizzi logici a basso ordine per un dispositivo ISA DMA.

  2. Il dispositivo ISA usa gli indirizzi logici mappati per accedere alla memoria di sistema durante le operazioni DMA.

    Per un dispositivo PCI DMA paragonabile, tre registri mappa verranno usati anche per tre intervalli di dati di dimensioni di pagina. Tuttavia, gli intervalli di indirizzi logici mappati non sarebbero necessariamente identici agli intervalli di indirizzi fisici corrispondenti, quindi un dispositivo PCI userebbe anche indirizzi logici per accedere alla memoria di sistema.

  3. Ogni voce nell'MDL esegue il mapping di una posizione nello spazio indirizzi virtuale a un indirizzo fisico.

Si noti la corrispondenza tra un registro mappa e una voce virtuale-a-fisica nel MDL:

  • Ogni registrazione mappa e ogni voce virtuale in un MDL esegue il mapping alla maggior parte di una pagina fisica completa dei dati per un'operazione di trasferimento DMA.

  • Ogni registro mappa e ogni voce virtuale in un MDL potrebbe mappare meno di una pagina completa di dati. Ad esempio, la voce virtuale iniziale in un MDL può eseguire il mapping a un offset dal limite della pagina fisica, come illustrato in precedenza nella figura Mapping indirizzi fisici , logici e virtuali .

  • Ogni registrazione mappa e ogni voce virtuale in un mapping MDL, almeno un byte.

In un'operazione IRP che richiede un'operazione di lettura o scrittura, ogni voce virtuale nel MDL opaco a driver in Irp-MdlAddress> rappresenta un limite 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 accessibili dal dispositivo alias per la memoria fisica del sistema.

In ogni piattaforma Windows ogni oggetto adapter ha un set associato di uno o più registri mappa che si trovano in un indirizzo di base specifico della piattaforma (e opaco-to-driver). Dal punto di vista di un driver, la base di registrazione mappa illustrata nella figura illustra il mapping degli indirizzi per un dispositivo ISA DMA di esempio è un handle per un set di registri mappa che potrebbero essere registri hardware in un chip, in un controller DMA di sistema o in una scheda master del bus o anche in registri virtuali creati da HAL nella memoria del sistema.

Il numero di registri mappa disponibili con un oggetto adapter può variare per diversi dispositivi e piattaforme Windows. Ad esempio, hal può rendere disponibili più registri mappa per i driver che usano DMA di sistema in alcune piattaforme rispetto ad altre piattaforme perché i controller DMA in piattaforme diverse dispongono di diverse funzionalità.