Что такое PCI Express. Примеры PCI Express устройств

В рамках данной статьи будут рассмотрены наиболее распространенные на сегодняшний день PCI-устройства. Что этотакое, и когда без него не обойтись - ключевые вопросы этого материала. Хотя данный стандарт постепенно уходит в прошлое, но все равно он будет актуальным еще достаточно долгое время. Его, по существу, можно считать прародителем самых современных интерфейсов ЮСБ и PCI-Express, которые пришли ему на смену.

Характеристики шины

Перед тем как получим ответ на вопрос: «PCI-устройства: что это такое и где они используются?», рассмотрим характеристики данной шины. Свое победоносное шествие этот стандарт начал в 1991 году. Первым процессором, который мог с ним полноценно функционировать, был 80486. Чуть позже появились первые «Пентиумы», еще больше раскрывшие его потенциал. Физически за этой аббревиатурой скрывается группа разъемов, распаянных на материнской плате. За организацию их работы отвечает одна из микросхем, установленных на ней. Характеристики у PCI следующие:

  • Разрядность - 32/64 бита.
  • Частота работы - 33 или 66 МГц.
  • Максимальная - 500 Мбайт/с (для 64 бит версии PCI 2.0).
  • Напряжение питания - 3,3 В (для 32 бит) или 5 В (для 64 бит).

Еще один важный нюанс, который предопределил будущее этого стандарта. «Интел» сделала его «открытым». То есть каждый разработчик мог при желании разработать любую плату расширения, которая без проблем работала бы с этим стандартом.

Какие устройства могут быть установлены

В слот расширения PCI могут быть установлены различные устройства. Среди них можно выделить:

  • Графический адаптер.
  • Звуковую карту.
  • Тюнер.
  • Плату расширения.
  • Сетевую карту.

Это список можно продолжать до бесконечности. По существу - это полный аналог современной шины ЮСБ, но только с более низкой скоростью передачи данных. Даже драйвер PCI-устройств инсталлируется аналогичным образом. Многие идеи, которые были реализованы в этой устаревшей шине, получили дальнейшее развитие в более современных стандартах. оказала очень большое влияние на дальнейшее развитие компьютерной техники.

Графические адаптеры

Для вывода графического изображения использовалась PCI-видеокарта. В свое время это позволило значительно увеличить производительность компьютерных систем и полностью раскрыть потенциал процессоров 80486 и первых «Пентиумов».

Но время не стоит на месте. То, что тогда стало революционным решением, на сегодняшний день устарело как морально, так и физически. До 1997 года у таких графических ускорителей не было аналогов. Поэтому их можно было встретить на каждом персональном компьютере. И лишь только с появлением на материнской плате такие адаптеры уступили новым графическим решениям пальму первенства по производительности.

Сейчас PCI-видеокарта - большая редкость. Ее можно встретить только на очень старых персональных компьютерах. Можно сказать, что это уже анахронизм. Их производительности достаточно только для решения наиболее простых задач - набора текста, работы с и просмотра картинок. А вот с более сложными приложениями обязательно возникнут проблемы, и в таком случае их лучше не запускать.

Звуковая плата

Звуковая плата - это тоже одна из разновидностей PCI-устройства. Что этотакое? Ответ на этот вопрос достаточно прост. До 1997 года на материнских платах не было интегрированных звуковых адаптеров. Поэтому для организации акустической системы использовались именно такие приспособления. С одной стороны такая плата оснащалась «классическим» разъемом для установки в слот расширения. Интерфейсная ее панель выводилась на тыльную сторону системного блока.

Для фиксации внутри компьютера использовался один болт. Качество звучания их оставляло желать лучшего. Но все равно это был прорыв, который нельзя недооценивать. Именно установка таких устройств позволяла раньше любой компьютер превратить в настоящий мультимедийный центр. Можно было на такой ЭВМ и музыку послушать, и фильм посмотреть, и в игру поиграть.

Тюнеры

Еще один важный тип устройств для данной шины - это тюнер. Такой PCI-контроллер позволяет просматривать телевизионные передачи и прослушивать радио. Для обеспечения работоспособности такой платы к ней нужно в обязательном порядке подключить внешнюю антенну. Иначе качество принимаемого сигнала будет далеким от идеала.

Кроме того, в комплекте с тюнером в обязательном порядке шел пуль дистанционного управления. Это позволяло превратить компьютер в настоящий телевизор. Большого распространения подобная практика не получила, но все равно бывали случаи, когда без такого ноу-хау было не обойтись. Например, занятому человеку такое решение позволяло постоянно быть в курсе событий.

Модем

Важный атрибут старых компьютеров - это модем. С его помощью можно было раньше подключаться к Интернету. Большая часть таких устройств была внутреннего исполнения, то есть устанавливалась в слот PCI. Сейчас их с этого сегмента благополучно вытеснили Хотя еще остались сферы, где им нет альтернативы. Одна из них - это система «Клиент-Банк», которая часто встречается в бухгалтерии. С ее помощью бухгалтер может контролировать состояние счетов компании и при необходимости делать платежи.

Плата расширения

Нередко в можно встретить следующее устройство: «PCI контроллер simple communications». За этим словосочетанием скрывается плата расширения. Она позволяет увеличить количество портов для подключения или жестких дисков. То есть подобное приспособление устанавливается в слот расширения материнской платы, а с внешней стороны оно оснащено разъемами ЮСБ, КОМ или ЛПТ. Лет 5 назад это позволяло существенно увеличить количество подключенных периферийных устройств. Сейчас же количество портов на материнской плате выросло в разы, и потребность в установке подобных контроллеров просто отпала.

Итоги

В данном материале был дан ответ на вопрос: «PCI-устройства - что это такое и где они используются?»

Как видим, это достаточно широкая гамма устройств, которая позволяет превратить ваш компьютер в настоящий центр для развлечений. По крайней мере, это утверждение было справедливо до недавних пор. Сейчас ситуация немного изменилась. Все больше компонентов интегрируются непосредственно в сам процессор или на материнскую плату. Поэтому и потребность в них отпадает. Можно встретить и прочее устройство моста PCI, например, сетевая карточка, которая позволяет объединить компьютеры в локальную вычислительную сеть. Единственное устройство, которое пока не имеет достойной альтернативы, - это тюнер для приема телепередач и прослушивания радио. Но уже и в этом сегменте начали появляться компактные ЮСБ-аналоги. В общем, стандарт PCI постепенно уходит в прошлое, но он все равно будет продолжительное время присутствовать на рынке.

MEMR# (MRDC#) - чтение памяти в любой области до 16 Мбайт.

OWS# (SRDY#, NOWS#, ENDXFR) - укорочение текущего цикла по инициативе адресованного устройства.

