Udostępnij przez


Unikaj sondowania urządzeń

Sterownik urządzenia powinien unikać sondowania urządzenia, chyba że jest to absolutnie konieczne, i nigdy nie powinien używać całego fragmentu czasu do sondowania. Sondowanie urządzenia to kosztowna operacja, która powoduje, że dowolny system operacyjny uzależnia się od przetwarzania w sterowniku sondowania. Sterownik urządzenia, który wykonuje wiele sondowania, zakłóca operacje we/wy na innych urządzeniach i może spowolnić system i nie odpowiadać użytkownikom.

Ostatnio opracowane urządzenia, które są tak zaawansowane technologicznie, jak procesory, na których system Windows jest przeznaczony do uruchamiania, rzadko wymagają sterownika do sondowania urządzenia, aby upewnić się, że urządzenie jest gotowe do rozpoczęcia operacji we/wy lub że operacja została ukończona.

Niemniej jednak niektóre urządzenia nadal używane zostały zaprojektowane do pracy ze starymi procesorami, które miały wąskie magistrale danych, wolne częstotliwości zegara oraz jednoosobowe, jednozadaniowe systemy operacyjne wykonujące synchroniczne operacje we/wy. Takie urządzenia mogą wymagać sondowania lub innego sposobu oczekiwania na zaktualizowanie rejestrów przez urządzenie.

Chociaż może się wydawać logiczne rozwiązanie problemu z powolnym urządzeniem przez kodowanie prostej pętli, która zwiększa licznik, poświęcając minimalny interwał czasu na aktualizację rejestrów urządzenia, mało prawdopodobne jest, aby taki sterownik był przenośny na różnych platformach Windows. Maksymalny licznik pętli wymaga dostosowania dla każdej platformy. Ponadto, jeśli sterownik jest kompilowany przy użyciu dobrego kompilatora optymalizującego, kompilator może usunąć zmienną licznika sterownika oraz pętle, w których ta zmienna jest zwiększana.

Uwaga Postępuj zgodnie z tymi wytycznymi implementacji, jeśli sterownik musi zatrzymać się, podczas gdy aktualizowany jest stan sprzętu urządzenia: Sterownik może wywołać funkcję KeStallExecutionProcessor przed odczytaniem rejestry urządzeń. Sterownik powinien zminimalizować czas zawieszenia, a generalnie powinien określać czas zwłoki nie dłuższy niż 50 mikrosekund.

Stopień szczegółowości interwału KeStallExecutionProcessor to jedna mikrosekunda.

Jeśli urządzenie często wymaga więcej niż 50 mikrosekund do zaktualizowania stanu, rozważ skonfigurowanie dedykowanego wątku urządzenia w sterowniku.