Registres de carte
Les pilotes qui exécutent DMA utilisent trois espaces d’adressage différents, comme illustré dans la figure suivante.
Sur n’importe quelle plateforme Windows, un pilote a accès à l’espace d’adressage virtuel complet pris en charge par le processeur. Sur un processeur 32 bits, l’espace d’adressage virtuel représente quatre gigaoctets. Le processeur traduit les adresses de l’espace d’adressage virtuel en adresses dans l’espace d’adressage physique du système à l’aide d’une table de pages. Chaque entrée de table de pages (PTE) mappe une page de mémoire virtuelle à une page de mémoire physique, ce qui entraîne une opération de pagination si nécessaire. Une liste MDL (descripteur de mémoire) fournit un mappage similaire pour une mémoire tampon associée aux opérations DMA du pilote.
La capacité des appareils à accéder à l’espace d’adressage virtuel complet du système varie. Un appareil utilise des adresses dans l’espace d’adressage logique (appareil). Chaque HAL utilise des registres de carte pour traduire un appareil ou une adresse logique en adresse physique (un emplacement dans la RAM physique). Pour le matériel de l’appareil, les registres de carte exécutent la même fonction que le MDL (et la table de pages) pour les logiciels (pilotes) : ils traduisent les adresses en mémoire physique.
Étant donné que ces espaces d’adressage sont traités séparément, un pilote ne peut pas utiliser de pointeur dans l’espace d’adressage virtuel pour adresser un emplacement dans la mémoire physique, et inversement. Le pilote doit d’abord traduire l’adresse virtuelle en adresse physique. De même, un appareil ne peut pas utiliser d’adresse logique pour accéder directement à la mémoire physique. L’appareil doit d’abord traduire l’adresse.
Un HAL doit configurer des objets adaptateurs qui prennent en charge DMA pour un large éventail d’appareils DMA et de bus d’E/S sur différents ordinateurs. Par exemple, la plupart des contrôleurs DMA ISA, des appareils subordonnés et des appareils master bus ne disposent pas de lignes d’adressage suffisantes pour accéder à l’espace d’adressage physique du système de quatre gigaoctets d’un processeur 32 bits (ou à l’adresse physique système de 64 gigaoctets d’un processeur x86 exécuté en mode PAE 36 bits). En revanche, les appareils PCI DMA ont généralement plus que suffisamment de lignes d’adressage pour accéder à l’espace d’adressage physique du système complet dans les processeurs 32 bits. Par conséquent, chaque HAL fournit des mappages entre les plages d’adresses logiques auxquelles les appareils DMA peuvent accéder et les plages d’adresses physiques de chaque ordinateur.
Chaque objet adaptateur est associé à un ou plusieurs registres de carte, en fonction de la quantité de données à transférer et de la quantité de mémoire disponible. Pendant les transferts DMA, hal utilise chaque registre de carte pour alias une page logique accessible par l’appareil à une page de mémoire physique dans le processeur. En effet, les registres de carte fournissent une prise en charge des points/regroupements pour les pilotes qui utilisent DMA, que leurs appareils disposent ou non de fonctionnalités de diffusion/collecte.
La figure suivante illustre un tel mappage d’adresses physique à logique pour le pilote d’un appareil ISA DMA qui ne dispose pas de fonctionnalités de diffusion/collecte.
La figure précédente montre les types de mappages suivants :
Chaque registre map mappe une plage d’adresses physiques (pointées par des lignes pleines) à des adresses logiques de bas ordre (lignes en pointillés) pour un appareil ISA DMA.
Ici, trois registres de carte sont utilisés pour alias trois plages paginées de données dans la mémoire physique système à trois plages de taille de page d’adresses logiques de faible ordre pour un appareil ISA DMA.
L’appareil ISA utilise les adresses logiques mappées pour accéder à la mémoire système pendant les opérations DMA.
Pour un appareil PCI DMA comparable, trois registres de carte seraient également utilisés pour trois plages de données de taille page. Toutefois, les plages d’adresses logiques mappées ne étant pas nécessairement identiques aux plages d’adresses physiques correspondantes, un appareil PCI utiliserait également des adresses logiques pour accéder à la mémoire système.
Chaque entrée du MDL mappe un emplacement dans l’espace d’adressage virtuel à une adresse physique.
Notez la correspondance entre un registre de carte et une entrée virtuelle à physique dans le MDL :
Chaque registre de carte et chaque entrée virtuelle dans une MDL mappent au maximum une page physique complète de données pour une opération de transfert DMA.
Chaque registre de carte et chaque entrée virtuelle d’une MDL peuvent mapper moins d’une page complète de données. Par exemple, l’entrée virtuelle initiale dans une MDL peut être mappée à un décalage de la limite de la page physique, comme indiqué précédemment dans la figure Mappages d’adresses physiques, logiques et virtuelles .
Chaque registre de carte et chaque entrée virtuelle dans une MDL mappe, au minimum, un octet.
Dans un IRP demandant une opération de lecture ou d’écriture, chaque entrée virtuelle dans le MDL opaque aux pilotes à Irp-MdlAddress> représente une limite de page dans la mémoire physique système pour une mémoire tampon utilisateur. De même, chaque registre de carte supplémentaire nécessaire pour un transfert DMA unique représente une limite de page dans la plage d’adresses logiques accessible par l’appareil sous alias à la mémoire physique système.
Sur chaque plateforme Windows, chaque objet d’adaptateur a un ensemble associé d’un ou plusieurs registres de carte situés à une adresse de base spécifique à la plateforme (et opaque aux pilotes). Du point de vue d’un pilote, la base de registre de carte illustrée dans la figure illustrant le mappage d’adresses pour un exemple de périphérique DMA ISA est un handle pour un ensemble de registres de carte qui peuvent être des registres matériels dans une puce, dans un contrôleur DMA système, ou dans un adaptateur master bus, ou même des registres virtuels créés par HAL dans la mémoire système.
Le nombre de registres de carte disponibles avec un objet d’adaptateur peut varier pour différents appareils et plateformes Windows. Par exemple, hal peut rendre plus de registres de carte disponibles pour les pilotes qui utilisent le système DMA sur certaines plateformes que sur d’autres plateformes, car les contrôleurs DMA sur différentes plateformes Windows ont des fonctionnalités différentes.