Соединение PCI Express (PCI Express Link) — это пара встречных симплексных каналов, соединяющих два компонента. По этим каналам передаются пакеты, несущие команды и данные транзакций, сообщения и управляющие посылки. Канал может быть образован одной или несколькими линиями передачи сигналов (Lane); применение нескольких линий позволяет увеличивать (масштабировать) пропускную способность канала. В интерфейсе PCI Express с помощью пакетного протокола реализуются все транзакции чтения и записи, используемые в интерфейсе PCI, причем в расщепленном варианте (как в интерфейсе PCI-X). Таким образом, здесь фигурируют запросчик (requester) и исполнитель (completer) транзакции.
В интерфейсе PCI Express рассматриваются четыре пространства:
пространство оперативнойпамяти;
пространство ввода-вывода;
конфигурационное пространство;
пространство сообщений.
Новое (по сравнению с интерфейсом PCI) пространство сообщений (message space) используется для передачи в виде пакетов «внеполосных» сигналов интерфейса PCI: прерываний по линиям INTx, сигналов управления потреблением и т. п. Таким образом реализуются «виртуальные провода».
Порт интерфейса PCI Express содержит передатчик, приемник и узлы, необходимые для сборки-разборки пакетов.
Пример топологии средств ввода-вывода, иллюстрирующий структуру интерфейса PCI Express, приведен на рис. 26.6.
Рис. 26.6. Топология интерфейса PCI Express
Центральным элементом структуры интерфейса является корневой комплекс (root complex), соединяющий иерархию ввода-вывода с центром — процессором (одним или несколькими) и оперативной памятью. Корневой комплекс может иметь один и более портов интерфейса PCI Express, каждый из этих портов определяет свою область (домен) иерархии (hierarchy domain). Каждый домен состоит из одной конечной точки (endpoint) или субиерархии — нескольких конечных точек, связанных коммутаторами. Наличие непосредственных одноранговых коммуникаций между элементами разных доменов обязательным не является, но может иметь место в конкретных реализациях. Для обеспечения прозрачных одноранговых коммуникаций в корневом комплексе должны присутствовать коммутаторы. Возможность взаимодействия процессора с любым устройством любого домена безусловна, как и возможность обращения любого устройства к оперативной памяти. Корневой комплекс должен генерировать запросы к конфигурационному пространству — его роль аналогична главному мосту интерфейса PCI.
Конечная точка — это устройство, способное инициировать или/и исполнять транзакции (обмены) на интерфейсе PCI Express от своего имени или от имени устройства, не являющегося устройством интерфейса PCI Express (например, от имени хост-контролера интерфейса USB). Конечная точка должна быть видима в одной из областей (доменов) иерархии — представлять в нем свои конфигурационные регистры и отвечать как исполнитель на конфигурационные запросы. В качестве механизма сигнализации прерываний все конечные точки используют пространство сообщений MSI. В интерфейсе PCI Express рассматриваются два типа конечных точек: «наследные» (legacy) и новые точки, построенные по идеологии интерфейса PCI Express. К «наследным» точкам имеется ряд послаблений в плане адресации оперативной памяти, перемещаемости ресурсов (из пространства ввода-вывода в пространство оперативной памяти) и некоторых нюансов.
Коммутатор (switch) имеет несколько портов интерфейса PCI Express. Логически он представляет собой несколько виртуальных мостов PCI-PCI, соединяющих порты коммутатора со своей внутренней локальной шиной. Однако тех издержек, которые вносят «настоящие» мосты интерфейса PCI, коммутатор не вносит. Коммутатор передает (транслирует) между портами пакеты всех типов, основываясь на адресной информации, актуальной для пакета данного типа. Арбитраж между портами коммутатора может учитывать виртуальные каналы и, соответственно, взвешенно распределять пропускную способность. Коммутатор не имеет права разбивать пакеты на более мелкие (у мостов интерфейса PCI такое право было).