Технология ACPI и Windows2000

ACPI. В последнее время эта аббревиатура все чаще и чаще попадается на глаза. Расшифровывается она весьма просто Advanced Computer Management and Interface, но что кроется за этой фразой, для многих остается загадкой. Системам управления питанием простые пользователи традиционно не уделяли особого внимания, руководствуясь мнением, что пара лишних киловатт, сожженных в месяц, не имеют большого значения. Но ACPI не является простым механизмом для экономии пары ватт энергии, его возможности гораздо шире, и при правильном использовании он способен коренным образом изменить пути и принципы взаимодействия пользователя и машины.

Начало истории развития систем управления питанием на ПК можно датировать 1989 годом, когда корпорация Intel выпустила процессор i386SL, в котором впервые была реализована возможность отключения процессора в случае его длительного бездействия. Почти сразу же появились и другие устройства, поддерживающие технологии SL, которые заняли свою нишу на рынке ноутбуков, превратив их в действительно мобильные устройства. Однако, SL работал только на уровне BIOS, без всякого взаимодействия с операционной системой, что приводило к определенным проблемам и неудобствам, главным из которых было невозможность для ОС определить, какие устройства отключены, что приводило к серьезным неприятностям, вплоть до полного зависания системы при попытках ОС обратиться к отключенному устройству.

Конечно же, такая ситуация не могла сохраняться долго, поэтому уже в 1991 Intel совместно с Microsoft разработали стандарт APM (Advanced Power Management), который предусматривал активное участие операционной системы в управлении питанием. Теперь, когда функции управления питанием перестали ограничиваться только BIOS, стало возможным реализовать гораздо более продвинутые алгоритмы управления питанием. Например, с появлением APM стало возможным выключение питания по запросу ОС, что привело к появлению ATX форм-фактора. Кроме этого, стал возможным и обратный процесс, включения питания по запросу. Примером использования такой возможности может служить технология Wake on LAN, разработанная Intel совместно с IBM, которая позволяет включать ПК по сети, просто послав на сетевую карту так называемый "magic packet". Конечно, для этого сетевая карта, материнская плата и BIOS должны поддерживать эту технологию.

Несмотря на впечатляющие возможности, APM не лишен серьезных недостатков. APM способен только включать/выключать питание отдельных устройств или всей системы в целом, его способность гибко реагировать на изменение ситуации ограничена. Кроме этого, при разработке этого стандарта не учитывали темпов развития ПК и появления новых технологий на этом рынке. Например, APM не признает существование многопроцессорных систем, и, соответственно, реализовать поддержку APM на SMP (Symmetrical Multi Processor) машинах очень сложно, если вообще возможно.

Решением этих проблем и логическим развитием APM стало появление в 1997 году ACPI, разработанного совместно компаниями Intel, Toshiba и Microsoft. В настоящее время этот стандарт является последней разработкой в области управления питанием, а сейчас готовится версия 2.0 его спецификации. Так же как и APM, ACPI предполагает широкое участие ОС в управлении питанием системы, но не ограничивается только этим. Кроме управления питанием, ACPI охватывает еще ряд вопросов управления системой. При запуске ACPI совместимой ОС, перехватываются некоторые функции BIOS (такие как APM BIOS, PNPBIOS) и, кроме этого, ACPI интерфейсу передается контроль над следующими функциями.

System Power management - ACPI получает контроль над такими функциями, как выключение системы или перевод ее в sleep mode.

Device Power Management - ACPI контролирует потребление питания всех устройств установленных в системе, он занимается переводом их с одного режима потребления питания на другой, в зависимости от требований ОС, приложений или пользователя.

Processor Power Management - при простаивании системы, ACPI позволяет переводить процессор в энергосберегающий режим и выводить его из этого режима в случае необходимости.

Plug and Play - ACPI берет на себя управление подключением и конфигурированием Plug and Play устройств. Кроме этого, в случае отключения устройства ACPI определяет, какие из оставшихся в системе устройств будут затронуты этим, и переконфигурирует их соответствующим образом.

System Events - ACPI предоставляет глобальный механизм наблюдения за системными событиями: изменение температурной политики, изменение статуса энергопотребления, подсоединение или отсоединение различных устройств и т.д. Кроме этого, ACPI позволяет гибко настраивать, как система должна реагировать на эти события.

Battery Management - эта функция перешла к ACPI от APM систем, она контролирует заряд батарей, рассчитывает, сколько времени система сможет поработать на этом заряде, предупреждает пользователя о необходимости перезарядить батареи. Кроме этого, ACPI требует от батарей поддержки Smart Battery, что позволяет ОС контролировать работу батарей через CMBatt (Control Method Battery) интерфейс.

