PCI (Peripheral Component Interconnec)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 00:18, 7 декабря 2018.
PCI (Peripheral Component Interconnec)
Pci-slots.jpg
Пять 5В 32-bit слотов расширения PCI на материнской плате
Разработчик Intel
Дата выпуска 22 June 1992 года; 28 years ago (1992-06-22)
Снято с производства 2004
ЦП 32 or 64 @ 133 MB/s (32-bit на 33 MHz стандартная конфигурация)
266 MB/s (32-bit на 66 MHz или 64-bit на 33 MHz)
533 MB/s (64-bit на 66 MHz)
Предшественник ISA, EISA, MCA, VLB

PCI (Peripheral Component Interconnect) (Межсетевое соединение периферийных компонентов) - это аппаратная шина, используемая для добавления внутренних компонентов в компьютер. Например, плата PCI может быть вставлена ​​в слот PCI на материнской плате, обеспечивая дополнительные порты ввода-вывода на задней панели компьютера.

Архитектура PCI, также известная как «обычная PCI», была разработана Intel и представлена ​​в 1992 году. Многие настольные ПК с начала 1990-х до середины 2000-х годов имели место для двух-пяти карт PCI. Каждой карте требовалось открыть слот на материнской плате и съемную панель на задней панели системного блока. Добавление PCI-карт было простым способом обновления компьютера, поскольку вы могли добавить лучшую видеокарту, более быструю проводную или беспроводную сеть или добавить новые порты, такие как USB 2.0.

Исходный 32-разрядный стандарт PCI стандарта 33 МГц поддерживает скорость передачи данных 133 мегабайта в секунду. Обновленный 64-разрядный стандарт 66 МГц был создан несколько лет спустя и позволил значительно ускорить передачу данных до 533 МГц. В 1998 году IBM, HP и Compaq представили PCI-X (или «PCI eXtended»), который был обратно совместим с PCI. Интерфейс PCI-X 133 МГц поддерживает скорость передачи данных до 1064 МГц.

PCI и PCI-X были заменены PCI Express, который был представлен в 2004 году.[Источник 1]

История

Корпорация Intel начала работу над интерфейсом периферийных компонентов или PCI в 1990 году. 22 июня 1992 года PCI 1.0 был представлен в компьютерном мире. PCI 1.0 был только спецификацией на уровне компонентов. PCI 2.0, выпущенный в следующем году, был первым, кто установил стандарты для разъема и разъема материнской платы. PCI был реализован на серверах, и в итоге он заменил MCA и EISA и стал шиной расширения сервера.

Тем не менее, PCI потребовалось некоторое время, чтобы заменить VESA Local Bus, широко известную как VLB; также потребовалось некоторое время, чтобы стать базовым стандартом шины ввода-вывода на компьютерах второго поколения Pentium. К 1996 году VESA Local Bus перестал существовать, и PCI был принят почти всеми производителями даже на 486 компьютерах. Но EISA пережила немного дольше, до 2000 года. PCI был также принят Apple Computer для своих профессиональных компьютеров Power Macintosh в середине 1995 года. Потребительская линейка продуктов Performa также приняла PCI в середине 1996 года, заменив LC PDS.

PCI добавила несколько новых функций и улучшений производительности в своих последних версиях. Это включает в себя 66 МГц 3,3 В и 133 МГц PCI-X. Другим улучшением является адаптация сигнализации PCI к другим форм-факторам. Последовательный стандарт PCI Express, представленный в 2004 году, является последним выпуском на компьютерном рынке и получил хорошие результаты.[Источник 2]

Принцип работы

Рисунок 1 - Aрхитектура PC с шиной PCI

Шина обладает процессоро-независимостью (в отличие от VLbus) и может работать параллельно с шиной процессора, не обращаясь к ней за запросами. Например, процессор работает с кэшем или системной памятью, а в это время по сети на ЖД производится запись информации, тем самым загрузка шины процессора значительно снижается. Кроме того, стандарт шины был объявлен открытым и передан PCI Special Interest Group, которая продолжила работу по совершенствованию шины (в настоящее время доступен R2.1).

