Partager via


Éviter les appareils d’interrogation

Un pilote de périphérique doit éviter d’interroger son appareil, sauf si cela est absolument nécessaire, et ne doit jamais utiliser une tranche de temps entière pour l’interrogation. L’interrogation d’un appareil est une opération coûteuse qui rend n’importe quel système d’exploitation lié au calcul au sein du pilote d’interrogation. Un pilote de périphérique qui effectue une grande interrogation interfère avec les opérations d’E/S sur d’autres appareils et peut ralentir le système et ne pas répondre aux utilisateurs.

Les appareils récemment développés, qui sont aussi avancés technologiquement que les processeurs sur lesquels Windows est conçu pour s’exécuter, nécessitent rarement qu’un pilote interroge son appareil, soit pour s’assurer que l’appareil est prêt à démarrer une opération d’E/S ou qu’une opération est terminée.

Néanmoins, certains appareils encore utilisés ont été conçus pour fonctionner avec d’anciens processeurs, qui avaient des bus de données étroits, des fréquences d’horloge lentes et des systèmes d’exploitation mono-utilisateur à tâche unique qui faisaient des E/S synchrones. Ces appareils peuvent nécessiter une interrogation ou d’autres moyens d’attendre que l’appareil met à jour ses registres.

Bien qu’il puisse sembler logique de résoudre un problème d’appareil lent en codant une boucle simple qui incrémente un compteur, « gaspiller » ainsi un intervalle minimal pendant que les mises à jour de l’appareil s’inscrivent, il est peu probable qu’un tel pilote soit portable sur les plateformes Windows. Le compteur de boucle maximal nécessite une personnalisation pour chaque plateforme. En outre, si le pilote est compilé avec un compilateur d’optimisation correct, le compilateur peut supprimer la variable de compteur du pilote et la ou les boucles où elle est incrémentée.

Note Suivez cette directive d’implémentation si le pilote doit se bloquer pendant que les mises à jour matérielles de l’appareil sont en état : un pilote peut appeler KeStallExecutionProcessor avant de lire les registres d’appareils. Le pilote doit réduire l’intervalle de décrochage et doit, en général, spécifier un intervalle de décrochage ne dépassant pas 50 microsecondes.

La granularité d’un intervalle KeStallExecutionProcessor est d’une microseconde.

Si l’appareil nécessite fréquemment plus de 50 microsecondes pour mettre à jour l’état, envisagez de configurer un thread dédié à l’appareil dans le pilote.