MASTER* (MASTER 16#) - запрос от устройства, использующего 16-битный канал DMA на управление шиной. При получении подтверждения DACK Bus-Master может захватить шину.

В шине EISA на дополнительных контактах слотов (недоступных картам ISA) располагается расширение шин данных и адреса до 32 бит, а также набор сигналов, обеспечивающих передачу данных в синхронном режиме с возможностью пакетных циклов.

6.2. Шина PCI

PCI (Peripheral Component Interconnect) local bus - шина соединения периферийных компонентов является основной шиной расширения современных компьютеров. Она разрабатывалась в расчете на Pentium, но хорошо сочеталась и с процессорами 486. Сейчас PCI является четко стандартизованной высокопроизводительной и надежной шиной расширения. Первая версия PCI 1.0 появилась в 1992 г. В PCI 2.0 (1993 г.) введена спецификация коннекторов и карт расширения. В версии 2.1 (1995 г.) введена частота 66 МГц. В настоящее время действует спецификация PCI 2.2 (декабрь 1998 г.), которая уточняет и разъясняет некоторые положения предшествующей версии 2.1. Данное описание основано на тексте стандарта «PCI Local Bus Specification. Revision 2.2» от 17.12.1998, опубликованного организацией PCI SIG (Special Interest Group).

Поначалу шина PCI вводилась как пристройка (mezzanine bus) к системам с основной шиной ISA, став позже центральной шиной: она соединяется с системной шиной процессора высокопроизводительным мостом («северным»), входящим в состав чипсета системной платы. Остальные шины расширения ввода-вывода (ISA/EISA или МСА), а также локальная ISA-подобная шина X-BUS и интерфейс LPC, к которым подключаются микросхемы системной платы (ROM BIOS, контроллеры прерываний, клавиатуры, DMA, портов СОМ и LPT, НГМД и прочие «мелочи»), подключаются к шине PCI через «южный» мост. В современных системных платах с хабовой архитектурой шину PCI Отодвинули на периферию, не ущемляя ее в мощности канала связи с процессором и памятью, но и не нагружая транзитным трафиком устройств других шин.

Шина является синхронной - фиксация всех сигналов выполняется по положительному перепаду (срронту) сигнала CLK. Номинальной частотой синхронизации считается 33 МГц, при необходимости частота может быть понижена (на машинах с процессором 486 использовали частоты 20-33 МГц). Во многих случаях частоту успешно разгоняют и до 41,5 МГц (половина типовой частоты системной шины 83 МГц). Начиная с версии 2.1 допускается повышение частоты до 66 МГц при согласии всех устройств на шине. Номинальная разрядность шины данных - 32 бита, спецификация определяет и расширение разрядности до 64 бит. При частоте шины 33 МГц теоретическая пропускная способность достигает 132 Мбайт/с для 32-битной шины и 264 Мбайт/с для 64-битной; при частоте синхронизации 66 МГц - 264 и 528 соответственно. Однако эти пиковые значения достигаются лишь во время передачи пакета, а из-за протокольных накладных расходов реальная средняя суммарная.(для всех задат-чиков) пропускная способность шины оказывается ниже.

С устройствами PCI процессор может взаимодействовать командами обращения к памяти и портам ввода-вывода, адресованным к областям, выделенным каждому такому устройству при конфигурировании. Устройства могут вырабатывать запросы маскируемых и немаскируемых прерываний. Понятия каналов DMA для шины PCI нет, но агент шины может сам выступать в роли зада"тчика, поддерживая высокопроизводительный обмен с памятью (и не только), не занимая ресурсов

центрального процессора. Таким образом, к примеру, может быть реализован обмен в режиме DMA с устройствами AT А, подключенными к контролеру PCI IDE (см. п. 9.2.1). Спецификация PCI требует от устройств способности перемещать все занимаемые ресурсы в пределах доступного пространства адресации. Это позволяет обеспечивать бесконфликтное распределение ресурсов для многих устройств (функций). Для управления устройствами рекомендуется вместо портов ввода-вывода по возможности использовать ячейки памяти. Одно и то же функциональное устройство может быть сконфигурировано по-разному, отображая свои регистры либо на пространство памяти, либо на пространство ввода-вывода. Драйвер может определить текущую настройку, прочитав содержимое регистра базового адреса устройства, - признаком пространства ввода-вывода будет единичное значение бита 0 (см. п. 6.2.12). Драйвер также может определить и номер запроса прерывания, который используется устройством.

6.2.1. Адресация устройств PCI

Для шины PCI принята иерархия понятий адресации: шина, устройство, функция. Эти понятия фигурируют только при обращении к регистрам конфигурационного пространства (см. п. 6.2.12). К этим регистрам обращаются на этапе конфигурирования - переучета обнаруженных устройств, выделения им непересекающихся ресурсов (областей памяти и пространства ввода-вывода) и назначения номеров аппаратных прерываний. При дальнейшей регулярной работе устройства будут отзываться на обращения по назначенным им адресам памяти и ввода-вывода, доведенным до сведения связанных с ними модулей ПО. Эти адреса принимаются с шины AD в начале каждой транзакции. Для доступа к конфигурационному пространству используются отдельные линии IDSEL Устройством PCI называется микросхема или карта расширения, подключенная к одной из шин PCI и использующая для идентификации выделенную ей линию IDSEL, принадлежащую этой шине. Устройство может быть многофункциональным, то есть состоять из множества (от 1 до 8) так называемых функций. Каждой функции отводится конфигурационное пространство в 256 байт (см. п. 6.2.12). Многофункциональные устройства должны отзываться только на конфигурационные циклы с номерами функций, для которых имеется конфигурационное пространство. При этом функция с номером 0 должна быть обязательно, номера остальных функций назначаются разработчиком устройства произвольно (в диапазоне 1-7). Простые (однофункциональные) устройства, в зависимости от реализации, могут отзываться либо на любой номер функции, либо только на номер функции 0.

Шина PCI - набор сигнальных линий (см. п. 6.2.2), непосредственно соединяющих интерфейсные выводы группы устройств (слотов, микросхем на системной плате). В системе может присутствовать несколько шин PCI, соединенных мостами PCI (см. п. 6,2.10). Мосты электрически отделяют интерфейсные сигналы одной шины от другой, соединяя их логически; главный мост соединяет главную шину с ядром системы (процессором и памятью). Каждая шина имеет свой номер шины (PCI bus number). Шины нумеруются последовательно; главная шина имеет нулевой номер.

С точки зрения конфигурирования, минимальной адресуемой единицей этой иерархии является функция; ее полный адрес состоит из трех частей: номера шины, номера устройства и номера функции. Короткая форма идентификации вида РСЮ:1:2 (например, в сообщениях ОС Unix) означает функцию 2 устройства 1, подключенного к главной (0) шине PCI.

В шине PCI принята географическая адресация - номер устройства определяется местом его подключения. Номер устройства (device number или dev) определяется той линией шины AD, к которой подключена линия сигнала IDSEL данного слота: kADU - devO(MOCT),AD12-devl,...AD31 -dev20. В соседних слотах PCI, как правило,

задействуются соседние номера устройств; их нумерация определяется разработчиком системной платы (или пассивной кросс-платы в промышленных компьютерах). Часто для

слотов используются убывающие номера устройств, начиная с 20. Группы соседних слотов могут подключаться к разным шинам; на каждой шине PCI нумерация устройств независимая (могут быть и устройства с совпадающими номерами dev, но разными номерами шин). Устройства PCI, интегрированные в системную плату, используют ту же систему адресации. Их номера «запаяны намертво», в то время как адреса карт расширения можно изменять перестановкой их в разные слоты. Одна карта PCI может содержать только одно устройство шины, к которой она подключается, поскольку ей в слоте выделяется только одна линия IDSEL Если на карте размещают несколько устройств (например, 4-портовая карта Ethernet), то на ней приходится устанавливать мост

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

С точки зрения обращения к пространствам памяти и ввода-вывода, географический адрес (номер шины и устройства) безразличен (не принимая во внимание разницу в производительности, связанную с подключением устройств к разным шинам PCI). Однако номер устройства определяет номер линии запроса прерывания, которой может пользоваться устройство. Подробнее об этом см. в п. 6.2.6, здесь же отметим, что на одной шине устройства с номерами, отличающимися друг от друга на 4, будут использовать одну и ту же линию прерывания. Возможность развести их по разным линиям прерывания может появиться лишь, если они находятся на разных шинах (это зависит от системной платы).

Разобраться с нумерацией устройств и полученных ими линий прерываний на конкретной плате можно просто: устанавливать одну карту PCI поочередно в каждый из слотов (отключая питание) и смотреть на сообщения об обнаруженных устройствах PCI, выводимых на дисплей в конце теста POST. В этих сообщениях будут фигурировать и устройства PCI, установленные непосредственно на системной плате (и не отключенные параметрами CMOS Setup).

Но чтобы не было иллюзий простоты и прозрачности, отметим, что «особо умные» операционные системы (Windows) не довольствуются полученными назначениями номеров прерывании и изменяют их по своему усмотрению (что никак не может отразиться на разделяемости линий).

6.2.2. Протокол шины PCI

В каждой транзакции (обмене по шине) участвуют два устройства - инициатор (initiator) обмена, он же ведущее (master) устройство, и целевое (target) устройство (ЦУ), оно жеведомое (slave). Шина PCI все транзакции трактует как пакетные: каждая транзакция начинается фазой адреса, за которой может следовать одна или несколько фаз данных. Состав и назначение интерфейсных сигналов шины приведены в табл. 6.11.

Таблица 6.11. Сигналы шины PCI

Назначение

Address/Data - мультиплексированная шина адреса/данных. В начале транзакции передается адрес, в

последующихтактах-данные

Command/Byte Enable - команда/разрешение обращения к байтам. Команда, определяющаятипочередного

циклашины, задаетсячетырехбитнымкодомв фазе адреса

Кадр. Введением сигнала отмечается начало транзакции (фаза адреса), снятие сигналауказываетнато, что

последующийциклпередачиданныхявляетсяпоследнимвтранзакции

Device Select - устройство выбрано (ответ ЦУ на адресованную к нему транзакцию)

Initiator Ready - готовность ведущего устройства к обмену данными

Target Ready - готовность ЦУ к обмену данными

ЗапросЦУкведущемуустройствунаостановкутекущейтранзакции

Сигнал захвата шины для обеспечения целостного выполнения операции. Используетсямостом, которомудля

выполненияоднойоперациитребуетсявыполнить несколько транзакций PCI

Request - запрос от ведущего устройства на захват шины

Grant - предоставление ведущему устройству управления шиной

Parity - общий бит паритета для линий AD и С/ВЕ#

PRSNT# Present - индикаторы присутствия платы, кодирующие запрос потребляемой мощности. Накарте расширенияоднаилидвелиниииндикаторовсоединяютсяс шиной GND, что воспринимается системной платой

Reset - сброс всех регистров в начальное состояние

Initialization Device Select - выбор устройства в циклах конфигурационного

считыванияизаписи

System Error - системная ошибка. Ошибка паритета адреса данных в специальном циклеилииная

катастрофическаяошибка, обнаруженнаяустройством. Активизируется любым устройством PCI и вызывает

Request 64 bit - запрос на 64-битный обмен. Сигнал вводится 64-битным

инициатором, по времени он совпадает с сигналом FRAME*. Во время окончания сброса (сигналом

RST*) сигнализирует 64-битному устройству о том, что оно подключенок64-битнойшине. Если64-б.итное

устройствонеобнаружитэтогосигнала, онодолжнопереконфигурироватьсяна32-битныйрежим, отключив

буферныесхемыстаршихбайтов

Подтверждение64-битногообмена. Сигналвводится64-битнымЦУ, опознавшимсвой адрес, одновременно с

DEVSEL*. Отсутствие этого подтверждения заставитинициаторвыполнятьобменс32-битнойразрядностью

INTA#, INTB*, Interrupt А, В, С, D - линии запросов прерывания, чувствительность к уровню, INTC#, INTD* активный уровень - низкий, что допускает разделяемость (совместное использование)линий

Назначение

Snoop Done - сигнал завершенности цикла слежения для текущей транзакции. Низкийуровеньуказываетна

незавершенностьцикласлежениязакогерентностьюпамятиикэша. Необязательныйсигнал, используетсятолько

устройствамишиныскэшируемойпамятью

Snoop Backoff - попадание текущего обращения к памяти абонента шины

вмодифицированнуюстрокукэша. Необязательныйсигнал, используетсятолькоабонентамишиныскэшируемой

памятьюприалгоритмеобратнойзаписи

Test Clock - синхронизация тестового интерфейса JTAG

Test Data Input - входные данные тестового интерфейса JTAG

Test Data Output - выходные данные тестового интерфейса JTAG

Test Mode Select - выбор режима для тестового интерфейса JTAG

Test Logic Reset - сброс тестовой логики

В каждый момент времени шиной может управлять только одно ведущее устройство, получившее на это право от арбитра. Каждое ведущее устройство имеет пару сигналов - REQ# для запроса на управление шиной и GNT* для подтверждения предоставления управления шиной. Устройство может начинать транзакцию (устанавливать сигнал FRAME*) только при активном полученном сигнале GNT*. Снятие сигнала GNT* не позволяет устройству начать следующую транзакцию, а при определенных условиях (см. ниже) заставляет прекратить начатую транзакцию. Арбитражем запросов на использование шины занимается специальный узел, входящий в чипсет системной платы. Схема приоритетов (фиксированный, циклический, комбинированный) определяется программированием арбитра.

Для адреса и данных используются общие мультиплексированные линии AD. Четыре мультиплексированные линии С/ВЕ обеспечивают кодирование команд в фазе адреса и разрешения байт в фазе данных. В начале транзакции ведущее устройство активизирует сигнал FRAME*, по шине AD передает целевой адрес, а по линиям С/ВЕ# - информацию

о типе транзакции (команде). Адресованное ЦУ отзывается сигналом DEVSEL*. Ведущее устройство указывает на свою готовность к обмену данными сигналом IRDY#, эта готовность может быть выставлена и раньше получения DEVSEL*. Когда к обмену данными будет готово и ЦУ, оно установит сигнал TRDY*. Данные по шине AD передаются только при одновременном наличии сигналов IRDY# и TRDY*. С помощью этих сигналов ведущее устройство и ЦУ согласуют свои скорости, вводя такты ожидания. На рис. 6.7 приведена временная диаграмма обмена, в которой и ведущее устройство, и ЦУ вводят такты ожидания. Если бы они оба ввели сигналы готовности в конце фазы адреса и не снимали их до конца обмена, то в каждом такте после фазы адреса передавались бы по 32 бита данных, что обеспечило бы выход на предельную производительность обмена.

Количество фаз данных в пакете явно не указывается, но перед последней фазой данных ведущее устройство при введенном сигнале IRDY* снимает сигнал FRAME*. В одиночных транзакциях сигнал FRAME* активен лишь один такт. Если устройство не поддерживает пакетные транзакции в ведомом режиме, то оно должно потребовать прекращения пакетной транзакции во время первой фазы данных (введя сигнал STOP* одновременно с TRDY*). В ответ на это ведущее устройство завершит данную транзакцию и продолжит обмен последующей транзакцией с новым значением адреса. После последней фазы данных ведущее устройство снимает сигнал IRDY#, и шина переходит в состояние покоя (PCI Idle) - оба сигнала FRAME* и IRDY# находятся в пассивном состоянии. Инициатор может начать следующую транзакцию и без такта покоя, введя FRAME* одновременно со снятием IRDY#. Такие быстрые смежные транзакции (Fast Back-to-Back) могут быть обращены как к одному, так и к разным ЦУ. Первый тип поддерживается всеми устройствами PCI, выступающими в роли ЦУ. На поддержку второго типа (она необязательна) указывает бит 7 регистра состояния (см. п. 6.2.12). Инициатору разрешают (если он умеет) использовать быстрые смежные транзакции с разными устройствами (битом 9 регистра команд), только если все агенты шины допускают быстрые обращения.

Рис. 6.7. Цикл обмена на шине PCI

Шина позволяет уменьшить мощность (ток), потребляемую устройствами, ценой снижения производительности, применяя пошаговое переключение линий AD и PAR (address/data stepping). Здесь возможны два варианта.

катора действительной информации (FRAME# в фазе адреса, IRDY# или TRDY# вфазеданных). Заэтинесколькотактовсигналы«доползут» дотребуемогозначения применьшем токе.

Дискретный шаг (diskrete stepping) - нормальные формирователи срабатывают не все сразу, а группами (например, побайтно), в каждом такте по группе. При этом снижаются броски тока, поскольку одновременно переключается меньше формирователей.

В ходе работы нам периодически приходится сталкиваться с достаточно низкоуровневым взаимодействием с аппаратной частью. В данной статье мы хотим показать, каким образом происходит опрос PCI-устройств для их идентификации и загрузки соответствующих драйверов устройств.

В качестве минимальной базы для работы с PCI-устройствами будем использовать ядро, поддерживающее спецификацию Multiboot. Так удастся избежать необходимости писать собственный загрузочный сектор и загрузчик (loader). Кроме того, этот вопрос и так отлично освещен в интернете. В качестве загрузчика будет выступать GRUB. Грузиться мы будем с флэшки, так как с нее удобно загружать и виртуальную, и реальную машину. В качестве виртуальной машины будем использовать QEMU. В качестве реальной машины должна выступать машина с обычным BIOS-ом (не UEFI), поддерживающим загрузку с USB-HDD (обычно присутствует опция Legacy USB support). Для работы понадобятся Ubuntu Linux со следующими программами: expect, qemu, grub (их можно легко установить при помощи команды sudo apt-get install). Используемый gcc должен компилировать 32х битный код.

Рассмотрим первый шаг – создание ядра, поддерживающего спецификацию Multiboot. В случае использования GRUB-а в качестве загрузчика ядро будет создаваться из 3-х файлов:
Kernel.c – основной файл с кодом нашей программы и процедурой main();
Loader.s – содержит заголовок мультизагрузчика для GRUB;
Linker.ld – скрипт компоновщика ld, в котором в частности указывается, по какому адресу будет располагаться ядро.

Содержимое Linker.ld:

ENTRY (loader) SECTIONS { . = 0x00100000; .text ALIGN (0x1000) : { *(.text) } .rodata ALIGN (0x1000) : { *(.rodata*) } .data ALIGN (0x1000) : { *(.data) } .bss: { sbss = .; *(COMMON) *(.bss) ebss = .; } }

Скрипт компоновщика указывает, как слинковать уже скомпилированные объектные файлы. В первой строчке указано, что точкой входа в нашем ядре будет адрес с меткой «loader». Далее в скрипте указано, что начиная с адреса 0x00100000 (1Мб) будет располагаться секция text. Секции rodata, data и bss выровнены по 0x1000 (4Кб) и располагаются после секции text.

Содержимое Loader.s:

Global loader .set FLAGS, 0x0 .set MAGIC, 0x1BADB002 .set CHECKSUM, -(MAGIC + FLAGS) .align 4 .long MAGIC .long FLAGS .long CHECKSUM # reserve initial kernel stack space .set STACKSIZE, 0x4000 .lcomm stack, STACKSIZE .comm mbd, 4 .comm magic, 4 loader: movl $(stack + STACKSIZE), %esp movl %eax, magic movl %ebx, mbd call kmain cli hang: hlt jmp hang

GRUB после загрузки образа ядра с диска ищет в первых 8Кб загруженного образа сигнатуру 0x1BADB002. Сигнатура является первым полем заголовка мультизагрузки. Сам заголовок выглядит следующим образом:

Offset Type Field Name Note
0 u32 magic required
4 u32 flags required
8 u32 checksum required
12 u32 header_addr if flags is set
16 u32 load_addr if flags is set
20 u32 load_end_addr if flags is set
24 u32 bss_end_addr if flags is set
28 u32 entry_addr if flags is set
32 u32 mode_type if flags is set
36 u32 width if flags is set
40 u32 height if flags is set
44 u32 depth if flags is set

Заголовок должен включать в себя минимум 3 поля – magic, flag, checksum. Поле magic является сигнатурой и, как уже было сказано выше, всегда равно 0x1BADB002. Поле flag содержит дополнительные требования к состоянию машины на момент передачи управления ОС. В зависимости от значения этого поля может меняться набор полей в структуре Multiboot Information. Указатель на структуру Multiboot Information содержит регистр EBX в момент передачи управления загружаемому ядру. В нашем случае поле flag имеет значение 0, и заголовок мультизагрузки состоит только из 3-ех полей.

На момент передачи управления ядру процессор работает в защищенном режиме с выключенной страничной адресацией. Обработка прерываний от устройств отключена. GRUB не формирует стек для загружаемого ядра, и это первое что должна сделать операционная система. В нашем случае под стек выделяется 16Кб. Последней выполненной ассемблерной инструкцией будет инструкция call kmain, которая передает управление коду на C, а именно функции void kmain(void).

Содержимое kernel.c:

#include "printf.h" #include "screen.h" void kmain(void) { clear_screen(); printf(" -- Kernel started! -- n"); }

Пока здесь нет ничего интересного. С точки зрения загрузки в нем не должно присутствовать ничего специфичного, только точка входа для кода на С. Для вывода на экран была добавлена реализация функции printf, найденная на просторах Интернета, и несколько функций для работы с видеопамятью, таких как putchar, clear_screen.

Для сборки ядра будет использоваться следующий простой makefile:

CC = gcc CFLAGS = -Wall -nostdlib -fno-builtin -nostartfiles -nodefaultlibs LD = ld OBJFILES = loader.o printf.o screen.o pci.o kernel.o start: all cp ./kernel.bin ./flash/boot/grub/ expect ./grub_install.exp qemu /dev/sdb all: kernel.bin .s.o: as -o $@ $< .c.o: $(CC) $(CFLAGS) -o $@ -c $< kernel.bin: $(OBJFILES) $(LD) -T linker.ld -o $@ $^ clean: rm $(OBJFILES) kernel.bin

Теперь у нас есть ядро, которое можно загрузить. Пора проверить, что оно действительно загружается. Установим GRUB на флешку и скажем ему загружать наше ядро при старте. Для этого нужно выполнить следующие шаги:

1. Создать раздел на флешке, отформатировать его в файловую систему, поддерживаемую GRUB-ом (в нашем случае это файловая система FAT32). Мы воспользовались утилитой Disk Utility из комплекта Ubuntu, которая позволила создать раздел:

2. Примонтировать флешку и создать каталог /boot/grub/. Скопировать в него из /usr/lib файлы stage1, stage2, fat_stage1_5. Создать текстовый файл menu.lst в директории /boot/grub/ и записать в него

Timeout 5 default 0 title start_kernel root (hd0,0) kernel /boot/grub/kernel.bin

Для установки GRUB-а на флешку используется expect-скрипт в файле grub_install.exp. Его содержимое:

Log_user 0 spawn grub expect "grub> " send "root (hd1,0)r" expect "grub> " send "setup (hd1)r" expect "grub> " send "quitr" exit 0

В конкретном случае возможны другие номера дисков и названия устройств. В конечном итоге компиляция и запуск виртуальной машины должны выполняться командой make start. Эта команда из makefile выполнит установку GRUB на флэшку с использованием скрипта grub_install.exp, а затем запустит виртуальную машину QEMU с нашей программой. Поскольку все загружается с реальной флэшки, то с нее можно загрузить не только виртуальную машину QEMU, но и реальный компьютер.

Запущенная виртуальная машина QEMU с нашей программой выглядит следующим образом:


Теперь займемся основной задачей – перечисление всех имеющихся на компьютере PCI-устройств. PCI – это основная шина с устройствами на компьютере. В нее помимо обычных устройств, которые вставляются во всем известные слоты на материнской плате, также подключены устройства, вшитые в саму материнскую плату (так называемые On-board devices), а так же ряд контроллеров (например, USB) и мостов на другие шины (например, PCI-ISA bridge). Таким образом, PCI – это основная шина на компьютере, с которой начинается опрос всех его устройств.

С каждым PCI-устройством связана структура из 256-ти байт (PCI Configuration Space), в которой располагаются его настройки. Конфигурация устройства в конечном итоге сводится к записи и чтению данных из этой структуры. Для всех PCI-устройств чтение и запись данных происходит через 2 порта ввода-вывода:
0xcf8 - конфигурационный порт, в который записывается PCI-адрес;
0xcfc - порт данных, через который происходит чтение и запись данных по указанному в конфигурационном порту PCI-адресу.

При чтении данных из PCI Configuration Space можно получить информацию об устройстве, а записывая туда данные устройство можно настроить.

PCI-адрес представляет собой следующую 32-х битную структуру:

Бит 31 Биты 30 – 24 Биты 23 – 16 Биты 15 – 11 Биты 10 – 8 Биты 7 – 2 Биты 1 – 0
Всегда 1 Зарезервировано Номер шины Номер устройства Номер функции Номер регистра Всегда 0

Номер шины вместе с номером устройства идентифицируют физическое устройство на компьютере. Физическое устройство может включать в себя несколько логических, которые идентифицируются номером функции (например, плата видео захвата с контроллером Wi-Fi будет иметь, по крайней мере, две функции).

PCI Configuration Space условно разбита на регистры по 4 байта. Номер регистра, к которому происходит обращение, хранится с 2го по 7й биты в 32-х битном PCI-адресе. Поля структуры PCI Configuration Space, описывающей PCI-устройство, зависят от его типа. Но для всех типов устройств первые 4 регистра структуры содержат следующие поля:

Номер регистра Биты 31 - 24 Биты 23 – 16 Биты 15 – 8 Биты 7 – 0
0 Device ID Vendor ID
1 Status Command
2 Class code Subclass Prog IF Revision ID
3 BIST Header type Latency Timer Cache Line Size

Class code – описывает тип (класс) устройства с точки зрения функций, которые устройство выполняет (сетевой адаптер, видео карта и т.д.);
Vendor ID – идентификатор производителя устройства (у каждого производителя устройств в мире есть один или несколько таких уникальных идентификаторов). Эти номера выдаются международной организацией PCI SIG;
Device ID уникальный идентификатор устройства (уникален для заданного Vendor ID). Их нумерацию определяет сам производитель.

По полям DeviceID (сокращенно DEV) и VendorID (сокращенно VEN) определяется драйвер, соответствующий этому устройству. Иногда для этого используется еще дополнительный идентификатор RevisionID (сокращенно REV). Другими словами, Windows, обнаруживая новое устройство в компьютере, использует числа VEN, DEV и REV для поиска соответствующих им драйверов у себя на диске или в Интернете, используя сервера Microsoft. Также эти номера можно встретить в диспетчере устройств:

Рассмотрим код, реализующий самый простой способ получения списка имеющихся на компьютере PCI-устройств:

Int ReadPCIDevHeader(u32 bus, u32 dev, u32 func, PCIDevHeader *p_pciDevice) { int i; if (p_pciDevice == 0) return 1; for (i = 0; i < sizeof(p_pciDevice->header)/sizeof(p_pciDevice->header); i++) ReadConfig32(bus, dev, func, i, &p_pciDevice->header[i]); if (p_pciDevice->option.vendorID == 0x0000 || p_pciDevice->option.vendorID == 0xffff || p_pciDevice->option.deviceID == 0xffff) return 1; return 0; } void kmain(void) { int bus; int dev; clear_screen(); printf(" -- Kernel started! -- n"); for (bus = 0; bus < PCI_MAX_BUSES; bus++) for (dev = 0; dev < PCI_MAX_DEVICES; dev++) { u32 func = 0; PCIDevHeader pci_device; if (ReadPCIDevHeader(bus, dev, func, &pci_device)) continue; PrintPCIDevHeader(bus, dev, func, &pci_device); if (pci_device.option.headerType & PCI_HEADERTYPE_MULTIFUNC) { for (func = 1; func < PCI_MAX_FUNCTIONS; func++) { if (ReadPCIDevHeader(bus, dev, func, &pci_device)) continue; PrintPCIDevHeader(bus, dev, func, &pci_device); } } } }

В данном коде происходит полный перебор номеров шин и номеров устройств в адресе, по которому происходит чтение. Если поле Header type содержит флаг PCI_HEADERTYPE_MULTIFUNC, то данное физическое устройство реализует несколько логических устройств, и при поиске PCI-устройств в адресе, записываемом в конфигурационный порт, нужно перебирать номер функции. Если VendorID имеет некорректное значение, то устройства с таким номером на этой шине нет. На Qemu этот код выводит следующий результат:


0x8086 – это VendorID оборудования компании Intel. DeviceID, равный 0x7000, соответствует устройству PIIX3 PCI-to-ISA Bridge. Загрузимся с получившейся флешки в VmWare Workstation 9.0. Список PCI-устройств оказался значительно длиннее и выглядит следующим образом:


Вот так выглядит поиск PCI-устройств в системе. Это действие выполняется во всех современных операционных системах, работающих на компьютерах IBM PC. Следующим шагом в работе операционной системы является поиск драйверов и конфигурирование найденных устройств, а это уже происходит уникальным образом для каждого устройства в отдельности.

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

Что такое PCI-контроллер?

PCI является универсальной шиной для подключения различных устройств. Обычно они находятся на материнской плате компьютера и с их помощью к ней могут быть подключены различные дополнительные платы. Обладателям стационарного компьютера будет проще обнаружить на своем ПК PCI-разъемы. Сняв боковую крышку корпуса, вы увидите материнскую плату своего ПК, а на ней несколько больших белых разъемов. Вот эти разъемы и называются PCI-шинами. С их помощью к материнской плате можно подключать видеокарту, звуковую карту, платы с дополнительными разъемами (USB или COM), сетевую карту и т.д.

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

Установка PCI-устройства

Выбирая дополнительное устройство для своего ПК, узнайте, какая версия PCI-разъемов установлена на вашей материнской плате. Помните, разные версии данных разъемов отличаются своей формой, поэтому устройство для одной версии разъема будет физически несовместимо с разъемом другой версии, который имеется на материнской плате.

Узнать, совместимо ли устройство с вашей материнской платой довольно просто:

  1. Загрузите программу Everest , установите и запустите её.
  2. В левой колонке выберите "Устройства" и там же выберите пункт "PCI устройства". Центральное окно программы будет разделено надвое, в верхнем будут перечислены все устройства, которые подключены к PCI-шинам. Нажав на устройство, в нижнем окне можно будет увидеть информацию об устройстве и о самой шине, к которой оно подключено. Там же можно узнать и версию PCI-шины.
  3. Можно поступить проще и найти в сети Интернет описание вашей материнской платы, после чего просто сравнить его с характеристиками устройства, которые вы хотите установить. Узнать модель материнской платы можно с помощью программы Everest, открыв раздел "системная плата".

Если выбранная плата совместима с вашей материнской платой, можно переходить к непосредственной установке устройства.

  1. Снимите боковую крышку корпуса ПК.
  2. Выберите PCI-слот, в который будет установлено устройство, или удалите из нужного слота устройство, которое вы хотите заменить новым.
  3. Просто аккуратно вставьте плату так, чтобы она полностью заходила в разъем. Тут вы не ошибетесь, так как неправильно установить плату в разъем физически невозможно.
  4. Подключите дополнительные разъемы (если это требуется) и поставьте на место крышку корпуса.
  5. Запустите ПК. Когда ОС загрузится, вы увидите системное сообщение о том, что было подключено новое устройство. Установите необходимые для его работы драйверы с установочного диска, который идет в комплекте с устройством, загрузив драйвер из сети или воспользовавшись автоматической установкой драйвера.

Проблемы, возникающие с PCI-контроллером

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

Весной 1991 года компания Intel завершает разработку первой макетной версии шины PCI. Перед инженерами была поставлена задача разработать недорогое и производительное решение, которое позволило бы реализовать возможности процессоров 486, Pentium и Pentium Pro. Кроме того, было необходимо учесть ошибки, допущенные VESA при проектировании шины VLB (электрическая нагрузка не позволяла подключать более 3 плат расширения), а также реализовать автоматическую настройку устройств.

В 1992 году появляется первая версия шины PCI, Intel объявляет, что стандарт шины будет открытым, и создаёт PCI Special Interest Group. Благодаря этому любой заинтересованный разработчик получает возможность создавать устройства для шины PCI без необходимости приобретения лицензии. Первая версия шины имела тактовую частоту 33 МГц, могла быть 32- или 64-битной, а устройства могли работать с сигналами в 5 В или 3,3 В. Теоретически пропускная способность шины 133 Мбайт/с, однако в реальности пропускная способность составляла около 80 Мбайт/с.

Основные характеристики:


  • частота шины - 33,33 или 66,66 МГц, передача синхронная;
  • разрядность шины - 32 или 64 бита, шина мультиплексированная (адрес и данные передаются по одним и тем же линиям);
  • пиковая пропускная способность для 32-разрядного варианта, работающего на частоте 33,33 МГц - 133 Мбайт/с;
  • адресное пространство памяти - 32 бита (4 байта);
  • адресное пространство портов ввода-вывода - 32 бита (4 байта);
  • конфигурационное адресное пространство (для одной функции) - 256 байт;
  • напряжение - 3,3 или 5 В.

Фото разъемов:

MiniPCI - 124 pin
MiniPCI Express MiniSata/mSATA - 52 pin
Apple MBA SSD, 2012
Apple SSD, 2012
Apple PCIe SSD
MXM, Graphics Card, 230 / 232 pin

MXM2 NGIFF 75 pins

KEY A PCIe x2

KEY B PCIe x4 Sata SMBus

MXM3, Graphics Card, 314 pin
PCI 5V
PCI Universal
PCI-X 5v
AGP Universal
AGP 3.3 v
AGP 3.3 v + ADS Power
PCIe x1
PCIe x16
Custom PCIe
ISA 8bit

ISA 16bit
eISA
VESA
NuBus
PDS
PDS
Apple II / GS Expasion slot
PC/ XT / AT expasion bus 8 bit
ISA (industry standard architecture) - 16 bit
eISA
MBA - Micro Bus architecture 16 bit
MBA - Micro Bus architecture с видео 16 bit
MBA - Micro Bus architecture 32 bit
MBA - Micro Bus architecture с видео 32 bit
ISA 16 + VLB (VESA)
Processor Direct Slot PDS
601 Processor Direct Slot PDS
LC Processor Direct Slot PERCH
NuBus
PCI (Peripheral Computer Interconnect) - 5v
PCI 3.3v
CNR (Communications / network Riser)
AMR (Audio / Modem Riser)
ACR (Advanced communication Riser)
PCI-X (Периферийный PCI) 3.3v
PCI-X 5v
PCI 5v + RAID option - ARO
AGP 3.3v
AGP 1.5v
AGP Universal
AGP Pro 1.5v
AGP Pro 1.5v+ADC power
PCIe (peripheral component interconnect express) x1
PCIe x4
PCIe x8
PCIe x16

PCI 2.0

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

PCI 2.1 - 3.0

Отличались от версии 2.0 возможностью одновременной работы нескольких шинных задатчиков (англ. bus-master, т. н. конкурентный режим), а также появлением универсальных карт расширения, способных работать как в слотах, использующих напряжение 5 вольт, так и в слотах, использующих 3,3 вольта (с частотой 33 и 66 МГц соответственно). Пиковая пропускная способность для 33 МГц - 133 Мбайт/с, а для 66 МГц - 266 Мбайт/с.

  • Версия 2.1 - работа с картами, рассчитанными на напряжение 3,3 вольта, и наличие соответствующих линий питания являлись опциональными.
  • Версия 2.2 - сделанные в соответствии с этими стандартами карты расширения имеют универсальный ключ разъёма по питанию и способны работать во многих более поздних разновидностях слотов шины PCI, а также, в некоторых случаях, и в слотах версии 2.1.
  • Версия 2.3 - несовместима с картами PCI, рассчитанными на использование 5 вольт, несмотря на продолжающееся использование 32-битных слотов с 5-вольтовым ключом. Карты расширения имеют универсальный разъём, но не способны работать в 5-вольтовых слотах ранних версий (до 2.1 включительно).
  • Версия 3.0 - завершает переход на карты PCI 3,3 вольт, карты PCI 5 вольт больше не поддерживаются.

PCI 64

Расширение базового стандарта PCI, появившееся в версии 2.1, удваивающее число линий данных, и, следовательно, пропускную способность. Слот PCI 64 является удлинённой версией обычного PCI-слота. Формально совместимость 32-битных карт с 64-битным слотами (при условии наличия общего поддерживаемого сигнального напряжения) полная, а совместимость 64-битной карты с 32-битным слотами является ограниченной (в любом случае произойдёт потеря производительности). Работает на тактовой частоте 33 МГц. Пиковая пропускная способность - 266 Мбайт/с.

  • Версия 1 - использует слот PCI 64-бита и напряжение 5 вольт.
  • Версия 2 - использует слот PCI 64-бита и напряжение 3,3 вольта.

PCI 66

Версия PCI 66 является работающим на тактовой частоте 66 МГц развитием PCI 64; использует напряжение 3,3 вольта в слоте; карты имеют универсальный, либо форм-фактор на 3,3 В. Пиковая пропускная способность - 533 Мбайт/с.

PCI 64/66

Комбинация PCI 64 и PCI 66 позволяет вчетверо увеличить скорость передачи данных по сравнению с базовым стандартом PCI; использует 64-битные 3,3-вольтовые слоты, совместимые только с универсальными, и 3,3-вольтовые 32-битные карты расширения. Карты стандарта PCI64/66 имеют либо универсальный (но имеющий ограниченную совместимость с 32-битными слотами), либо 3,3-вольтовый форм-фактор (последний вариант принципиально не совместим с 32-битными 33-мегагерцовыми слотами популярных стандартов). Пиковая пропускная способность - 533 Мбайт/с.

PCI-X

PCI-X 1.0 - расширение шины PCI64 с добавлением двух новых частот работы, 100 и 133 МГц, а также механизма раздельных транзакций для улучшения производительности при одновременной работе нескольких устройств. Как правило, обратно совместима со всеми 3.3В и универсальными PCI-картами. PCI-X карты обычно выполняются в 64-бит 3,3 В формате и имеют ограниченную обратную совместимость со слотами PCI64/66, а некоторые PCI-X карты - в универсальном формате и способны работать (хотя практической ценности это почти не имеет) в обычном PCI 2.2/2.3. В сложных случаях для того, чтобы быть полностью уверенным в работоспособности комбинации из материнской платы и карты расширения, надо посмотреть таблицы совместимости (compatibility lists) производителей обоих устройств.

PCI-X 2.0

PCI-X 2.0 - дальнейшее расширение возможностей PCI-X 1.0; добавлены частоты 266 и 533 МГц, а также - коррекция ошибок чётности при передаче данных (ECC ). Допускает расщепление на 4 независимых 16-битных шины, что применяется исключительно во встраиваемых и промышленных системах ; сигнальное напряжение снижено до 1,5 В, но сохранена обратная совместимость разъёмов со всеми картами, использующими сигнальное напряжение 3,3 В. В настоящее время для не профессионального сегмента рынка высокопроизводительных компьютеров (мощных рабочих станций и серверов начального уровня), в которых находит применение шина PCI-X, выпускается крайне мало материнских плат с поддержкой шины. Примером материнской платы для такого сегмента является ASUS P5K WS. В профессиональном сегменте применяется в RAID-контроллерах, в SSD-накопителях под PCI-E.

Mini PCI

Форм-фактор PCI 2.2, предназначен для использования, в основном, в ноутбуках.

PCI Express

PCI Express, или PCIe, или PCI-E (также известная как 3GIO for 3rd Generation I/O; не путать с PCI-X и PXI ) - компьютерная шина (хотя на физическом уровне шиной не является, будучи соединением типа «точка-точка»), использующая программную модель шины PCI и высокопроизводительный физический протокол , основанный на последовательной передаче данных . Разработка стандарта PCI Express была начата фирмой Intel после отказа от шины InfiniBand. Официально первая базовая спецификация PCI Express появилась в июле 2002 года.Развитием стандарта PCI Express занимается организация PCI Special Interest Group.

В отличие от стандарта PCI, использовавшего для передачи данных общую шину с подключением параллельно нескольких устройств, PCI Express, в общем случае, является пакетной сетью с топологией типа звезда . Устройства PCI Express взаимодействуют между собой через среду, образованную коммутаторами, при этом каждое устройство напрямую связано соединением типа точка-точка с коммутатором. Кроме того, шиной PCI Express поддерживается:

  • горячая замена карт;
  • гарантированная полоса пропускания (QoS );
  • управление энергопотреблением;
  • контроль целостности передаваемых данных.

Шина PCI Express нацелена на использование только в качестве локальной шины. Так как программная модель PCI Express во многом унаследована от PCI, то существующие системы и контроллеры могут быть доработаны для использования шины PCI Express заменой только физического уровня, без доработки программного обеспечения. Высокая пиковая производительность шины PCI Express позволяет использовать её вместо шин AGP и тем более PCI и PCI-X . Де-факто PCI Express заменила эти шины в персональных компьютерах.

  • MiniCard (Mini PCIe ) - замена форм-фактора Mini PCI . На разъём Mini Card выведены шины: x1 PCIe, 2.0 и SMBus.
  • ExpressCard - подобен форм-фактору PCMCIA . На разъём ExpressCard выведены шины x1 PCIe и USB 2.0, карты ExpressCard поддерживают горячее подключение.
  • AdvancedTCA , MicroTCA - форм-фактор для модульного телекоммуникационного оборудования.
  • Mobile PCI Express Module (MXM) - промышленный форм-фактор, созданный для ноутбуков фирмой NVIDIA . Его используют для подключения графических ускорителей.
  • Кабельные спецификации PCI Express позволяют доводить длину одного соединения до десятков метров, что делает возможным создание ЭВМ, периферийные устройства которой находятся на значительном удалении.
  • StackPC - спецификация для построения наращиваемых компьютерных систем. Данная спецификация описывает разъёмы расширения StackPC , FPE и их взаимное расположение.

Несмотря на то, что стандарт допускает x32 линий на порт, такие решения физически достаточно громоздки и не выпускаются.

Год
выпуска
Версия
PCI Express
Кодирование Скорость
передачи
Пропускная способность на x линий
×1 ×2 ×4 ×8 ×16
2002 1.0 8b/10b 2,5 ГТ/с 2 4 8 16 32
2007 2.0 8b/10b 5 ГТ/с 4 8 16 32 64
2010 3.0 128b/130b 8 ГТ/с ~7,877 ~15,754 ~31,508 ~63,015 ~126,031
2017 4.0 128b/130b 16 ГТ/с ~15,754 ~31,508 ~63,015 ~126,031 ~252,062
2019
5.0 128b/130b 32 ГТ/с ~32 ~64 ~128 ~256 ~512

PCI Express 2.0

Группа PCI-SIG выпустила спецификацию PCI Express 2.0 15 января 2007 года . Основные нововведения в PCI Express 2.0:

  • Увеличенная пропускная способность: ПСП одной линии 500 МБ/с, или 5 ГТ/с (Гигатранзакций/с ).
  • Внесены усовершенствования в протокол передачи между устройствами и программную модель.
  • Динамическое управление скоростью (для управления скоростью работы связи).
  • Оповещение о пропускной способности (для оповещения ПО об изменениях скорости и ширины шины).
  • Службы управления доступом - опциональные возможности управления транзакциями точка-точка.
  • Управление таймаутом выполнения.
  • Сброс на уровне функций - опциональный механизм для сброса функций (англ. PCI functions) внутри устройства (англ. PCI device).
  • Переопределение предела по мощности (для переопределения лимита мощности слота при присоединении устройств, потребляющих бо́льшую мощность).

PCI Express 2.0 полностью совместим с PCI Express 1.1 (старые будут работать в системных платах с новыми разъемами, но только на скорости 2,5 ГТ/с, так как старые чипсеты не могут поддерживать удвоенную скорость передачи данных; новые видеоадаптеры будут без проблем работать в старых разъемах стандарта PCI Express 1.х.).

PCI Express 2.1

По физическим характеристикам (скорость, разъём) соответствует 2.0, в программной части добавлены функции, которые в полной мере планируют внедрить в версии 3.0. Так как большинство системных плат продаются с версией 2.0, наличие только видеокарты с 2.1 не даёт задействовать режим 2.1.

PCI Express 3.0

В ноябре 2010 года были утверждены спецификации версии PCI Express 3.0. Интерфейс обладает скоростью передачи данных 8 GT/s (Гигатранзакций/с ). Но, несмотря на это, его реальная пропускная способность всё равно была увеличена вдвое по сравнению со стандартом PCI Express 2.0. Этого удалось достигнуть благодаря более агрессивной схеме кодирования 128b/130b, когда 128 бит данных, пересылаемых по шине, кодируются 130 битами. При этом сохранилась полная совместимость с предыдущими версиями PCI Express. Карты PCI Express 1.x и 2.x будут работать в разъёме 3.0 и, наоборот, карта PCI Express 3.0 будет работать в разъёмах 1.х и 2.х.

PCI Express 4.0

PCI Special Interest Group (PCI SIG) заявила, что PCI Express 4.0 может быть стандартизирован до конца 2016 года, однако на середину 2016 года, когда ряд чипов уже готовился к изготовлению, СМИ сообщали, что стандартизация ожидается в начале 2017. Ожидается, что он будет иметь пропускную способность 16 GT/s, то есть будет в два раза быстрее PCIe 3.0.

Оставьте свой комментарий!