Thermal Management - кроме контроля питания, ACPI предоставляет возможность контролировать и управлять температурой различных компонентов системы. Для этого используются датчики температуры и так называемые тепловые зоны.

Embedded Controller - ACPI предоставляет стандартный интерфейс для работы с вставленным контроллером. Этот контроллер управляет такими устройствами, как, например, мышь и клавиатура.

System Management Bus Controller - ACPI предоставляет стандартный интерфейс взаимодействия программного и аппаратного обеспечения с SMBus. Что, в свою очередь, позволяет OEM производителям предоставлять возможность ОС использовать особенности их продуктов в полной мере.

Как уже упоминалось, ACPI предоставляет возможность гибко реагировать на изменения в состоянии системы. Но для того чтобы реагировать на состояние системы, необходимо это состояние знать. Поэтому спецификация ACPI охватывает, кроме всего прочего, и устройства, которые позволяют следить за системой.

Для управления и мониторинга системы используются два вида объектов - это sensors (датчики) и watchdogs (если дословно, то сторожевые псы. Что это такое на самом деле, станет ясно из дальнейшего текста).

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

Thermal sensor - датчик температуры, соответственно, температуру он и измеряет.

Fan sensor - датчик вентилятора, или кулера, измеряет скорость вращения вентилятора.

Voltage sensor - датчик напряжения, измеряет напряжение электрического тока.

Конечно же, далеко не полный перечень датчиков, которые используются на ПК, существуют и более экзотические устройства, например Chassis Intrusion Sensor - датчик, позволяющий определить, вскрыт корпус или нет.

Датчики делятся на два вида, числовые и основанные на статусе (status based). Числовой сенсор снимает какое-либо значение (температуру, частоту вращения вентилятора и т.д.) и возвращает числовое значение. Исходя из природы измеряемого значения, такие сенсоры бывают числовыми и аналоговыми. Типичным числовым сенсором является счетчик оборотов вентилятора, который абсолютно точно может сказать, сколько оборотов за определенное время делает вентилятор. Типичным аналоговым сенсором можно назвать датчик температуры, у которого появляются такие понятия, как регулярность снятия значения (для датчиков температуры обычно это 1 секунда), верхний и нижний пределы диапазона измеряемых значений и разрешение, которое сообщает, с какой точностью производятся измерения.

Основанные на статусе сенсоры "видят" состояние устройства и засекают изменение его статуса. К таким сенсорам относится, например, Chassis intrusion sensor, который сигнализирует о вскрытии корпуса. Минимально сенсор, основанный на статусе, может генерить два различных бита (так называемый бинарный сенсор), которые имеют два значения (хорошо/плохо), максимально - до 32. Согласно спецификации, первые 16 битов определяются как стандартные и имеют следующие значения:
0 OK Нормальный рабочий статус
1 Warning Некритичное предупреждение о возможных неполадках.
2 Critical Критический статус.
3 Fatal Фатальный статус, устройство неработоспособно.
4-15 Recerved Зарезервированы для возможного будущего расширения спецификации.
Из оставшихся 16 битов, 15 (16-30) могут быть использованы различными производителями для своих специфических нужд. Последний возможный бит зарезервирован и интерпретируется как неизвестный статус.

ACPI предусматривает использование основанных на статусе числовых сенсоров. Такие устройства определяют статус исходя из показаний числового сенсора, то есть, при превышении значений показываемых числовым сенсором каких-либо границ, меняется статус наблюдаемого устройства. Такие сенсоры также могут генерить 32 различных бита, 16 из которых интерпретируются как стандартные границы, только распределяются они не так, как у простых сенсоров, основанных на статусе.

0 Upper Warning Верхний предел, некритический.
1 Lower Warning Нижний предел, некритический.
2 Upper Critical Верхний предел, критический.
3 Lower Critical Нижний предел, критический.
4 Upper Fatal Верхний предел, фатальный.
5 Lower Fatal Нижний предел, фатальный.
6-15 Reserved Зарезервированная для будущих расширений спецификации.
16-31 Vendor defined Могут быть использованы производителями для своих специфических нужд.
Примером практической реализации подобной технологии может служить технология Smart Doctor, применяемая Asus в своих видеокартах серии Asus6xxx, которая делает выводы о состоянии карты исходя из показаний термодатчика и заранее заданных значений температуры чипа, при которых карта может перестать нормально работать.

