Чтение онлайн

ЖАНРЫ

Шины PCI, USB и FireWire

Гук Михаил Юрьевич

Шрифт:

Вышеприведенные соображения объясняют современную тенденцию перехода на последовательный способ передачи данных.

Взаимодействие программ с периферийными устройствами

Периферийные устройства могут подключаться к интерфейсам системного уровня (ISA, PCI, PCI–X, PCI-Express, AGP, LPC) или к периферийным интерфейсам (порты COM, LPT, Game; шины USB, FireWire, SCSI). Абстрагируясь от конкретной реализации подключения на системном уровне, можно говорить о логической системной шине PC-совместимого компьютера[4] – интерфейсе со следующими базовыми свойствами: интерфейс обеспечивает транзакции обращения к пространствам памяти и ввода/вывода;

• в транзакциях фигурируют физические адреса пространств памяти и ввода/ вывода;

• адресные

пространства памяти и ввода/вывода являются «плоскими»: адрес выражается одним числом в диапазоне, определенном принятой разрядностью адресации. Любой адрес может принадлежать регистру (ячейке памяти) только одного устройства (или системной памяти, включающей ОЗУ и энергонезависимую память);

• транзакции могут инициироваться как центральным процессором (процессорами), так и активными устройствами (мастерами шины);

• все адресуемые элементы безусловно доступны центральному процессору; на адресуемость элементов со стороны мастеров шин могут накладываться специфические ограничения;[5]

 

• устройства, подключенные к системной шине, могут посылать процессору (процессорам) запросы аппаратных прерываний.

Взаимодействие программ с устройствами, подключенными к системной шине, возможно следующими способами:

• через регистры устройств, отображенные на пространство памяти или пространство ввода/вывода;

• через области адресов памяти, принадлежащей устройству (физически расположенной на контроллере или адаптере устройства);

• через регистры конфигурационного пространства PCI (для устройств, подключенных к PCI, PCI–X, PCI-Express, AGP);

• через области системного ОЗУ, доступные активным устройствам-мастерам шины (обмен с использованием DMA);

• через аппаратные прерывания, сигнализируемые устройствами по доступным им линиям IRQx (ISA) или INTx# (PCI), а также по сообщениям MSI (PCI).

Обращения к регистрам конфигурационного пространства PCI (также «плоского») не относятся к базовым свойствам системной шины, поскольку программно они реализуются операциями обращения к пространству ввода/вывода и (или) памяти.

С устройствами, подключенными к интерфейсам периферийного уровня, взаимодействие возможно только через их контроллеры (адаптеры), подключенные к системной шине. На системной шине «видны» и доступны только эти адаптеры и контроллеры. Способы взаимодействия с устройствами определяются интерфейсом контроллера. Особенности взаимодействия с устройствами шин USB и FireWire рассмотрены далее, интерфейсы хост-контроллеров этих шин рассмотрены в главах 15 и 25.

Программное обеспечение компьютера состоит из ряда компонентов: прикладного ПО (исполняемые модули – .EXE-файлы), драйверов устройств, системных драйверов, динамически компонуемых модулей, BIOS. Эти компоненты имеют различные возможности взаимодействия с устройствами, состав используемых компонентов зависит от операционной системы и уровня разделяемости данного устройства. Между прикладным ПО и периферийными устройствами возможны следующие варианты отношений:

• одиночное монопольное подключение: ПУ подключено к системной шине (возможно, через промежуточный периферийный интерфейс). С этим устройством в любой момент времени может взаимодействовать лишь одно приложение. Это самый простой вариант в плане организации взаимодействия ПО и устройства;

• групповое монопольное подключение: группа конечных ПУ подключена через промежуточный интерфейс к одному контроллеру, подключенному к системной шине. С данными устройствами может в любой момент времени взаимодействовать только одно приложение. По сравнению с предыдущим вариантом, здесь появляется небольшое усложнение, связанное с выбором конкретного конечного устройства для текущей операции обмена. Промежуточный интерфейс должен обеспечивать адресацию, управляемую приложением;

