Présentation des objets de contrôleur

Comme son nom l’indique, un objet contrôleur représente généralement un contrôleur d’appareil physique avec des appareils attachés. Un pilote non WDM de niveau le plus bas pour un ensemble d’appareils similaires coordonnés par un contrôleur physique peut créer un objet contrôleur et l’utiliser pour synchroniser les opérations d’E/S entre les appareils attachés. Le pilote implémente une routine ControllerControl et appelle les routines de prise en charge de l’objet contrôleur du gestionnaire d’E/S.

Notes

L’utilisation d’objets de contrôleur n’est pas prise en charge dans les pilotes WDM.

En règle générale, les pilotes utilisent des objets de contrôleur pour synchroniser les opérations avec les appareils attachés si les critères suivants sont respectés :

  • Le contrôleur n’effectue pas de longues opérations sans interruption, de sorte que le pilote n’a pas besoin de créer un thread dédié à l’appareil ou d’utiliser des threads de travail système.

  • Les appareils connectés au contrôleur sont similaires. Autrement dit, il ne s’agit pas d’appareils avec des propriétés physiques ou des fonctionnalités opérationnelles entièrement différentes, telles que les périphériques clavier et souris qui peuvent être connectés au clavier et au contrôleur d’appareil auxiliaire.

  • Le pilote est conçu pour être monolithique : monocouche par rapport au contrôleur de périphérique et aux périphériques physiques attachés, plutôt que d’être conçu comme un pilote de port (pour le contrôleur) avec un ou plusieurs pilotes de classe (pour les périphériques attachés) superposés sur le pilote de port.

Les pilotes d’appareils avec des canaux d’E/S et un ensemble d’objets d’appareil logique peuvent également utiliser un objet contrôleur pour synchroniser leurs opérations d’E/S entre ou entre les canaux d’un tel appareil.

Un objet contrôleur n’a pas de nom et n’est donc pas la cible des demandes d’E/S. Il s’agit simplement d’un mécanisme de synchronisation permettant de sérialiser les E/S à partir d’un ensemble d’objets d’appareil. Étant donné qu’un objet contrôleur n’a pas de nom, il est invisible pour les sous-systèmes protégés en mode utilisateur, qui ne peuvent pas effectuer de demandes d’E/S d’appareil sans obtenir un handle pour l’objet fichier qui représente l’objet d’appareil cible. Un objet contrôleur est également invisible pour les pilotes de niveau supérieur, qui ne peuvent pas attacher leurs propres objets d’appareil à un objet contrôleur. En d’autres termes, ni le gestionnaire d’E/S ni un pilote de niveau supérieur ne peuvent configurer un IRP demandant des E/S sur un appareil représenté par un objet contrôleur. Les demandes d’E/S sont toujours émises pour les objets d’appareil. Seul le pilote peut utiliser l’objet contrôleur.

Synchronisation et E/S superposées

Les pilotes monolithiques d’appareils physiques dotés de fonctionnalités telles que celles du contrôleur de disque « AT » ne sont pas nécessaires pour utiliser un objet contrôleur pour synchroniser leurs opérations d’E/S d’appareil. Par exemple, un enregistreur de pilotes peut essayer quelque chose comme la technique de synchronisation suivante au lieu d’utiliser un objet contrôleur :

  • Configurez des objets d’appareil nommés pour représenter les appareils qui sont des cibles pour les demandes d’E/S.

  • Conservez les informations d’état (peut-être un ensemble d’indicateurs Device Busy dans chaque extension d’appareil ou dans une seule extension d’appareil) indiquant quel objet d’appareil est la cible de l’opération d’E/S en cours.

  • Effectuez des opérations d’E/S pour l’objet d’appareil actuellement occupé et remettent en file d’attente les irps entrants pour d’autres objets d’appareil jusqu’à ce que l’IRP actuel soit terminé.

La technique de synchronisation précédente sérialise le traitement IRP pour tous les objets d’appareil cible du pilote. Notez qu’il force également le pilote à terminer l’IRP actuel avant que sa routine StartIo puisse commencer à traiter la prochaine IRP, ce qui diminue malheureusement les performances du pilote.

Si certaines opérations d’appareil peuvent se chevaucher, l’utilisation d’un objet contrôleur peut augmenter le débit d’E/S d’un pilote, car cette technique de synchronisation permet au pilote de déterminer s’il peut chevaucher des opérations juste avant de configurer l’appareil physique. Par exemple, un contrôleur de disque peut permettre au pilote de chevaucher les recherches sur un disque avec des opérations de lecture/écriture sur un autre disque.

En outre, l’utilisation d’un objet contrôleur est un moyen relativement simple de synchroniser les opérations d’E/S pour plusieurs objets d’appareil cible via un seul appareil physique, tel qu’un contrôleur de disque « AT ». L’utilisation d’un objet contrôleur permet à un pilote monolithique de synchroniser les opérations d’E/S sur un ensemble d’objets d’appareil nommés sans avoir à maintenir l’état de chaque appareil et du contrôleur d’appareil dans une ou plusieurs extensions d’appareil, et sans avoir à mettre en file d’attente les IRPs.

Toutefois, certains appareils conçus pour chevaucher les opérations d’E/S, comme les contrôleurs série duplex complet ou les adaptateurs master bus, ont généralement des pilotes qui configurent des files d’attente internes pour les irps.