Кроме этого, для основанных на статусе числовых сенсоров предусмотрено такое понятие, как допуск (hysteresis), который служит для предотвращения лишних срабатываний сенсора. Допуск всегда отрицательный для верхних пределов и всегда положительный для нижних пределов.

На нижеприведенной схеме можно ознакомиться с принципом его работы:


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

Watchdog - устройства, которые призваны следить за состоянием системы, основываясь на аппаратных таймерах. Такие устройства способны отслеживать зависания системы и обычно распределяются так:

System Initialization Failure Watchdog. Ошибка при инициализации системы.

Это ошибки, которые возникают при инициализации основных компонентов системы, таких как центральный процессор, оперативная память и т.д.

Pre-Os Boot Failure Watchdog. Ошибка при загрузке BIOS. Способен обнаружить и среагировать на ошибки, возникающие в промежутке времени, аппаратное обеспечение компьютера уже инициализировалось и идет подготовка к загрузке ОС.

OS Boot Failure Watchdog. Обнаруживает зависание системы в процессе загрузки операционой системы.

OS Hang Watchdog. Обнаруживает зависания операционной системы.

Shutdown Failure Watchdog. Обнаруживает зависания в процессе выключения системы.

Согласно спецификации, существует 32 варианта, которыми любой из вышеперечисленных watchdog может среагировать на обнаруженные проблемы:

Bit 0 Генерирование предупреждающего сообщения, отправляемого на удаленную систему.
Bit 1 Запись события в Event Log на локальной машине.
Bit 2 Сброс системы.
Bit 3 Выключение питания у системы.
Bit 4 Выключение, потом включение питания у системы.
Bit 5-15 Зарезервированы для следующих расширений спецификации.
Bit 16-30 Могут быть использованы производителями для своих нужд.
Bit 31 Зарезервирован.
Может использоваться еще один класс подобных устройств - Heartbeat Watchdogs. Это устройство регулярно проверяет наличие чего-либо. Например, LAN Presence Heartbeat Watchdog регулярно проверяет наличие сети.

32 возможных значения генерируемых им битов выглядят так:

Bit 0 Генерируется подтверждение наличия наблюдаемого явления.
Bit 1-15 Зарезервированы для последующих расширений спецификации.
Bit 16-30 Могут быть использованы производителями для своих нужд.
Bit 31 Зарезервирован.
Все эти устройства уже давно применялись для мониторинга состояния системы, но с появлением ACPI стало возможно более гибко управлять системой на основе их показаний. Главным инструментом, который для этого используется, является AМL (ACPI Machine Language) и ASL (ACPI Source Language). AML представляет собой машинный язык, а ASL - это его более понятный для человека собрат. На них можно писать скрипты (скрипт, написанный на ASL, компилируется в AML), которые будут управлять системой в зависимости от показаний датчиков и watchdog и управлять датчиками и watchdog в зависимости от состояния системы. Примером подобного взаимодействия могут служить thermal zone (температурные зоны). Температурная зона управляет скоростью вращения вентилятора или режимом работы другого охлаждающего устройства в зависимости от температуры охлаждаемого объекта. В зависимости от типа охлаждающего устройства, температурные зоны делятся на активные и пассивные.

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

Кроме этого, возможности ACPI позволяют пользователю самому задавать температурные и другие режимы, в зависимости от текущих потребностей. Например, если пользователь работает в каком-либо текстовом редакторе и не нуждается в излишней процессорной мощности, он может перевести систему в состояние Silence, при котором выключатся все активные кулеры, понизится напряжение на все ненужные устройства, центральный процессор перейдет на более низкую тактовую частоту и т.д.

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

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

Например, когда в пределах политики температурной зоны уменьшается скорость вращения или вовсе отключается вентилятор, то это может привести к сигналу от fan sensor о недопустимо малой скорости вращения вентилятора. C помощью ASL это можно предотвратить, отключив этот датчик, когда температурная зона потребует снизить частоту вращения вентилятора ниже порогового значения, на которое настроен датчик. И соответственно, датчик снова будет включен, когда потребуется поднять скорость вращения вентилятора.

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

Все датчики и watchdogs общаются с системой через SMBus.

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

Но это все теория, а как дело обстоит с практической реализацией этой самой теории? Несмотря на 3 года, прошедшие с времени появления первой спецификации, нельзя сказать, что большинство ПК поддерживают ее в полной мере.

Для реализации ACPI на конкретной машине обязательно должно выполняться несколько условий. Во-первых, машина должна аппаратно соответствовать всем требованиям, предъявляемым ACPI, она должна иметь набор датчиков и watchdogs, которые работают в соответствии со спецификацией ACPI, и т.д.

