Freigeben über


Polling von Geräten vermeiden

Ein Gerätetreiber sollte vermeiden, sein Gerät abzufragen, es sei denn, es ist unbedingt erforderlich; außerdem sollte er niemals eine ganze Zeitscheibe für das Abfragen verwenden. Das Abfragen eines Geräts ist ein kostspieliger Vorgang, was dazu führt, dass jedes Betriebssystem innerhalb des Abfrageprozesses rechengebunden wird. Ein Gerätetreiber, der vieles Polling durchführt, stört E/A-Vorgänge auf anderen Geräten und kann das System langsam und unresponsiv machen.

Kürzlich entwickelte Geräte, die technisch fortschrittlich sind wie die Prozessoren, auf denen Windows ausgeführt werden soll, erfordern selten, dass ein Treiber sein Gerät abruft, entweder um sicherzustellen, dass das Gerät bereit ist, einen E/A-Vorgang zu starten oder einen Vorgang abgeschlossen ist.

Dennoch gibt es einige Geräte, die noch verwendet werden und die für den Betrieb mit alten Prozessoren konzipiert wurden, die schmale Datenbusse, langsame Taktraten und Einzelbenutzer- sowie Einzeltasking-Betriebssysteme hatten, die synchrone E/A-Vorgänge ausführten. Solche Geräte benötigen möglicherweise Abfragen oder andere Möglichkeiten, um darauf zu warten, dass das Gerät seine Register aktualisiert.

Obwohl es logisch erscheinen mag, ein Problem mit einem langsamen Gerät zu lösen, indem man eine einfache Schleife codiert, die einen Zähler erhöht und so ein Mindestintervall verbraucht, während das Gerät seine Register aktualisiert, ist es unwahrscheinlich, dass ein solcher Treiber auf Windows-Plattformen portierbar ist. Der Höchstwert des Schleifenzählers muss für jede Plattform angepasst werden. Wenn der Treiber mit einem guten Optimierungscompiler kompiliert wird, entfernt der Compiler möglicherweise die Zählervariable des Treibers und die Schleifen, in denen sie erhöht wird.

Anmerkung Befolgen Sie diese Implementierungsrichtlinie, wenn der Treiber angehalten werden muss, während die Hardware des Geräts den Zustand aktualisiert: Ein Treiber kann KeStallExecutionProcessor aufrufen, bevor er die Geräteregister liest. Der Treiber sollte das Intervall minimieren, in dem es anhält, und im Allgemeinen ein Anhalteintervall von nicht mehr als 50 Mikrosekunden festlegen.

Die Granularität eines KeStallExecutionProcessor-Intervalls ist ein Mikrosekunden.

Wenn das Gerät häufig mehr als 50 Mikrosekunden zum Aktualisieren des Zustands benötigt, sollten Sie einen gerätededizierten Thread im Treiber einrichten.