“Горячая” замена устройств для Windows 2000
В современных компьютерных системах все большее значение получает технология plug and play (Р&Р). Дальнейшее ее развитие связано с возможностью добавления, удаления и замены устройств ввода-вывода без остановки системы (в так называемом горячем режиме). Чтобы решить эту задачу, необходимо объединить поддержку Р&Р на аппаратном уровне, на уровне интерфейса ввода-вывода и на уровне программного обеспечения (инфраструктуры ввода-вывода в ОС).
Среди наиболее распространенных интерфейсов ввода-вывода следует назвать шину PCI. Технология Р&Р очень подходит к PCI в силу ряда преимуществ ее архитектуры, а именно благодаря наличию конфигурационного пространства. Однако ни спецификация шины PCI, ни основные ее реализации не предусматривают возможностей “горячего” добавления и удаления устройств.
CompactPCI (см. PC Week/RE № 48/97, с. 58) является вариантом шины PCI для промышленных систем, разработанной группой производителей промышленных PCI-компьютеров (PICMG). Шины PCI и CompactPCI электрически совместимы, но отличаются друг от друга механическими параметрами, такими, как тип разъема, форм-фактор платы (Eurocard в CompactPCI, www.picmg.org), наличие защелок. Кроме того, в CompactPCI динамическое добавление и удаление устройств (“горячая” замена, Hot Swap) стандартизовано в спецификации, утвержденной PICMG.
Спецификация охватывает аппаратные и программные требования к функционированию Hot Swap как на устройстве (плате), так и на шине, а также описывает процедуру, которой должен следовать оператор при установке и извлечении платы.
Аппаратные требования предусматривают:
- различную длину разных типов контактов на разъеме шины, благодаря чему напряжение питания на устройство подается раньше всех других сигналов;
- наличие на устройстве синего индикатора, сигнализирующего о готовности платы к извлечению;
- специальную сигнальную линию ENUM# на шине. Она активируется по определенному протоколу при открывании и закрывании нижней защелки на плате.
Программные требования предусматривают специальный регистр управления и состояния Hot Swap (HS_CSR), реализованный в конфигурационном пространстве в списке расширенных возможностей устройства (Extended Capability List). Этот регистр включает в себя следующие однобитовые флаги:
- INS - выставляется при закрывании нижней защелки, когда устройство добавляется в систему;
- EXT - выставляется при открывании нижней защелки, что воспринимается как запрос на извлечение устройства из системы;
- LOO - выставляется программно и управляет состоянием синего индикатора на устройстве;
- EIM - выставляется и сбрасывается программно; будучи выставленным, блокирует активацию сигнала ENUM#, поступающего от данного устройства.
При добавлении устройства оператор должен вставить плату, закрыть нижнюю защелку и дождаться выключения синего индикатора. Индикатор загорается и выключается после нормального завершения аппаратной инициализации устройства. Если синий индикатор не выключается после добавления устройства, то это свидетельствует об аппаратной ошибке при инициализации; такое устройство следует извлечь.
Прежде чем извлечь устройство, оператор должен открыть нижнюю защелку и дождаться включения синего индикатора. Индикатор включается программно, когда устройство с точки зрения ОС готово к извлечению (например, после выгрузки драйвера). ОС может не разрешить извлечение; в этом случае лампочка не загорится и оператор может отменить запрос на извлечение, закрыв защелку.
В настоящее время идет активная работа по развитию спецификации, особенно ее программной части. Ожидается, что в обновленной спецификации в регистре HS_CSR будут определены новые поля, содержащие дополнительную информацию о текущем состоянии устройства.
Синий индикатор на плате CompactPCI
указывает, что она поддерживает Hot Swap
Пакет Hot Swap Kit (HSK), разработанный американской компанией Pigeon Point Systems (www.pigeonpoint.com) в тесном сотрудничестве с отечественным центром программного обеспечения “Аурига” (www.auriga.ru), реализует программную поддержку Hot Swap для CompactPCI в среде Windows 2000. Пакет встраивается в ядро ОС, дополняя его поддержкой plug and play для устройств на шине CompactPCI.
Основные функции этого пакета:
- определение наличия и текущего состояния устройств на шине;
- отслеживание сигнала ENUM#;
- оповещение системы о появлении новых устройств на шине и удалении существующих;
- обработка запроса на извлечение устройства;
- фильтрация потока пакетов ввода-вывода для устройств на шине;
- назначение ресурсов мостам на шине CompactPCI;
- предоставление интерфейса прикладным программам для получения информации о состоянии шины и управления процессом Hot Swap.
Реализацию Hot Swap в Windows 2000 с помощью HSK отличает главным образом совместимость функциональных драйверов устройств. Благодаря основанной на Р&Р модели ввода-вывода в Windows 2000 (которая поддерживает динамическое добавление и удаление устройств) правильно написанный функциональный драйвер для этой ОС поддерживает Hot Swap автоматически; HSK обеспечивает вызов соответствующих функций и посылку соответствующих пакетов ввода-вывода функциональным драйверам при возникновении Hot Swap событий.
Архитектура HSK
Пакет функционирует в режиме ядра Windows 2000 и представляет собой совокупность следующих компонентов - драйверов ввода-вывода:
Драйвер - фильтр шины CompactPCI. Этот драйвер устанавливается как фильтр поверх стандартного драйвера шины PCI (который обслуживает также и шину CompactPCI). Он обеспечивает фильтрацию потока пакетов ввода-вывода для устройств на шине, информирует систему о расширенных возможностях этих устройств (динамическое добавление и удаление), отслеживает текущее состояние устройств с точки зрения системы и назначает устройствам-мостам указанные системным интегратором ресурсы.
Системный драйвер Hot Swap. Этот драйвер осуществляет функции слежения за текущим состоянием шины CompactPCI и устройств на ней. В каждом цикле просмотра драйвер сканирует конфигурационное пространство на шине и обнаруживает появление и исчезновение устройств, а также запросы на их извлечение. Цикл просмотра запускается по сигналу ENUM# или, периодически, по таймеру. Этот драйвер также предоставляет интерфейс для прикладных программ, основанный на функциях управления устройством (IOCTL) и механизме стандартных системных plug and play нотификаций.
Драйвер платформы (драйвер ENUM#). Этот драйвер отвечает за распознавание сигнала ENUM#, чья программная реализация, согласно спецификации, оставлена на усмотрение производителя платформы. Для каждой платформы создается свой драйвер; он взаимодействует с системным Hot Swap драйвером по протоколу, который стандартизован в спецификации PICMG 2.12. Пакет может работать и при отсутствии драйвера платформы, в этом случае цикл просмотра шины в системном драйвере запускается периодически по таймеру.
Драйверы альтернативных HS_CSR. Спецификация допускает, хотя и не приветствует, нестандартные реализации этого регистра для устройств CompactPCI. В этом случае разрабатывается соответствующий драйвер альтернативного HS_CSR. Он отвечает за эмуляцию стандартного регистра на этом устройстве. Драйвер альтернативного HS_CSR взаимодействует с системным Hot Swap драйвером по протоколу, который стандартизован в спецификации PICMG 2.12. Сейчас существует ограниченное количество устройств с нестандартной реализацией регистра; ожидается, что все новые разработки будут использовать регистр HS_CSR стандартным образом и альтернативные способы сойдут на нет.
В настоящее время пакет лицензирован несколькими компаниями - производителями систем, основанных на CompactPCI, для распространения вместе с системами в составе OEM-версий Windows 2000. Среди них Motorola Computers Group, Ziatech, Dialogic. Кроме того, пакет лицензирован фирмой Microsoft для включения в следующую версию ОС Windows NT Embedded.
C автором статьи можно связаться по E-mail: serjio@auriga.ru.