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


Обзор операции ожидания и пробуждения

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

схема, иллюстрирующая общий обзор обработки irp-mn-wait-wake

  1. Хотя система и устройство находятся в рабочем состоянии, управляющий политикой питания для устройства определяет, что его устройство должно быть включено и готово для пробуждения. Владелец политики энергии запрашивает power 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 не изменяет состояние питания устройства или системы. Он просто включает пробуждение на устройстве, чтобы позже, если устройство входит в соответствующее состояние сна, внешний сигнал приведет к пробуждению устройства (и, возможно, системы).

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

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

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