Основные возможности

Рисунок 2 - Разъемы

Синхронный 32-х или 64-х разрядный обмен данными (однако 64-разрядная шина в настоящее время используется только в Alpha-системах и серверах на базе процессоров Intel Xeon). При этом для уменьшения числа контактов (и стоимости) используется мультиплексирование, то есть адрес и данные передаются по одним и тем же линиям.

Поддержка 5V и 3.3V логики. Разъемы для 5 и 3.3V плат различаются расположением ключей.

Разъемы

Существуют и универсальные платы, поддерживающие оба напряжения. Заметим, что частота 66MHz поддерживается только 3.3V логикой. Частота работы шины 33MHz или 66MHz (в версии 2.1) позволяет обеспечить широкий диапазон пропускных способностей (с использованием пакетного режима):

  • 132 МВ/сек при 32-bit/33MHz;
  • 264 MB/сек при 32-bit/66MHz;
  • 264 MB/сек при 64-bit/33MHz;
  • 528 МВ/сек при 64-bit/66MHz.

При этом для работы шины на частоте 66MHz необходимо, чтобы все периферийные устройства работали на этой частоте.

Полная поддержка multiply bus master (например, несколько контроллеров жестких дисков могут одновременно работать на шине).

Поддержка write-back и write-through кэша.

Автоматическое конфигурирование карт расширения при включении питания.

Спецификация шины позволяет комбинировать до восьми функций на одной карте (например, видео + звук и т.д.).

Шина позволяет устанавливать до 4 слотов расширения, однако возможно использование моста PCI-PCI для увеличения количества карт расширения.

PCI-устройства оборудованы таймером, который используется для определения максимального промежутка времени, в течении которого устройство может занимать шину.

При разработке шины в ее архитектуру были заложены передовые технические решения, позволяющие повысить пропускную способность.

Шина поддерживает метод передачи данных, называемый "linear burst" (метод линейных пакетов). Этот метод предполагает, что пакет информации считывается (или записывается) "одним куском", то есть адрес автоматически увеличивается для следующего байта. Естественным образом при этом увеличивается скорость передачи собственно данных за счет уменьшения числа передаваемых адресов.

Шина PCI является той черепахой, на которой стоят слоны, поддерживающие "Землю" — архитектуру Microsoft/Intel Plug and Play (PnP) PC architecture. Спецификация шины PCI определяет три типа ресурсов: два обычных (диапазон памяти и диапазон ввода/вывода, как их называет компания Microsoft) и configuration space — "конфигурационное пространство".

Рисунок 3 - Конфигурационное пространство

Конфигурационное пространство состоит из трех регионов(см. рис. 3):

  • заголовка, независимого от устройства (device-independent header region);
  • региона, определяемого типом устройства (header-type region);
  • региона, определяемого пользователем (user-defined region).

В заголовке содержится информация о производителе и типе устройства — поле Class Code (сетевой адаптер, контроллер диска, мультимедиа и т.д.) и прочая служебная информация.

Следующий регион содержит регистры диапазонов памяти и ввода/вывода, которые позволяют динамически выделять устройству область системной памяти и адресного пространства. В зависимости от реализации системы конфигурация устройств производится либо BIOS (при выполнении POST — power-on self test), либо программно. Базовый регистр expansion ROM аналогично позволяет отображать ROM устройства в системную память. Поле CIS (Card Information Structure) pointer используется картами cardbus (PCMCIA R3.0). С Subsystem vendor/Subsystem ID все понятно, а последние 4 байта региона используются для определения прерывания и времени запроса/владения.[Источник 3]

Архитектура

Адресные пространства

ЦП и устройства PCI должны иметь доступ к памяти, которая совместно используется между ними. Эта память используется драйверами устройств для управления устройствами PCI и для передачи информации между ними. Обычно разделяемая память содержит регистры управления и состояния для устройства. Эти регистры используются для управления устройством и считывания его состояния. Например, драйвер устройства PCI SCSI должен был прочитать свой регистр состояния, чтобы узнать, было ли устройство SCSI готово записать блок данных на диск SCSI. Или он может записать в регистр управления, чтобы запустить устройство после его включения.

