除非絕對必要,否則裝置驅動程式應該避免輪詢該裝置,而且不應該使用整個時間片進行輪詢。 對裝置進行輪詢是一項資源密集的操作,會使任何作業系統在輪詢驅動程式中處於計算受限的狀態。 執行大量輪詢的裝置驅動程式會干擾其他裝置上的 I/O 作業,並可能使系統緩慢且無法回應使用者。
最近開發的裝置在技術上與 Windows 設計為執行的處理器一樣先進,很少需要驅動程式輪詢其裝置,以確保裝置已準備好啟動 I/O 作業,或作業已完成。
儘管如此,一些仍在使用的設備被設計為與舊處理器配合使用,這些處理器具有狹窄的數據總線、緩慢的時鐘速率以及執行同步 I/O 的單用戶、單任務操作系統。 這類裝置可能需要輪詢或其他一些方法來等待裝置更新其暫存器。
儘管透過編寫一個遞增計數器的簡單迴圈來解決慢速裝置的問題看似合乎邏輯,因而在裝置更新暫存器時「浪費」最小間隔,但這樣的驅動程式不太可能在 Windows 平臺間具有可移植性。 迴圈計數器上限需要針對每個平台進行自訂。 此外,如果驅動程式是使用優良的最佳化編譯器編譯,編譯器可能會移除驅動程式的計數器變數以及其所在的遞增迴圈。
便條 如果驅動程式必須在裝置硬體更新狀態時停止,請遵循此實作指導方針:驅動程式可以在讀取裝置暫存器之前呼叫 KeStallExecutionProcessor 。 驅動程式應該將停滯的間隔降到最低,而且一般應該指定不超過 50 微秒的停滯間隔。
KeStallExecutionProcessor 間隔的細微度為一微秒。
如果裝置經常需要超過 50 微秒才能更新狀態,請考慮在驅動程式中設定 裝置專用執行緒 。