Гук Михаил Юрьевич
Шрифт:
Каждая физическая шина PCI позволяет объединять лишь небольшое число устройств: типовое ограничение по электрическим спецификациям – не более шести устройств на шине. Для увеличения числа подключаемых устройств применяют мосты PCI (PCI-to-PCI Bridge) – устройства PCI с парой интерфейсов, которыми шины объединяются в древовидную структуру. В корне этой структуры находится хост – «хозяин шины», в обязанности которого входит конфигурирование всех устройств, включая и мосты. В роли хоста, как правило, выступает центральный процессор с главным мостом. Мосты позволяют объединять шины PCI и PCI–X с разными характеристиками, а также подключать к PCI/PCI–X иные шины: (E)ISA, MCA, шины блокнотных ПК, PCI Express, Hyper Transport и другие.
Шина PCI/PCI–X имеет несколько вариантов конструктивного оформления, часть из которых при наличии специального контроллера допускают горячую замену устройств:
• шина объединения компонентов на печатной плате (системной плате или карте расширения);
• слотовые разъемы для установки карт расширения (в конструктивах PC и MCA);
• разъемы для малогабаритных карт расширения (Card Bus, Small PCI, Mini PCI);
• модульные конструктивы для промышленных и инструментальных компьютеров (CompactPCI, PXI).
Важной частью шины PCI является система автоматического конфигурирования; конфигурирование выполняется каждый раз при включении питания и инициализации системы. Специальное конфигурационное ПО позволяет обнаружить и идентифицировать все установленные устройства, а также выяснить их потребности в ресурсах (областях памяти, адресах ввода/вывода, прерываниях). Спецификация PCI требует от устройств способности перемещать все занимаемые ресурсы (области в пространстве памяти и ввода/вывода) в пределах доступного адресного пространства. Это позволяет обеспечить бесконфликтное распределение ресурсов для множества устройств. Одно и то же функциональное устройство может быть сконфигурировано по-разному, отображая свои операционные регистры либо на пространство памяти, либо на пространство адресов ввода/вывода. Драйвер может определить текущую настройку, прочитав содержимое регистра базового адреса устройства. Драйвер также может определить номер запроса на прерывание, который используется устройством. Для поддержки конфигурирования устройств существует специальный набор функций PCI BIOS.
Взаимодействие устройств
С программной точки зрения устройство PCI может иметь следующие компоненты:
• конфигурационные регистры, используемые для идентификации и начального конфигурирования устройства при инициализации системы. Для всех устройств предусмотрен обязательный набор конфигурационных регистров, остальные регистры могут использоваться для текущего управления;
• операционные регистры (необязательные), отображенные на пространство памяти и/или ввода/вывода; эти регистры используются для текущего управления и взаимодействия с устройством;
• локальная память (необязательная), отображенная на выделенные области физических адресов системной памяти;
• источники запросов на прерывания;
• мастер шины, обеспечивающий прямой доступ к системной памяти (DMA) и взаимодействие с другими устройствами.
С устройством PCI, когда оно является целевым, можно взаимодействовать несколькими способами:
• командами обращения к памяти и портам ввода/вывода; эти команды адресуются к областям, выделенным устройству при конфигурировании;
• командами обращения к конфигурационным регистрам; эти команды адресуются по идентификатору – номеру шины, устройства и функции (компонента многофункционального устройства PCI);
• специальными широковещательными сообщениями, передаваемыми для всех устройств выбранной шины;
• командами пересылки сообщений; команды адресуются по идентификатору устройства (эта возможность появилась в PCI–X 2.0);
Для обращений к пространству памяти используется 32-битная или 64-битная адресация, причем разрядность адресации не зависит от разрядности шины. Таким образом, шина позволяет адресовать до 232 (4 Гбайт) или 264 (более 16 тыс. Пбайт) байт памяти. На шине PCI фигурирует физический адрес памяти. Для адресации портов ввода/вывода используется 32-битная адресация; в компьютерах на базе процессоров x86 из них используются только 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).