Системная память ЦП может использоваться для этой общей памяти, но если это так, то каждый раз, когда устройство PCI получает доступ к памяти, CPU должен останавливаться, ожидая завершения работы устройства PCI. Доступ к памяти обычно ограничен одним системным компонентом за раз. Это замедлит работу системы. Также не рекомендуется позволять периферийным устройствам системы получать доступ к основной памяти неконтролируемым образом. Это было бы очень опасно; устройство-изгои может сделать систему очень неустойчивой.

Периферийные устройства имеют свои собственные пространства памяти. ЦП может получить доступ к этим пространствам, но доступ к устройствам в память системы очень строго контролируется с использованием каналов DMA (прямой доступ к памяти). У устройств ISA есть доступ к двум адресным пространствам, ISA I / O (вход / выход) и ISA-памяти. PCI имеет три; PCI I / O, PCI Memory и PCI Configuration.

Процессор Alpha AXP не имеет естественного доступа к адресным пространствам, отличным от адресного пространства системы. Он использует чипсеты поддержки для доступа к другим адресным пространствам, таким как пространство конфигурации PCI. Он использует схему разреженного адреса, которая крадет часть большого виртуального адресного пространства и сопоставляет ее с адресными пространствами PCI.

Структура передаваемой информации

Каждое PCI-устройство в системе, включая мосты PCI-PCI, имеет структуру данных конфигурации, которая находится где-то в адресном пространстве конфигурации PCI. Заголовок конфигурации PCI позволяет системе идентифицировать и управлять устройством. Точно там, где заголовок находится в адресном пространстве конфигурации PCI, зависит от того, где в топологии PCI это устройство. Например, видеокарта PCI, подключенная к одному слоту PCI на материнской плате ПК, будет иметь свой заголовок конфигурации в одном месте, и если он подключен к другому слоту PCI, его заголовок появится в другом месте в конфигурационной памяти PCI. Это не имеет значения, поскольку везде, где находятся устройства и мосты PCI, система найдет и настроит их, используя регистры состояния и конфигурации в своих конфигурационных заголовках.

Как правило, системы разработаны таким образом, что каждый слот PCI имеет свой PCI Configuration Header в смещении, относящемся к его слоту на плате. Так, например, первый слот на плате может иметь свою конфигурацию PCI со смещением 0 и вторым слотом со смещением 256 (все заголовки имеют одинаковую длину, 256 байтов) и так далее. Системный аппаратный механизм определен таким образом, что код конфигурации PCI может попытаться изучить все возможные заголовки конфигурации PCI для данной шины PCI и узнать, какие устройства присутствуют и какие устройства отсутствуют, просто попытавшись прочитать одно из полей заголовка (обычно поле идентификации поставщика) и получение какой-либо ошибки. В описании описывается одно возможное сообщение об ошибке, возвращающее 0xFFFFFFFF при попытке прочитать поля идентификации идентификации и идентификации устройства для свободного слота PCI.

Идентификация поставщика Уникальный номер, описывающий создателя устройства PCI. Цифровая идентификация поставщика PCI - 0x1011, а у Intel - 0x8086.
Идентификация устройства Уникальный номер, описывающий само устройство. Например, устройство быстрого доступа Ethernet 21141 Digital имеет идентификатор устройства 0x0009.
Статус Это поле дает статус устройства со значением бит этого поля, установленным стандартом.
Команда При записи в это поле система управляет устройством, например, позволяя устройству получать доступ к памяти PCI I/O
Код класса Это определяет тип устройства, которым это является. Существуют стандартные классы для всех типов устройств; видео, SCSI и т. д. Код класса для SCSI равен 0x0100.
Регистры базового адреса Эти регистры используются для определения и распределения типа, количества и местоположения PCI I/O и памяти PCI, которые устройство может использовать.
Вывод прерывания Четыре физических контакта на плате PCI несут прерывания от платы до шины PCI. Стандартные метки обозначают их как A, B, C и D. Поле Pin прерывания описывает, какой из этих контактов этот PCI-устройство использует. Как правило, он предназначен для устройства с парификатором. То есть, каждый раз, когда система загружается, устройство использует один и тот же вывод прерывания. Эта информация позволяет подсистеме обработки прерываний управлять прерываниями с этого устройства.
Линия прерывания Поле Interrupt Line заголовка PCI Configuration устройства используется для передачи дескриптора прерывания между кодом инициализации PCI, драйвером устройства и подсистемой обработки прерываний операционной системы. Число, написанное там, не имеет смысла для драйвера устройства, но позволяет обработчику прерываний правильно маршрутизировать прерывание с устройства PCI на правильный код обработки прерываний драйвера устройства в операционной системе.

