從 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 裝置屬性設定。 網路適配器 (Class = 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 要求排入佇列。
如需資源重新平衡的詳細資訊,請參閱 停止裝置以重新平衡資源。
這個方法只適用於處理器。 當您將新的記憶體模組新增至硬體分割區時,作系統不會起始全系統資源重新平衡。