Гук Михаил Юрьевич
Шрифт:
Устройства PCI могут вырабатывать запросы аппаратных прерываний:
• обычных маскируемых – для сигнализации событий в устройстве; эти прерывания могут сигнализироваться как традиционным способом – по специальным сигнальным линиям, так и передачей сообщений (MSI);
• немаскируемых – для сигнализации о серьезных ошибках;
• прерываний системного управления (SMI) – для сигнализации о событиях в системе управления энергопотреблением и некоторых системных целей (например, эмуляции работы стандартного контроллера клавиатуры с помощью устройств USB).
Наиболее эффективно возможности шины PCI используются при применении активных устройств – мастеров шины (PCI Bus Master). Только эти устройства могут обеспечить скорость передачи данных, приближающуюся к декларированной пиковой пропускной способности. Максимальная производительность обменов по шине PCI достигается только в пакетных транзакциях значительной длины. Транзакции по инициативе программы, исполняемой на ЦП, проводимые главным мостом, как правило, являются одиночными (или очень короткими пакетными). По этой причине программно-управляемый обмен данными с устройствами PCI по производительности значительно уступает обмену, выполняемому устройством-мастером. Таким образом, применение активных устройств дает двойной эффект: разгружает центральный процессор и обеспечивает лучшее использование пропускной способности шины.
Шины, устройства, функции и хост
Каждое устройство PCI при установке в конкретную систему получает идентификатор, однозначно определяющий его положение на «дереве» шин PCI данного компьютера. Идентификатор имеет иерархическую структуру и состоит из номера шины (bus), номера устройства (device) и номера функции (function). Идентификатор задает положение блока конфигурационных регистров заданной функции выбранного устройства в общем конфигурационном пространстве данной системы. Идентификаторы фигурируют при обращениях к регистрам конфигурационного пространства (см. главу 5), а также при обмене сообщениями между устройствами (DIM в PCI–X, см. главу 2).
Шина PCI представляет собой набор сигнальных линий (см. главу 6), непосредственно соединяющих интерфейсные выводы группы устройств (слотов, микросхем на плате). В системе может присутствовать несколько шин PCI, соединенных мостами PCI (см. главу 4). Мосты электрически отделяют интерфейсные сигналы одной шины от другой, соединяя шины логически; главный мост соединяет главную шину PCI с хостом (процессором и памятью). Каждая шина имеет свой номер шины (PCI bus number). Шины нумеруются последовательно, начиная от хоста; шина PCI, подключенная к главному мосту, имеет нулевой номер.
Устройством PCI называется микросхема или карта расширения, подключенная к одной из шин PCI и использующая для доступа к конфигурационным регистрам выделенную ей линию IDSEL, принадлежащую этой шине. Устройство может быть многофункциональным, то есть состоять из множества (от 1 до 8) так называемых функций. Каждой функции отводится конфигурационное пространство в 256 байт, в PCI–X оно расширено до 4096 байт. Многофункциональные устройства должны отзываться только на конфигурационные циклы с номерами функций, для которых имеется конфигурационное пространство. При этом функция с номером 0 должна присутствовать обязательно (по результатам обращения к ней определяется присутствие устройства), номера остальных функций назначаются разработчиком устройства произвольно (в диапазоне 1–7). Простые (однофункциональ-ные) устройства, в зависимости от реализации, могут отзываться либо на любой номер функций, либо только на номер функции 0.
Нумерацией и конфигурированием всех устройств PCI занимается хост – «хозяин» шины PCI. Роль хоста, как правило, выполняет центральный процессор, связанный с шиной PCI главным мостом, от которого и начинается нумерация шин. Конфигурирование всех устройств шины возможно только со стороны хоста – в этом заключается его особая роль. Ни с одной из шин PCI ни один задатчик не имеет доступа к конфигурационным регистрам всех устройств PCI, без чего полное конфигурирование недоступно. Даже с нулевой шины PCI задатчику недоступны конфигурационные регистры главного моста, а без доступа к ним невозможно запрограммировать распределение адресов между хостом и устройствами PCI. С других шин PCI возможности доступа к конфигурационным регистрам еще скромнее (см. главу 4).
Конфигурирование выполняется для каждой функции; полный идентификатор функции состоит из трех частей: номера шины, номера устройства и номера функции. Короткая форма идентификатора вида PCI0:1:2 (например, в сообщениях ОС Unix) означает функцию 2 устройства 1, подключенного к главной (0) шине PCI. Диспетчер устройств (конфигурационное ПО) должен оперировать списком всех функций всех устройств, обнаруженных на всех шинах PCI данной системы (компьютера).
В шине PCI принята географическая нумерация – номер устройства определяется местом его подключения. Номер устройства (device number или dev) определяется той линией шины AD, к которой подключена его линия сигнала IDSEL. В соседних слотах PCI, как правило, задействуются соседние номера устройств; их нумерация определяется разработчиком системной платы (или пассивной кросс-платы в промышленных компьютерах). Часто для слотов используются убывающие номера устройств, начиная с 20 или 15. Группы соседних слотов могут подключаться к разным шинам; на каждой шине PCI нумерация устройств независимая (могут быть и устройства с совпадающими номерами dev, но разными номерами шин). Устройства PCI, интегрированные в системную плату, используют ту же систему нумерации. Их номера «запаяны намертво», в то время как номера устройств на картах расширения можно изменять, переставляя их в разные слоты.
Одна карта PCI может содержать только одно устройство шины, к которой она подключается, поскольку ей в слоте выделяется только одна линия IDSEL. Если на карте размещают несколько устройств (например, 4-портовая карта Ethernet), то на ней приходится устанавливать мост – устройство PCI, к которому и обращаются по линии IDSEL, выделенной данной карте. Этот мост организует на карте дополнительную шину PCI, к которой можно подключить множество устройств. Каждое из этих устройств получит свою линию IDSEL, но относящуюся уже к дополнительной шине PCI данной карты.