Информация о версии Управления питанием Набора I/O
Содержание:
Управление главой питания
См. недавно переписанную Управляющую главу Питания в Основных принципах IOKit - она документирует много ранее недокументированных управлений питанием IOService API’s и способы поведения.
Функциональные изменения ядра
В Leopard реализация ядра управления питанием драйвера была пересмотрена и переписана. Поточная обработка, блокируя и синхронизируя семантику была изменена для более устойчивого, стабильного, и предсказуемого поведения.
Это означает, что Ваше питание управляло, драйвер устройства Набора I/O будет иметь различную поточную обработку и блокировку взаимодействий с управлением питанием. Несмотря на то, что изменения делают для более непротиворечивой и применимой системы управления питанием, код драйвера, хорошо работавший в Тайгере, может неожиданно вести себя в Leopard.
Вызовы в Управление питанием ядра являются теперь асинхронными
Все вызовы API PM IOService просто ставят в очередь работу, которая будет сделана для дальнейшей обработки, и сразу возвратится.
Например, по вызову
IOService::changePowerStateTo, драйвер должен ожидать завершения вызова прежде, чем принять любые меры (как попытка к регистрам устройства доступа или связаться с устройством, прежде чем это включилось). Драйверы должны ожидать следующегоIOService::setPowerStateвызовите, который указывает, что управление питанием фактически изменило состояние устройства.Вызовы от ядра PM в драйверы являются теперь «чистыми»
Любое управление питанием места вызовет в драйвер, а именно,
IOService::setPowerState,IOService::powerStateWillChangeTo, илиIOService::powerStateDidChangeTo, теперь выполняется на недавно создаваемом потоке.Не получайте доступ к задействованной переменной IOService pm_vars
pm_varsпеременная осуждается в Leopard. Наиболее распространенная причина использовать его состояла в том, чтобы проверить Ваше водительское текущее состояние электропитания - вызовитеIOService::getPowerStateвместо этого.
Новый драйвер API
IOService:: systemWillShutdown
Любое питание управляло, драйвер IOService может получить a
kIOMessageSystemWillRestartилиkIOMessageSystemWillShutdownуведомление, что система закрывает или перезапускает и принимает соответствующие меры.Уведомления завершения работы поставлены в дочернем первом плоском порядке IOPower. Завершения работы поставлены после того, как все пользовательские процессы были завершены и после того, как были размонтированы все файловые системы. Если Ваши аппаратные средства не имеют никакого физического состояния для сохранения (как дисковое сбрасывание драйвера кэши к диску), Вы, вероятно, не должны работать во время завершения работы.
Используйте усмотрение, поскольку любое ненужное использование этого API может вызвать замедление на завершении работы или перезапуск. Для отладки OS X сообщает об измерениях времени на драйвер через FireWire kprintf с
boot-args="debug=0x14e io=0x880". Посмотрите FireWire SDK 24 для подробных данных о журналировании kprintf.IOService:: getPowerState
Возвращает текущее состояние электропитания устройства (т.е. возвращает целочисленный индекс в массив состояния электропитания устройства. «Текущее состояние электропитания устройства» обновляется в конце каждого перехода состояния электропитания.
Новое приложение API
Активно предотвратите Системный Сон Сна и Дисплея
IOPMAssertionCreateиIOPMAssertionReleaseпозвольте процессу утверждатьkIOPMAssertionTypeNoDisplaySleepилиkIOPMAssertionTypeNoIdleSleep. Пока предотвращение сна или утверждение предотвращения сна дисплея активны, система не будет бездействовать сон или отображать сон, соответственно.Предотвращение неактивного сна с IOPMAssertion намного более просто, чем существующий метод использования
IORegisterForSystemPower.Создание утверждения только требует одного вызова в начале любых действий, которые должны предотвратить сон (делающий резервное копирование, начиная долгое вычисление), или это должно предотвратить сон дисплея (проигрывающий фильм или слайд-шоу).
Утверждения должны быть выпущены с
IOPMAssertionRelease. Когда процесс выйдет, умрет, или катастрофические отказы, Однако, даже если не должным образом выпущенный, будут автоматически выпущены утверждения. Разрушенный процесс не предотвратит неактивный сон неопределенно.Инструмент командной строки
pmset -gобеспечивает отслеживаемость путем перечисления всех выдающихся утверждений, влияющих на Системный Сон или Сон Дисплея.Ни этот API, ни любой другой API не позволяют приложению предотвращать вызванный системный сон (например, крышка близкий сон, сон Меню Apple, тепловой чрезвычайный сон или сон низкого уровня заряда).
Copyright © 2015 Apple Inc Все права защищены. Условия использования | Политика конфиденциальности | обновленный: 31.10.2007