С программной точки зрения устройство PCI может иметь следующие компоненты:
♦ конфигурационные регистры, используемые для идентификации и началь ного конфигурирования устройства при инициализации системы (для всех устройств предусмотрен обязательный набор конфигурационных регистров, остальные регистры могут применяться для текущего управления);
♦ операционные регистры (необязательные), отображенные на пространст во памяти или/и ввода-вывода (эти регистры используются для текущего управления и взаимодействия с устройством);
♦ локальная память (необязательная), отображенная на выделенные области физических адресов системной памяти;
♦ источники запросов на прерывания;
♦ мастер шины, обеспечивающий прямой доступ к системной памяти (DMA) и взаимодействие с другими устройствами.
С устройством PCI, когда оно является целевым, можно взаимодействовать несколькими способами:
♦ командами обращения к памяти и портам ввода-вывода] эти команды адре суются к областям, выделенным устройству при конфигурировании;
♦ командами обращения к конфигурационным регистрам] эти команды адресу ются по идентификатору — номеру шины, устройства и функции (компо нентам многофункционального устройства PCI);
♦ специальными широковещательными сообщениями, передаваемыми для всех устройств выбранной шины;
♦ командами пересылки сообщений] команды адресуются по идентификатору устройства (эта возможность появилась в PCI-X 2.0).
Для обращений к пространству памяти используется 32- или 64-битная адресация, причем разрядность адресации не зависит от разрядности шины. Таким образом, шина позволяет адресовать до 232 (4 Гбайт) или 264 (более 1,8 х 1019) байт памяти. На шине PCI фигурирует физический адрес памяти. Для адресации портов ввода-вывода используется 32-битная адресация; в компьютерах на базе процессоров х86 из них задействована только 16 младших битов. В системе адресации ввода-вывода реализована поддержка особенностей, связанных с адресацией портов в PC-совместимых компьютерах с шиной ISA. Для устройств PCI и PCI-X рекомендуется по возможности избегать использования портов ввода-вывода, отображая операционные регистры устройств на пространство памяти (Memory-Mapped I/O).
Конфигурационные регистры устройств PCI расположены в обособленном пространстве адресов (отдельном от пространства адресов памяти и ввода-вывода). Каждому устройству (точнее, каждой функции сложного устройства) выделяется 256-байтный блок конфигурационных регистров; в спецификации PCI-X 2.0 размер блока увеличен до 4096 байт. Частью этого блока является обязательный набор конфигурационных регистров, с помощью которых осуществляются идентификация устройств, их конфигурирование и управление их свойствами. В конфигурационных регистрах, в частности, указываются адреса, отведенные устройству (как целевому), — через них разрешается работа в роли инициатора и целевого устройства; кроме того, через них конфигурируются прерывания. Конфигурационные регистры обеспечивают возможность автоматической настройки всех устройств шины PCI. К этим регистрам система обращается на этапе конфигурирования — переучета обнаруженных устройств, выделения им неперекрывющихся ресурсов (областей памяти и пространства ввода-вывода) и назначения номеров аппаратных прерываний. При дальнейшей регулярной работе взаимодействие прикладного ПО с устройствами осуществляется преимущественно путем обращений по назначенным в процессе конфигурирования адресам памяти и ввода-вывода. Конфигурационные же регистры в регулярной работе используются для системных целей: настройки параметров, описывающих поведение устройства на шине, обработки ошибок, идентификации источника прерываний.
Обращения к регистрам и памяти устройств PCI выполняются командами шины PCI. Команды может подавать любой инициатор — как хост (главный мост) по командам центрального процессора, так и рядовое устройство PCI. Возможность распространения ряда команд зависит от взаимного расположения инициатора и целевого устройства на ветвях дерева шин PCI. Однако хост может безусловно подать любую команду любому устройству PCI. Только хост всегда имеет доступ к конфигурационным регистрам всех устройств (и мостов), поэтому он и должен заниматься конфигурированием. После конфигурирования любое устройство PCI может безусловно обратиться к системной памяти, то есть реализовать прямой доступ к памяти (DMA).
Устройства PCI могут вырабатывать запросы аппаратных прерываний:
♦ обычные маскируемые — для сигнализации событий в устройстве; эти пре рывания могут сигнализироваться как традиционным способом — по специ альным сигнальным линиям, так и передачей сообщений (MSI);
♦ немаскируемые — для сигнализации о серьезных ошибках;
прерывания системного управления (System Management Interrupt, SMI) — для сигнализации о событиях в системе управления энергопотреблением и некоторых системных целей (например, эмуляции работы стандартного контроллера клавиатуры с помощью устройств USB).
Наиболее эффективно возможности шины PCI используются при применении активных устройств — мастеров шины (PCI Bus Master). Только эти устройства могут обеспечить скорость передачи данных, приближающуюся к декларированной пиковой пропускной способности. Максимальная производительность обменов по шине PCI достигается только в пакетных транзакциях значительной длины. Транзакции по инициативе программы, исполняемой на ЦП, проводимые главным мостом, как правило, являются одиночными (или очень короткими пакетными). По этой причине программно-управляемый обмен данными с устройствами PCI по производительности значительно уступает обмену, выполняемому устройством-мастером. Таким образом, применение активных устройств дает двойной эффект: разгружает центральный процессор и обеспечивает лучшее использование пропускной способности шины.