• одиночное разделяемое подключение: единственное конечное ПУ, подключенное к системной шине, может использоваться несколькими приложениями и/или процессами.

Каждое из приложений (процессов) взаимодействует с устройством так, как будто оно – единственный «клиент» данного устройства. В структуре ПО, обеспечивающего взаимодействие с данным устройством, должны присутствовать средства виртуализации данного устройства. Эти средства и создают приложениям иллюзию монопольного взаимодействия с устройством. Пример – дисплей, подключенный к графическому адаптеру, с поддержкой оконного интерфейса. Здесь каждое приложение в отведенном ему логическом окне выполняет вывод изображения, не заботясь о текущем положении окна. Другой пример – клавиатура, обеспечивающая ввод символов в активное приложение;

• множественное разделяемое подключение: множество конечных ПУ подключено через периферийный интерфейс к общему контроллеру, связанному с системной шиной. Возможно одновременное взаимодействие нескольких приложений (процессов) с различными конечными ПУ. Сложность заключается в разделяемости: все взаимодействия осуществляются через общий контроллер периферийного интерфейса. Дополнительно возможно и коллективное использование конечных ПУ, для чего требуется виртуализация этих устройств. Примеры подключения: шины SCSI, USB, FireWire.

Вполне очевидно, что с точки зрения логических связей прикладное ПО может взаимодействовать с устройством непосредственно лишь в монопольном варианте использования. Все остальные варианты требуют выделения специальных модулей – драйверов, решающих задачи организации разделяемого использования контроллера и/или виртуализации устройства. Однако и для монопольного варианта отделение драйвера от прикладного ПО полезно с точки зрения модульности: при должной организации интерфейса между драйвером и прикладным ПО переход на использование новой модели устройства и/или на иной интерфейс его подключения потребует только смены драйвера, но не переработки прикладного ПО.

Взаимодействие программ, выполняемых центральным процессором (хост-программ), с периферийными устройствами возможно тремя основными способами:

• программно-управляемый обмен;

• прямой доступ к памяти;

• прерывания.

Программно-управляемый обмен – PIO (Programmed Input-Output). В исполняемой программе (или драйверах, которыми она пользуется) присутствуют инструкции ввода/вывода для портов устройства или инструкции обращений к областям памяти, находящейся в устройстве. Реальное физическое взаимодействие с устройством (и вызываемые этим изменения состояния устройств) происходит в момент выполнения этих инструкций. Такая жесткая синхронизация программы и устройства из рассматриваемых шин имеется в PCI/PCI–X, когда устройство является ведомым (target). Из интерфейсов, не рассмотренных в данной книге, такой способ обмена используется в LPT и COM портах (в режимах без FIFO и DMA), а также в шине ATA (при доступе к регистрам устройства и обмене данными в режиме PIO). Данный способ взаимодействия позволяет предельно упростить интерфейсную часть периферийного устройства. Расплатой за это упрощение является нагрузка на центральный процессор. Отметим, что применительно к шине PCI (и всем ее «родственникам») программно-управляемый обмен не позволяет приблизиться к декларированной высокой пропускной способности шины. Причиной тому является неспособность процессора породить длинные пакетные транзакции на шине PCI (см. главу 2), поэтому следует избегать данного способа взаимодействия при интенсивном обмене данными;

Прямой доступ к памяти – DMA (Direct Memory Access). Обмен между системной памятью (ОЗУ) и устройством выполняется без непосредственного участия процессора. Обмен осуществляет контроллер прямого доступа, для устройств шины PCI (и всех ее «родственников») контроллер является частью устройства – мастера шины (Bus Master). Штатного централизованного контроллера DMA, как это было в архитектуре ISA, для шины PCI нет.[6] В зависимости от того, кто является инициатором обмена, различают два варианта прямого доступа:

Поделиться с друзьями: