Поделиться через


Общие сведения об операции ожидания и пробуждения

Механизм пробуждения операционной системы работает, как показано на следующем рисунке.

схема, иллюстрирующая общие сведения об обработке irp-mn-wait-wake.

  1. Пока система и устройство находятся в рабочем состоянии, владелец политики питания для устройства определяет, что его устройство должно быть включено ("вооружены") для пробуждения. Владелец политики управления питанием запрашивает IRP питания (PoRequestPowerIrp с незначительным кодом IRP_MN_WAIT_WAKE) для отправки в PDO для информирования всех драйверов в стеке устройств. В запросе владелец политики указывает подпрограмму обратного вызова (не совпадает с процедурой IoCompletion ).

  2. Диспетчер питания через диспетчер ввода-вывода отправляет IRP в верхнюю часть стека устройств.

  3. Водители устанавливают процедуры IoCompletion и передают IRP вниз, пока он не достигнет водителя автобуса.

  4. Водитель шины включает пробуждение на физическом устройстве, если это возможно, и помечает ожидание IRP. При необходимости он также запрашивает IRP ожидания и пробуждения для своего родительского объекта.

  5. Через некоторое время поступает внешний сигнал пробуждения.

  6. Водитель автобуса завершает IRP_MN_WAIT_WAKE.

  7. Диспетчер ввода-вывода вызывает подпрограммы IoCompletion , которые были заданы в качестве драйверов, передаваемых IRP в стеке.

  8. Диспетчер ввода-вывода вызывает подпрограмму обратного вызова, заданную владельцем политики, когда он запрашивает IRP.

Запрос IRP_MN_WAIT_WAKE не изменяет состояние питания устройства или системы. Он просто включает пробуждение на устройстве, чтобы позже, если устройство перейдет в соответствующее состояние спящего режима, внешний сигнал приведет к пробуждению устройства (и, возможно, системы).

При поступлении сигнала пробуждения поведение водителей будет одинаковым, независимо от того, разбудит ли устройство систему или только само. Если устройство включено для пробуждения и система находится в спящем режиме, из которого устройство может его разбудить, устройство разбудит систему. Если устройство включено для пробуждения и система находится в рабочем состоянии, пробуждается только устройство.

Так как компьютеры и устройства различаются по дизайну, особенно в отношении плоскостей питания, поддерживаемые состояния питания системы и устройства , и, следовательно, состояния, поддерживающие ожидание и пробуждение, не совпадают на всех конфигурациях оборудования. Таким образом, любой драйвер, владеющий политикой питания для своего устройства, и каждый водитель шины должны внимательно относиться к возможностям отдельной конфигурации, в которой он работает. Дополнительные сведения см. в разделе Определение того, может ли устройство разбудить систему.

Дополнительные сведения об операциях ожидания и пробуждения см. в разделах Общие сведения о пути irPs ожидания и пробуждения в дереве устройств и Общие сведения о завершении IRP ожидания и пробуждения.