驅動程式通知簡介
從 Windows Server 2008 開始,當處理器或記憶體模組動態新增至硬體磁碟分割時,作業系統可以通知設備磁碟機。 有數個不同的通知發生在熱新增作業程式的不同階段。 每個通知都會使用不同的通知方法來通知設備磁碟機有關事件。 您可以使用其中一或多個通知方法,讓作業系統在發生經常性新增作業時通知您的驅動程式。 然後,您的驅動程式可以視需要回應安全且最佳的作業。
下表識別不同的通知方法,以及它們是否適用于處理器、記憶體或處理器和記憶體。
通知方法 | 適用于處理器 | 針對記憶體 |
---|---|---|
同步驅動程式通知 |
X |
|
非同步驅動程式通知 |
X |
X |
記憶體通知事件 |
X |
|
資源重新平衡 |
X |
同步驅動程式通知
使用 同步驅動程式通知時,作業系統會同步通知設備磁碟機已將新的處理器新增至硬體磁碟分割。 這是設備磁碟機收到有關處理器數目變更的第一個通知。
當新的處理器新增至硬體分割區時,作業系統會在作業系統啟動新的處理器之後,將此通知傳送至設備磁碟機,但在作業系統開始排程處理器上的執行緒之前。 當設備磁碟機收到此通知時,它可以配置每個處理器資料結構的任何一個,並將任何其他每個處理器資源指派給新的處理器。 這會準備設備磁碟機來執行其分派常式、插斷服務常式 (ISR) 、延遲的程式調用 (DPC) ,以及新處理器上的任何其他驅動程式執行緒。
裝置驅動程式必須向作業系統註冊本身,才能接收同步驅動程式通知。 如需詳細資訊,請參閱 註冊同步驅動程式通知。
此通知方法僅適用于處理器。 記憶體沒有同步通知機制。
非同步驅動程式通知
使用 非同步驅動程式通知時,作業系統會以非同步方式通知設備磁碟機,新的處理器或記憶體模組已新增至硬體磁碟分割。 從 Windows Server 2008 開始,處理器和記憶體模組會被視為隨插即用 (PnP) 裝置。 因此,作業系統會使用 PnP 通知機制來通知非同步驅動程式。
當新的處理器或記憶體模組新增至硬體磁碟分割時,作業系統會在作業系統啟動新的處理器或記憶體裝置之後,將此通知傳送至設備磁碟機。 在新處理器的情況下,作業系統在開始在新處理器上排程執行緒之前,不會將此通知傳送到設備磁碟機。
注意
所有 PnP 通知都是非同步。 因此,在作業系統啟動處理器或記憶體模組之後,裝置驅動程式可能不會收到這些通知。
當設備磁碟機收到此通知時,它可以據以調整下列部分或所有專案:
記憶體緩衝區和其他資源配置
將資源指派給特定處理器
排程特定處理器上的 DPC 和其他執行緒
負載平衡演算法
重要
當您將新的處理器新增至硬體分割區時,作業系統不會傳送 PnP 通知,直到新的處理器啟動之後,作業系統才開始排程執行緒。 如果設備磁碟機必須在作業系統開始在新處理器上排程執行緒之前執行某些工作,例如配置每個處理器的資料結構,您必須使用驅動程式的同步通知方法。
裝置驅動程式必須向作業系統註冊本身,才能接收非同步驅動程式通知。 如需詳細資訊,請參閱 註冊非同步驅動程式通知。
記憶體通知事件
使用記憶體通知事件方法,您可以讓裝置驅動程式排程等候作業系統設定 \KernelObjects\HighMemoryCondition 事件物件的執行緒。 當可用實體記憶體數量超過特定值時,作業系統會設定此事件物件。 此事件會通知正在等候事件物件的任何執行緒,這些執行緒目前在系統中有大量的實體記憶體可用。 此事件可能表示您已動態將新的記憶體模組新增至系統。 當作業系統設定此事件物件時,您的設備磁碟機可以配置額外的記憶體緩衝區來回應事件。
如需 \KernelObjects\HighMemoryCondition 事件物件的詳細資訊,請參閱 標準事件物件。
重要
如果作業系統設定 \KernelObjects\HighMemoryCondition 事件物件,事件只會提供您可能已動態新增記憶體模組至硬體分割區的指示。 在某些情況下,可能會導致作業系統設定此事件物件。 因此,從 Windows Server 2008 開始,我們不建議設備磁碟機使用此通知方法。 相反地,設備磁碟機應該使用非同步驅動程式通知方法。
這個方法僅適用于記憶體。 處理器沒有對應的通知機制。
資源重新平衡
從 Windows Server 2008 開始,當您將新的處理器新增至硬體分割區時,作業系統會起始全系統資源重新平衡。 裝置是否會參與這類資源重新平衡,取決於裝置的 DEVPKEY_Device_DHP_Rebalance_Policy 裝置屬性設定。 網路介面卡 (類別 = Net) 裝置安裝類別中的裝置 預設行為是,當新處理器動態新增至系統時,它們將不會參與資源重新平衡。 所有其他裝置安裝類別中裝置的預設行為是,當新處理器動態新增至系統時,它們將參與資源重新平衡。
如果裝置是隨插即用 (PnP) 裝置,且該裝置參與這類資源重新平衡,作業系統會在資源重新平衡作業期間,將IRP_MN_QUERY_STOP_DEVICE、IRP_MN_STOP_DEVICE和IRP_MN_START_DEVICE PnP IRP 傳送至裝置的驅動程式。 這些 PnP 要求會通知驅動程式硬體分割區中發生硬體變更。 裝置驅動程式應該藉由正確處理 IRP_MN_QUERY_STOP_DEVICE 和 IRP_MN_STOP_DEVICE PnP 要求來支援資源重新平衡。 裝置驅動程式絕不應拒絕 IRP_MN_QUERY_STOP_DEVICE PnP 要求。
這些 PnP 要求可讓您在新增處理器之後,讓設備磁碟機完全使用硬體分割區中的一組作用中處理器。 具體來說,支援資源重新平衡的裝置驅動程式會使用資源重新平衡期間收到的 PnP 要求,將插斷服務常式中斷中斷連線 (ISR) ,並使用更新的處理器親和性值重新連接它們。 這可讓設備磁碟機使用硬體分割區中的所有目前作用中處理器,包括任何新的處理器,來處理中斷要求。
設備磁碟機應該在資源重新平衡期間排入所有 I/O 要求佇列。
如需資源重新平衡的詳細資訊,請參閱 停止裝置以重新平衡資源。
這個方法僅適用于處理器。 當您將新的記憶體模組新增至硬體分割區時,作業系統不會起始全系統資源重新平衡。