Во-вторых, она должна иметь ACPI-совместимый BIOS, через который и будет работать AML. К сожалению, эти требования выполняются далеко не всегда, и наличие в BIOS пункта ACPI Enabled/Disabled абсолютно ничего не гарантирует.

В-третьих, операционная система также должна поддерживать ACPI. Из всех систем, доступных на рынке, наиболее полной интеграцией с ACPI обладает недавно вышедшая Windows 2000.

В-четвертых, устройства, установленные на машине, должны позволять управлять собой через AML и иметь драйверы, которые AML понимают.

В состав Windows 2000 входят два системных ядра, которые специально предназначены для ACPI совместимых машин. Это ACPI Uniprocessor PC и ACPI Multiprocessor PC. Второе зачастую является единственным способом получить на многопроцессорных системах полный набор функций по управлению питанием, в частности, такую удобную функцию, как автоматическое выключение машины. Однако, даже здесь не все так просто. При установке ACPI ядра все остальные устройства в системе подключаются через ACPI, в чем можно легко убедиться, рассортировав их в Device Manager "By Connection".

В связи с этим могут возникнуть некоторые проблемы. В частности, если ваша система все-таки не полностью совместима с ACPI (например, на уровне BIOS), то при установке ACPI ядра система просто откажется загружаться, в любых режимах, в том числе и в Safe Mode, и через заранее сохраненные Hardware Profile. Загрузка остановится сразу же после старта начального загрузчика (он загружается, когда на черном фоне заполняется полоска внизу экрана).

Более того, даже наличие полностью совместимой с ACPI системы не гарантирует загрузку Windows 2000 после смены ядра на ACPI xxxprocessor PC. Причина этого в том, что не все устройства смогут правильно инициализироваться через ACPI ядро или не все из них будут иметь ACPI совместимые драйверы. Результатом этого могут быть самые разнообразные сообщения об ошибках, наиболее частым из которых является "Inaccessible boot device" (недоступен загрузочный диск). Поэтому, прежде чем бросаться менять ядро на ACPI, обеспечьте себе возможность загрузки со старым ядром. И если система пройдет этап начальной загрузки и "умрет" уже после прорисовки цветной картинки, которая сопровождает каждую загрузку Windows 2000, значит с большой долей вероятности система совместима с ACPI. Но чтобы заставить его нормально работать, придется переставлять всю систему. При этом, во время инсталляции обязательно должны быть разрешены ACPI функции в BIOS. В этом случае, система самостоятельно, уже в процессе инсталляции, определит, что система совместима с ACPI и все устройства будут устанавливаться с учетом этого факта.

Для определения степени совместимости вашей системы с ACPI можно воспользоваться тестовыми программами, предлагаемыми Microsoft для этой цели. Найти их можно по адресу: http://www.microsoft.com/hwdev/acpihct.htm.

Если окажется, что ваша система не прошла ни одного из этих тестов, то придется обратиться к производителю материнской платы, часто эта проблема решается прошивкой нового BIOS. К сожалению, далеко не все производители имеют ACPI-совместимые BIOS, а даже когда имеют, это не всегда гарантирует хорошую работу. Например, подобная ситуация сложилась с популярной Abit BP6. Уже довольно давно существовали ACPI-совместимые бета-BIOS, но только в середине апреля вышла официальная версия. Найти его можно по адресу ftp://ftp.abit.com.tw/pub/ bios/, называется он bp6qq.exe. Его использование - это единственная возможность получить поддержку Power Management, в частности, отключение питания по запросу, на этой матери в мультипроцессорном режиме. Однако, при его применении многие пользователи столкнулись с рядом проблем. Во-первых, это постоянная 50% загрузка CPU Usage в ACPI режиме (и это на двухпроцессорной системе!) и, как следствие, постоянно повышенная температура процессоров (в среднем на 15-20 градусов выше, по сравнению с не-ACPI режимом). Только во второй половине мая вышел очередной официальный BIOS для BP6 - BP6_RU.bin, в котором эта проблема решена. К серьезным достоинствам официальных версий BIOS можно отнести только наконец-то нормально заработавшую поддержку технологии OnNow на AbitBP6.

