避免輪詢裝置
除非絕對必要,否則設備磁碟機應該避免輪詢其裝置,而且絕對不應該使用整個時間配量進行輪詢。 輪詢裝置是昂貴的作業,可讓輪詢驅動程式內的任何作業系統計算系結。 執行大量輪詢的裝置驅動程式會干擾其他裝置上的 I/O 作業,而且可能會讓系統變慢且對使用者沒有回應。
最近開發的裝置,其技術上與 Windows 設計用來執行的處理器一樣,很少需要驅動程式輪詢其裝置,以確保裝置已準備好啟動 I/O 作業或作業完成。
不過,某些仍在使用的裝置是設計來搭配舊處理器使用,其具有窄型資料匯流排、慢速時脈速率,以及執行同步 I/O 的單一使用者單一工作作業系統。 這類裝置可能需要輪詢或等候裝置更新其暫存器的其他方法。
雖然撰寫遞增計數器的簡單迴圈來解決緩慢裝置問題的邏輯可能很合理,但藉由在裝置更新註冊時「浪費」最小間隔,這類驅動程式不太可能跨 Windows 平臺移植。 迴圈計數器上限需要針對每個平臺進行自訂。 此外,如果驅動程式是以良好的優化編譯器編譯,編譯器可能會移除驅動程式的計數器變數,而迴圈 (遞增所在的) 迴圈。
注意 如果驅動程式在裝置硬體更新狀態時必須停止,請遵循此實作指導方針:驅動程式可以在讀取裝置暫存器之前呼叫 KeStallExecutionProcessor 。 驅動程式應該將停止的間隔降到最低,而且通常應該指定不超過 50 毫秒的停止間隔。
KeStallExecutionProcessor間隔的細微性是一微秒。
如果裝置經常需要超過 50 毫秒才能更新狀態,請考慮在驅動程式中設定 裝置專用線程 。