Инициализация

Код инициализации PCI можно разбить на три логические части:

  • Драйвер устройства PCI. Этот драйвер псевдо-устройства выполняет поиск в системе PCI, начиная с шины 0, и находит все устройства PCI и мосты в системе. Он создает связанный список структур данных, описывающих топологию системы. Кроме того, он отображает все найденные мосты.
  • PCI BIOS. Это программный уровень, который должен предоставлять различные услуги, необходимые для pci. Это снова зависит от операционной системы и отличается от всех остальных

Операционная система.

  • PCI Fixup. Код исправления, специфичный для системы, отображает системные специфические свободные окончания инициализации PCI.

Драйвер устройства PCI

Драйвер устройства PCI на самом деле не является драйвером устройства, а функцией операционной системы, вызываемой при инициализации системы. Код инициализации PCI должен сканировать все шины PCI в системе, которые ищут все устройства PCI в системе (включая мостовые устройства PCI-PCI).

Он использует код PCI BIOS, чтобы выяснить, занят ли каждый слот в текущей шине PCI, которую он сканирует. Если слот PCI занят, он создает структуру данных pci_dev, описывающую устройство, и ссылки в список известных устройств PCI (на которые указывают pci_devices).

Код инициализации PCI начинается с сканирования PCI-шины 0. Он пытается прочитать поля идентификации идентификации и идентификации устройства для каждого возможного устройства PCI в каждом возможном слоте PCI. Когда он находит занятый слот, он создает структуру данных pci_dev, описывающую устройство. Все структуры данных pci_dev, созданные кодом инициализации PCI (включая все PCI-PCI Bridges), связаны в односвязный список; pci_devices.

Если PCI-устройство, которое было найдено, было мостом PCI-PCI, то структура данных pci_bus построена и связана с деревом структур данных pci_bus и pci_dev, на которые указывает pci_root. Код инициализации PCI может определить, является ли PCI-устройство PCI-PCI Bridge, поскольку он имеет код класса 0x060400. Затем ядро ​​конфигурирует PCI-шину на другой (ниже по потоку) стороне PCI-PCI Bridge, которую он только что нашел. Если будет найдено больше PCI-PCI Bridges, они также будут настроены. Этот процесс известен как алгоритм глубины; топология PCI системы полностью отображается в глубину перед поиском по ширине. Когда операционная система ищет шины PCI по нисходящей линии связи, она также должна настраивать промежуточные и подчиненные шины шины PCI-PCI.[Источник 4]

Источники

  1. PCI // TechTerms [2018]. Дата изменения: 25.06.2018. URL: https://techterms.com/definition/pci (Дата обращения: 03.10.2018).
  2. PCI (Peripheral Component Interconnect) // Tech-FAQ [2018]. Дата изменения: 04.10.2016. URL: http://www.tech-faq.com/pci.html (Дата обращения: 03.10.2018).
  3. Шина PCI (Peripheral Component Interconnect bus) // iXBT [1997–2018]. Дата изменения: 21.10.1998. URL: https://www.ixbt.com/mainboard/pci.html (Дата обращения: 03.10.2018).
  4. Peripheral Component Interconnect // The Linux Kernel [2018]. Дата изменения: 01.01.2018. URL: http://www.tldp.org/LDP/tlk/ (Дата обращения: 07.12.2018).