Общие сведения об уведомлении драйвера
Начиная с Windows Server 2008 операционная система может уведомлять драйвер устройства о динамическом добавлении процессора или модуля памяти в аппаратный раздел. Существует несколько различных уведомлений, которые происходят на разных этапах процесса операции горячего добавления. Каждое из этих уведомлений использует другой метод уведомления для уведомления драйвера устройства о событии. Вы можете использовать один или несколько из этих методов уведомлений, чтобы операционная система уведомила драйвер о выполнении операции горячего добавления. Затем ваш драйвер может реагировать по мере необходимости для безопасной и оптимальной работы.
В следующей таблице указаны различные методы уведомления и их применение к процессорам, памяти или процессорам и памяти.
Метод уведомления | Для процессоров | Для памяти |
---|---|---|
Уведомление синхронного драйвера |
X |
|
Асинхронное уведомление драйвера |
X |
X |
Событие уведомления о памяти |
X |
|
Перебалансирование ресурсов |
X |
Уведомление синхронного драйвера
С помощью уведомления синхронного драйвера операционная система синхронно уведомляет драйверы устройств о добавлении нового процессора в аппаратный раздел. Это первое уведомление, которое получает драйвер устройства об изменении числа процессоров.
При добавлении нового процессора в аппаратный раздел операционная система отправляет это уведомление драйверам устройств после того, как операционная система запустила новый процессор, но до того, как операционная система начнет планирование потоков на процессоре. Когда драйвер устройства получает это уведомление, он может выделить любую структуру данных для каждого процессора и назначить любые другие ресурсы для каждого процессора новому процессору. Это подготавливает драйвер устройства к выполнению подпрограмм диспетчеризации, процедур обслуживания прерываний (ISR), отложенных вызовов процедур (DPCs) и любых других потоков драйвера на новом процессоре.
Драйвер устройства должен зарегистрировать себя в операционной системе для получения синхронного уведомления драйвера. Дополнительные сведения см. в разделе Регистрация для получения уведомлений синхронного драйвера.
Этот метод уведомления применим только к процессорам. Для памяти не существует синхронного механизма уведомления.
Асинхронное уведомление драйвера
С помощью асинхронного уведомления драйвера операционная система асинхронно уведомляет драйверы устройств о добавлении нового процессора или модуля памяти в аппаратный раздел. Начиная с Windows Server 2008 процессоры и модули памяти считаются Plug and Play устройствами (PnP). Поэтому операционная система использует механизм уведомления PnP для асинхронного уведомления драйвера.
При добавлении нового процессора или модуля памяти в аппаратный раздел операционная система отправляет это уведомление драйверам устройств после того, как операционная система запустила новый процессор или устройство памяти. В случае с новым процессором операционная система не отправляет это уведомление драйверам устройств до тех пор, пока она не начнет планирование потоков на новом процессоре.
Примечание
Все уведомления PnP являются асинхронными. Таким образом, эти уведомления могут не получаться драйвером устройства до тех пор, пока операционная система не запустит процессор или модуль памяти.
Когда драйвер устройства получает это уведомление, он может соответствующим образом настроить некоторые или все из следующих элементов:
Буфер памяти и другие выделения ресурсов
Назначение ресурсов определенным обработчикам
Планирование DPC и других потоков на определенных процессорах
Алгоритмы балансировки нагрузки
Важно!
При добавлении нового процессора в аппаратный раздел операционная система не отправляет уведомление PnP до тех пор, пока новый процессор не будет запущен и операционная система не начнет планировать потоки на нем. Если драйвер устройства должен выполнять определенные задачи, прежде чем операционная система начнет планирование потоков на новом процессоре, например выделение структуры данных для каждого процессора, необходимо использовать синхронный метод уведомления для драйвера.
Драйвер устройства должен зарегистрировать себя в операционной системе для получения асинхронных уведомлений драйвера. Дополнительные сведения см. в разделе Регистрация для асинхронного уведомления драйвера.
Событие уведомления о памяти
С помощью метода уведомления о событиях памяти драйвер устройства может запланировать поток, который ожидает, пока операционная система установит объект события \KernelObjects\HighMemoryCondition . Операционная система задает этот объект события, когда объем свободной физической памяти превышает определенное значение. Это событие уведомляет все потоки, ожидающие объекта события, о том, что в настоящее время в системе доступен значительный объем физической памяти. Это событие может указывать на то, что вы динамически добавили в систему новый модуль памяти. Когда операционная система задает этот объект события, драйвер устройства может реагировать на событие, выделяя дополнительные буферы памяти.
Дополнительные сведения об объекте события \KernelObjects\HighMemoryCondition см. в разделе Стандартные объекты событий.
Важно!
Если операционная система задает объект события \KernelObjects\HighMemoryCondition , событие только указывает, что вы могли динамически добавить новый модуль памяти в аппаратный раздел. Существуют и другие ситуации, которые могут привести к тому, что операционная система задала этот объект события. Поэтому, начиная с Windows Server 2008, мы не рекомендуем использовать этот метод уведомлений для драйверов устройств. Вместо этого драйверы устройств должны использовать асинхронный метод уведомления драйвера.
Этот метод применим только к памяти. Соответствующий механизм уведомления для процессоров отсутствует.
Перераспределение ресурсов
Начиная с Windows Server 2008, при добавлении нового процессора в аппаратный раздел операционная система инициирует перерасчет ресурсов всей системы. Будет ли устройство участвовать в такой балансировке ресурсов, определяется параметром свойства устройства DEVPKEY_Device_DHP_Rebalance_Policy для устройства. Поведение по умолчанию для устройств в классе настройки сетевого адаптера (Класс = Net) заключается в том, что они не будут участвовать в перебалансировке ресурсов при динамическом добавлении нового процессора в систему. Поведение по умолчанию для устройств во всех других классах настройки устройств заключается в том, что они будут участвовать в перебалансировании ресурсов при динамическом добавлении нового процессора в систему.
Если устройство является устройством Plug and Play (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) и повторно подключить их к обновленному значению сопоставления процессора. Это позволяет драйверу устройства использовать все текущие активные процессоры в аппаратном разделе, включая любые новые процессоры, для обработки запросов прерываний.
Драйверы устройств должны помещать в очередь все запросы ввода-вывода во время перебалансировки ресурсов.
Дополнительные сведения о перераспределении ресурсов см. в разделе Остановка устройства для перераспределения ресурсов.
Этот метод применим только к процессорам. Операционная система не инициирует повторную балансировку ресурсов на уровне системы при добавлении нового модуля памяти в аппаратный раздел.