PCI и PCI-X — синхронные параллельные шины расширения ввода-вывода, обеспечивающие надежный высокопроизводительный обмен и автоматическое конфигурирование устройств. Шины PCI и PCI-X являются ближайшими «родственниками» с полной взаимной совместимостью устройств. Большинство положений, относящихся к PCI, относится и к PCI-X, так что в дальнейшем описании термин «PCI» в основном относится к обоим вариантам (различия подчеркиваются особо).
Шина PCI позволяет объединять одноранговые устройства. Любое устройство шины может выступать как в роли инициатора транзакций (задатчика), так и в роли целевого устройства. Целевое устройство отвечает на транзакции, адресованные к его ресурсам (областям памяти и портам ввода-вывода). Ядро компьютера (центральный процессор и память) для шины PCI также представляется устройством — главным мостом (host bridge). В транзакциях к устройствам PCI, инициированных центральным процессором, главный мост является задатчиком. В транзакциях от устройств PCI, обращающихся к ядру (к системной памяти), главный мост является целевым устройством. Право на управление шиной в любой момент времени дается лишь одному устройству данной шины; арбитраж запросов на управление шиной осуществляется централизованным способом. Арбитр, как правило, является частью моста.
Наличие активных устройств (помимо ЦП) позволяет в компьютере выполнять параллельно несколько операций обмена: одновременно с обращениями процессора могут выполняться транзакции от мастеров шины PCI. Эта параллельность — PCI Concurrency — возможна лишь для обменов по непересекающимся путям. Одновременный доступ нескольких инициаторов к одному ресурсу (как правило, к системной памяти) требует довольно сложной организации контроллера этого ресурса, но ради повышения суммарной эффективности работы на эти усложнения приходится идти. В системе с несколькими шинами PCI возможно параллельное функционирование устройств-мастеров на разных шинах — PCI Peer Concurrency. Однако если они обращаются к одному ресурсу (системной памяти), то какие-то фазы этих обменов все-таки приходится выполнять последовательно.
Каждая физическая шина PCI позволяет объединять лишь небольшое число устройств (обычно не более шести). Для увеличения числа подключаемых устройств применяют мосты PCI (PCI-to-PCI Bridge) — устройства PCI с парой интерфейсов, которыми шины объединяются в древовидную структуру. В корне этой структуры находится хост — «хозяин шины», в обязанности которого входит конфигурирование всех устройств, включая мосты. В роли хоста, как правило, выступает центральный процессор с главным мостом. Мосты позволяют объединять шины PCI и PCI-X с разными характеристиками, а также подключать к PCI/PCI-X иные шины: (E)ISA, MCA, шины блокнотных ПК, PCI Express, Hyper Transport и др.
Шина PCI/PCI-X имеет несколько вариантов конструктивного оформления, некоторые из них при наличии специального контроллера допускают «горячую» замену устройств:
♦ шина объединения компонентов на печатной плате (системной плате или кар те расширения);
♦ слотовые разъемы для установки карт расширения (в конструктивах PC и МСА);
♦ разъемы для малогабаритных карт расширения (Card Bus, Small PCI, Mini PCI);
♦ модульные конструктивы для промышленных и инструментальных компью теров (CompactPCI, PXI).
Важной частью шины PCI является система автоматического конфигурирования; конфигурирование выполняется каждый раз при включении питания и инициализации системы. Специальное конфигурационное ПО позволяет обнаружить и идентифицировать все установленные устройства, а также выяснить их потребности в ресурсах (областях памяти, адресах ввода-вывода, прерываниях). Спецификация PCI требует от устройств способности перемещать все занимаемые ресурсы (области в пространстве памяти и ввода-вывода) в пределах доступного адресного пространства. Это позволяет обеспечить бесконфликтное распределение ресурсов для множества устройств. Одно и то же функциональное устройство может быть сконфигурировано по-разному, отображая свои операционные регистры либо на пространство памяти, либо на пространство адресов ввода-вывода. Драйвер может определить текущую настройку, прочитав содержимое регистра базового адреса устройства. Драйвер также может определить номер запроса на прерывание, который используется устройством. Для конфигурирования устройств существует специальный набор функций PCI BIOS.