Разработкой и идеологией OnNow занимается Microsoft, и именно ОnNow считается одним из наиболее заметных преимуществ, которые получает пользователь от ACPI. Основная идея, которая лежала при разработке этой системы, проста. Компьютер должен быстро переходить в энергосберегающий режим и так же быстро, без продолжительной процедуры загрузки ОС, из его выходить, по нажатию кнопки, движению мыши, телефонному звонку, обращению по локальной сети, запросу программы, изменению какого-либо из статусов или показаний каких-либо датчиков и т.д. Причем после выхода из энергосберегающего режима пользователь должен получить такое же состояние машины, как и до перехода в этот режим, со всеми открытыми приложениями, документами, готовыми для редактирования на том же месте, на котором была остановлена работа, интернет-браузером открытом на том же сайте, что и в момент перевода системы в спящий режим, и т.д.

Для упорядочения этих процессов с точки зрения OnNow существует три состояния, в котором может пребывать система:

Working - Система в работе, все устройства находятся в нормальном рабочем режиме и доступны немедленно.

Sleeping - Система не работает, потребление энергии сильно снижено, но система может перейти в рабочий режим в очень короткий промежуток времени.

Soft Off - Система не работает, потребление энергии минимально, переход в рабочий режим потребует полного цикла загрузки BIOS и OC.

Конечно же, система должна легко переходить из одного состояния в другое по требованию пользователя, ОС, программного или аппаратного обеспечения. Это должно обеспечить возможность такого взаимодействия человека и машины, которое было невозможно до этого.

Полностью поддерживающая ACPI и OnNow машина способна самостоятельно принимать/отправлять факсы и электронную почту, она способна самостоятельно включаться и реагировать на изменение каких-либо внешних условий, зарегистрированных одним из подключенных к системе датчиков и т.д.

Кроме этого, если человеку необходимо отойти от рабочего места на незначительное время, он может перевести машину в Sleep режим и по возвращению получить полностью рабочую машину, с уже открытыми приложениями и документами, над которыми он работал, за несколько секунд, без длительного ожидания пока система загрузится. Для этого служит функция Stand by, которая становится стандартной для всех современных ОС. Выход из Stand By возможен по нажатию клавиши мыши, по движению мыши, по нажатию кнопки на клавиатуре и еще ряду факторов. Определяется это, как правило, в BIOS, раздел Power options. Переход в Stand by обычно производится выбором соответствующего пункта из меню, появляющегося при выключении машины. Кроме этого, в последнее время появляется все больше корпусов, на которых есть кнопка Sleep, позволяющая вводить/выводить систему в энергосберегающий режим одним нажатием. Однако, далеко не все корпуса обладают подобной функцией, но благодаря гибкости, которую предоставляет ACPI для управления системой, в Windows 2000 возможно запрограммировать кнопку включения питания (которая есть на всех корпусах), чтобы машина переходила в Stand by при нажатии на нее.

Отличием режима hibernate от stand by является полное выключение питания (хотя, на ATX корпусах для действительно полного выключения питания необходимо выключить компьютер из розетки, в противном случае, даже в режиме Power off все равно подается +5V "дежурного" питания на материнскую плату, которое обеспечивает возможность изменения состояния системы под воздействием внешних факторов, режим Soft off), и соответственно, при запуске приходится ждать, пока пройдет почти вся процедура загрузки системы. Полностью проходит процедура загрузки BIOS, но функция загрузки ОС ускорена, в оперативную память загружается сохраненный "снимок", и все. Таким образом, если функция Stand by удобна при кратковременном отлучении от системы, то функция hibernate больше подойдет при долговременном отсутствии, например, в конце рабочего дня. Но при использовании этих функций необходимо помнить, что из hibernate и stand by машина, по умолчанию, загружается, минуя стандартные процедуры идентификации пользователя. Чтобы этого не произошло, следует отметить чекбокс "Promt for password when computer goes off standby." Эта опция работает как для режима Stand by, так и для Hibernate, и не позволяет включить систему, не зарегистрировавшись в ней.

К сожалению, функции управления питанием пока что не являются приоритетом при разработке аппаратного обеспечения и драйверов для настольных ПК (в отличие от мобильных систем), поэтому некоторые, а иногда и все, функции, про которые рассказано в статье, могут не работать на конкретных системах, по самым различным причинам, от некорректного драйвера или BIOS, до полной аппаратной несовместимости с ACPI. Но ситуация постепенно меняется к лучшему, и при разработке новых устройств и драйверов соответствиям требований ACPI уделяется все большее и большее внимание.

Алексей Шашков (lehmen@is.lt)
Подготовил Виталий Шуравко


Компьютерная газета. Статья была опубликована в номере 23 за 2000 год в рубрике hard :: технологии

©1997-2024 Компьютерная газета