Vermeiden von Abfragen von Geräten
Ein Gerätetreiber sollte die Abfrage seines Geräts vermeiden, es sei denn, es ist absolut erforderlich, und sollte niemals einen ganzen Zeitschnitt für die Abfrage verwenden. Das Abfragen eines Geräts ist ein teurer Vorgang, durch den jedes Betriebssystem innerhalb des Abruftreibers computegebunden wird. Ein Gerätetreiber, der viele Abfragen durchführt, beeinträchtigt E/A-Vorgänge auf anderen Geräten und kann dazu führen, dass das System für Benutzer langsam und nicht mehr reagiert.
Kürzlich entwickelte Geräte, die so technologisch fortgeschritten sind wie die Prozessoren, auf denen Windows ausgeführt werden soll, erfordern selten einen Treiber, um sein Gerät abzufragen, entweder, um sicherzustellen, dass das Gerät bereit ist, einen E/A-Vorgang zu starten oder dass ein Vorgang abgeschlossen ist.
Dennoch wurden einige noch verwendete Geräte für die Arbeit mit alten Prozessoren entwickelt, die über enge Datenbusse, langsame Taktraten und Single-User-Single-Tasking-Betriebssysteme mit synchronen E/A-Vorgängen verfügten. Solche Geräte erfordern möglicherweise eine Abfrage oder eine andere Möglichkeit, darauf zu warten, dass das Gerät seine Register aktualisiert.
Obwohl es logisch erscheinen mag, ein Problem mit langsamen Geräten zu lösen, indem eine einfache Schleife codiert wird, die einen Zähler erhöht, wodurch ein Mindestintervall "zu verschwenden" ist, während die Geräteupdates registriert werden, ist es unwahrscheinlich, dass ein solcher Treiber auf Windows-Plattformen portierbar ist. Das Maximale des Schleifenindikators erfordert eine Anpassung für jede Plattform. Wenn der Treiber mit einem guten, optimierenden Compiler kompiliert wird, entfernt der Compiler möglicherweise die Zählervariable des Treibers und die Schleifen, in denen sie inkrementiert werden.
Hinweis Befolgen Sie diese Implementierungsrichtlinie, wenn der Treiber angehalten werden muss, während die Gerätehardware aktualisiert wird: Ein Treiber kann KeStallExecutionProcessor aufrufen, bevor er Geräteregister liest. Der Fahrer sollte das Intervall minimieren, das er angehalten hat, und im Allgemeinen ein Intervall von nicht mehr als 50 Mikrosekunden angeben.
Die Granularität eines KeStallExecutionProcessor-Intervalls beträgt eine Mikrosekunde.
Wenn das Gerät häufig mehr als 50 Mikrosekunden benötigt, um den Zustand zu aktualisieren, sollten Sie einen dedizierten Gerätethread im Treiber einrichten.