Device-Dedicated執行緒
緩慢裝置的驅動程式或很少使用 (的裝置,例如磁片磁碟機控制器) 可以藉由建立裝置專用的系統執行緒來解決許多「等候」問題。 此外,大部分檔案系統驅動程式都會使用系統背景工作執行緒,並提供背景工作執行緒回呼常式。
如果裝置驅動程式有自己的執行緒內容,或是在系統執行緒內容中執行,則裝置專用線程或最高層級驅動程式的背景工作執行緒回呼常式可以同步處理發送器物件上的作業,例如 事件物件 或 旗號物件,在驅動程式裝置延伸模組的共用通訊區域中。 例如,裝置專用線程可以等候共用發送器物件,而執行緒的裝置不在使用中,方法是呼叫 KeWaitForSingleObject 作為信號。 在呼叫裝置驅動程式以執行 I/O 作業 (,此時它會將訊號設定為訊號狀態) ,其等候執行緒不會使用 CPU 時間。
驅動程式可以呼叫 PsCreateSystemThread 來建立驅動程式或裝置專用線程,然後呼叫 KeSetBasePriorityThread 來設定執行緒的基底優先順序。 驅動程式應該指定優先順序值,以避免 SMP 機器中的 執行時間優先順序反轉 。 也就是說,設定驅動程式建立執行緒的基底優先順序太高,可能會建立低優先順序執行緒的執行延遲,以提交該驅動程式的 I/O 要求。
因為執行緒物件本身是發送器物件的類型,所以執行緒可以等候另一個執行緒完成。 若要取得與執行緒相關聯的執行緒物件指標,驅動程式可以呼叫 ObReferenceObjectByHandle,傳入從 PsCreateSystemThread收到的執行緒控制碼。
執行緒可以呼叫 KeDelayExecutionThread 以等候可能是完整時間配量或較長的間隔。 KeDelayExecutionThread間隔的細微性大約是 10 毫秒。 由於 KeDelayExecutionThread 是計時器驅動常式,因此其間隔的細微性會稍快或慢于 10 毫秒,視平臺而定。