Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шины.PCI,.USB.и.FireWire

.pdf
Скачиваний:
59
Добавлен:
19.03.2016
Размер:
6 Mб
Скачать

Вкомпьютерных системах с «интеллектуальной» системой ввода/вывода (I2O — Intelligent Input$Output) кроме центрального процессора имеется процессор вво да/вывода (IOP — Input$Output Processor). Этот процессор обычно имеет сокра$ щенную систему команд, ориентированную на задачи управления вводом/выво$ дом. В круг этих задач входит пересылка блоков данных, подсчет четности (для дисковых массивов RAID 3 и 5), преобразование данных между форматами Big Endian (популярный в телекоммуникациях) и Little Endian (принятый в процессо$ рах Intel). Процессор ввода/вывода может работать как в общем адресном про$ странстве, так и иметь свое обособленное адресное пространство для управляемой подсистемы ввода/вывода. Взаимодействие процессора ввода/вывода со своими устройствами ведется теми же тремя основными способами, что были описаны ранее.

Врядовых компьютерах обычно ограничиваются прямым управлением шиной (bus mastering), которое позволяет контроллерам ПУ (или их интерфейсам) самим об$ ращаться к системным ресурсам, выполняя необходимые обмены данными и уп$ равляющей информацией. Для этого контроллер ПУ должен взять на себя (на вре$ мя) роль инициатора транзакций на интерфейсе, связывающем его с центром (главным образом, с памятью). Поскольку традиционно этот интерфейс является шинным, такой активный контроллер называют мастером шины (bus master), даже если он подключается к выделенному двухточечному интерфейсу (порту AGP). Чаще всего прямое управление шиной используется для прямого доступа к опера$ тивной памяти. Прямое управление шиной может использоваться и для сигнали$ зации прерываний (MSI на шине PCI, см. главу 3). В новых версиях шины PCI$X и в PCI Express появилась возможность равнорангового взаимодействия устройств

(без участия процессора) — обмена сообщениями. При этом в адресации сообще$ ний не фигурируют адреса пространства памяти или ввода/вывода — обращения адресуются по идентификатору устройства (DIM — Device Identified Messages).

Особенности взаимодействия в PC совместимых компьютерах

Архитектурный облик PC$совместимого компьютера определяется свойствами используемых в них процессоров семейства x86. Современные процессоры x86, работающие в защищенном режиме, имеют довольно сложные механизмы виртуа$ лизации памяти, ввода/вывода и прерываний, из$за которых приходится разли$ чать физические и логические пространства (адреса памяти и ввода/вывода) и со$ бытия (операции ввода/вывода, прерывания).

Физический адрес ячейки памяти или порта ввода/вывода — это адрес, формируе$ мый на системной шине для обращения к данной ячейке. Логический адрес — это тот адрес, который формируется исполняемой программой (по замыслу програм$ миста) для доступа к требуемой ячейке. Логический адрес в процессорах x86 со$

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

Физическая операция ввода/вывода или обращения к памяти — это процесс (шин$ ный цикл), во время которого генерируются электрические сигналы, обеспечива$ ющие доступ к данной ячейке (порту). Логическая операция — это исполнение про$ граммной инструкции (команды) обращения к интересующей ячейке. Логическая операция не всегда порождает ожидаемую физическую операцию: при определен$ ных условиях она может блокироваться средствами защиты процессора, вызывая даже принудительное завершение программы, или же эмулироваться, создавая иллюзию физического исполнения.

Взаимодействие через пространство памяти

Вреальном режиме (при отключенной страничной переадресации) физический адрес, фигурирующий на системной шине, совпадает с линейным адресом, форми$ руемым прикладной программой. Тут все просто, правда, в стандартном (а не боль$ шом) реальном режиме доступен только первый мегабайт адресного пространства (то есть из устройств доступны только отображенные на область UMA).

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

Для обращения к регистрам устройства, расположенным в пространстве памяти (или к области памяти устройства), программа должна узнать физический адрес данной области. Далее она должна запросить у ОС линейный адрес, на который отображается этот физический адрес, и обращаться к нему по этому линейному адресу. Иного пути добраться до физического устройства у программы нет, и если ОС откажет в данном запросе, устройство окажется для этой программы недоступ$ ным. Для обращения к устройствам через пространство памяти у процессоров x86 предусмотрено большое число разнообразных инструкций, выполняющих как про$

сто пересылку, так и работающих с операндами в памяти (то есть в устройстве). Инструкции, модифицирующие ячейки памяти, порождают на системной шине блокированные транзакции «чтение$модификация$запись». Этот тип транзакций не приветствуется с точки зрения эффективности использования времени шины, так что предпочтительно избегать таких инструкций при взаимодействии с уст$ ройствами. Заметим, что инструкции процессора обычно не порождают эффек$ тивных пакетных транзакций на шине PCI, они вызывают лишь одиночные тран$ закции1. Некоторые программные ухищрения, позволяющие повысить эффектив$ ность программно$управляемого обмена, описаны в главе 2.

При организации прямого доступа к памяти, как по стандартным каналам DMA, так и при использовании ведущих устройств шин ISA и PCI, возникает ряд про$ блем, связанных со страничным преобразованием адресов. Программе требуется организовать обмен данными между устройством и некоторым буфером данных в ОЗУ, с которым программа общается по линейным адресам, а устройство — по физическим. Отметим ряд существенных моментов:

программа должна запросить у ОС физический адрес, которому соответствует линейный адрес предполагаемого буфера обмена. Именно этот физический ад$ рес должен задаваться устройству, осуществляющему DMA (или централизо$ ванному контроллеру DMA), при инициализации сеанса обмена (при указании начального адреса, длины блока и запуске канала);

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

если буфер данных не умещается в одной логической странице, возникает про$ блема пересечения границ. Обычный контроллер DMA работает по последова$ тельно изменяемым (инкрементируемым или декрементируемым) адресам. При пересечении границы логической страницы, возможно, потребуется скачок физического адреса, поскольку следующая логическая страница может иметь физическое отображение в произвольном (относительно предыдущей страни$ цы) месте ОЗУ. Чаще всего ОС оперирует страницами по 4 Кбайт, при этом пересылка больших блоков данных ведется «короткими перебежками», между которыми должна выполняться повторная инициализация контроллера DMA.

Проблема пересечения границ решается усложнением контроллеров DMA — при$ менением «разбросанной записи» в память (scatter write) и «собирающего чтения» памяти (gather read). В этом случае контроллеру DMA задается список описате$ лей блоков (начальный адрес и длина), каждый из которых не пересекает границ логической страницы. Отработав очередной блок памяти, контроллер переходит к следующему, и так до конца списка. Такие возможности имеет, например, стан$

1Передача 32$разрядного слова по невыровненному адресу породит пакетный цикл из двух передач, но эффективным (с точки зрения пропускной способности) его не назовешь.

дартный контроллер PCI IDE. Для передачи логически непрерывного буфера дан$ ных описатели его блоков могут быть сокращены. Так, например, можно задать полный физический адрес начала буфера, его длину и только список базовых ад$ ресов занимаемых им страниц. На каждой странице, кроме начальной, данные бу$ дут начинаться с нулевого адреса; на каждой странице, кроме последней, данные будут доходить до последнего адреса. Вместо длины буфера можно задавать и фи$ зический адрес его конца. Такие варианты описаний используются, например, в хост$контроллерах шин USB и FireWire.

Проблема пересечения границ может решаться и иначе, без усложнения контрол$ лера DMA. Для этого в памяти резервируется буфер значительного размера, ото$ браженный на непрерывную область физической памяти, и обмен данными физи$ ческое устройство выполняет только с этим буфером. Однако рядовое приложение не может создать такой буфер, он может быть организован лишь драйвером уст$ ройства. Приложения могут лишь получать указатели на этот буфер и обмениваться с ним данными. Таким образом, по пути от приложения к устройству появляется дополнительная «перевалочная база» (буфер драйвера) и, соответственно, дополни$ тельная пересылка данных, что приводит к дополнительным затратам времени.

Взаимодействие через пространство ввода/вывода

Для обращения программы к пространству ввода/вывода предназначены всего четыре инструкции процессора: IN (ввод из порта в регистр процессора), OUT (вы$ вод в порт из регистра процессора), INS (ввод из порта в элемент строки памяти) и OUTS (вывод элемента из строки памяти в порт). Последние две инструкции, по$ явившиеся с процессором 80286, могут использоваться с префиксом повтора REP, что обеспечивает быструю пересылку блоков данных между портом и памятью. Обмен данными с портами, при котором применяют строковые инструкции вво$ да/вывода, получил название PIO (Programmed Input/Output — программирован$ ный ввод/вывод).

Разрядность слова, передаваемого за одну инструкцию ввода/вывода, может со$ ставлять 8, 16 или 32 бита. В зависимости от выровненности адреса по границе слова и разрядности данных используемой шины это слово может передаваться за один или несколько циклов шины с указанием соответствующего нарастающего адреса в каждом цикле обращения к памяти. Инструкции ввода/вывода порожда$ ют шинные циклы обмена, в которых вырабатываются сигналы чтения порта/за$ писи в порт. Во избежание недоразумений и для экономии шинных циклов реко$ мендуется выравнивать адреса 16$битных портов по границе слова, а 32$битных — по границе двойного слова. Обращения по выровненным адресам выполняется за один цикл системной шины. Обращение по невыровненным адресам выполняется за несколько циклов, причем однозначная последовательность адресов обращений (которая зависит от модели процессора) не гарантируется. Так, например, одна инструкция вывода слова по нечетному адресу приведет к генерации двух смеж$ ных шинных циклов записи. При программировании обращений следует учиты$

вать специфику устройств ввода/вывода. Если, например, устройство допускает только 16$разрядные обращения, то старший байт его регистров будет доступен лишь при вводе$выводе слова по четному адресу.

В реальном режиме процессора программе доступно все пространство адресов вво$ да/вывода. В защищенном режиме инструкции ввода/вывода являются привиле$ гированными: возможность их исполнения зависит от текущего уровня привиле$ гий. В защищенном режиме 32$разрядных процессоров (частным случаем которого является и виртуальный режим V86) имеется возможность программного ограни$ чения доступного пространства ввода/вывода, определяя его максимальный раз$ мер (начиная с нулевого адреса и в пределах 64 Кбайт), а внутри разрешенной обла$ сти доступ может быть разрешен или запрещен для каждого конкретного адреса. Размер области и карта разрешенных портов (IO Permission Bitmap) задается опе$ рационной системой в дескрипторе сегмента состояния задачи (TSS). Карта раз$ решений влияет на исполнение инструкций ввода/вывода в зависимости от соот$ ношения текущего уровня привилегий и требуемого уровня привилегий ввода/ вывода. При недостаточных привилегиях обращение по неразрешенному адресу вызывает исключение процессора, а поведение его обработчика определяется опе$ рационной системой. Возможно снятие задачи$нарушителя (знаменитое сообще$ ние «приложение... выполнило недопустимую операцию и будет закрыто»). Воз$ можен и другой вариант, когда по обращению к порту монитор операционной системы выполняет некоторые действия, создавая для программы иллюзию ре$ альной операции ввода/вывода. Таким образом виртуальная машина по операци$ ям ввода/вывода может общаться с виртуальными устройствами. Программа, вы$ полняемая на нулевом уровне привилегий, безусловно может обращаться ко всем портам непосредственно.

Наиболее корректный (с точки зрения организации ОС) способ общения прило$ жения с портами устройства требует помещения инструкций ввода/вывода в драй$ вер устройства, работающий на уровне привилегий ОС (на нулевом уровне). Обращение к портам непосредственно из приложения возможно, если в карте раз$ решения портов бит для данного порта сброшен. Если бит установлен, то обраще$ ние к порту вызывает исключение защиты, которое обрабатывает VMM (диспет$ чер виртуальной машины). В этом случае VMM вызывает процедуру, назначенную для данного порта операционной системой. Это может быть либо специальная про$ цедура виртуального драйвера, установленного для данного порта, либо процеду$ ра по умолчанию. В первом случае ввод/вывод для данного порта приложению доступен только через виртуальный драйвер, вызов которого каждый раз будет приводить к издержкам переключения задач и смены уровня привилегий (от при$ ложения на третьем уровне к драйверу нулевого уровня). Однако с точки зрения идеологии многозадачности и защиты это естественное решение, обеспечивающее полную виртуализацию ввода/вывода. Процедура по умолчанию (в Windows 9x) открывает порт для данного приложения (сбрасывает бит в карте разрешений вво$ да/вывода) и выполняет собственно инструкцию ввода/вывода (возвращая при$

ложению результат ввода). Таким образом, приложению Windows 9x станут дос$ тупными любые порты, для которых не установлен виртуальный драйвер. Правда, первое обращение к каждому порту будет происходить медленно (через исключе$ ние), но последующие будут выполняться быстро. Если для взаимодействия с устройством задержка первого обращения критична, то при инициализации приложения можно выполнить «безобидные» обращения по адресам всех тре$ буемых портов, что откроет их для дальнейшей непосредственной работы (без издержек).

Заметим, что ОС Windows 9x не особо заботится о виртуализации и защите вво$ да/вывода; здесь, например, из DOS$окна можно обращаться к любым портам, даже к портам устройств, занятых операционной системой. В ОС Windows NT/2000/ XP защита портов строже и сложнее.

Шины PCI и PCI X

Шины PCI и PCI$X являются основными шинами расширения ввода/вывода

всовременных компьютерах; для подключения видеоадаптеров их дополняет порт AGP. Шины расширения ввода/вывода (Expansion Bus) являются средствами под$ ключения системного уровня: они позволяют адаптерам и контроллерам перифе$ рийных устройств непосредственно использовать системные ресурсы компьюте$ ра — пространство адресов памяти и ввода/вывода, прерывания, прямой доступ к памяти. Устройства, подключенные к шинам расширения, могут и сами управ$ лять этими шинами, получая доступ к остальным ресурсам компьютера. Шины расширения механически реализуются в виде слотов (щелевых разъемов) или штырьковых разъемов; для них характерна малая длина проводников, то есть они сугубо локальны, что позволяет достигать высоких скоростей работы. Эти шины могут и не выводиться на разъемы, но использоваться для подключения устройств

винтегрированных системных платах.

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

Шина PCI является синхронной — фиксация всех сигналов выполняется по поло$ жительному перепаду (фронту) сигнала CLK. Номинальной частотой синхрониза$ ции считается частота 33,3 МГц, при необходимости она может быть понижена. Начиная с версии PCI 2.1 допускается повышение частоты до 66,6 МГц при «со$ гласии» всех устройств на шине. В PCI$X частота может достигать 133 МГц.

В PCI используется параллельная мультиплексированная шина адреса/данных (AD) с типовой разрядностью 32 бит. Спецификация определяет возможность рас$ ширения разрядности до 64 бит; в PCI$X версии 2.0 определен также 16$битный вариант шины. При частоте шины 33 МГц теоретическая пропускная способность достигает 132 Mбайт/с для 32$битной шины и 264 Мбайт/с для 64$битной; при частоте синхронизации 66 МГц — 264 Мбайт/с и 528 Мбайт/с соответственно. Однако эти пиковые значения достигаются лишь во время передачи пакета: из$за протокольных накладных расходов реальная средняя пропускная способность шины оказывается ниже.

Сравнительные характеристики шин PCI и PCI$X и других шин расширения PC$ совместимых компьютеров приведены в табл. 1.1. Шина ISA из настольных ком$ пьютеров уходит, но она сохраняет свои позиции в промышленных и встраивае$ мых компьютерах, как в традиционном, слотовом, так и в «бутербродном» варианте PC/104. В блокнотных компьютерах широко применяются слоты PCMCIA с ши$ нами PC Card и Card Bus. Шина LPC является современным дешевым средством для подключения нересурсоемких устройств к системной плате.

Таблица 1.1. Сравнительные характеристики шин расширения

Шина

Пиковая про

Каналы Bus

ACFG1

Разряд

Разрядн Частота,

 

пускная спо

DMA

Master

 

ность

ность

МГц

 

собность,

 

 

 

данных

адреса

 

 

Mбайт/c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ISA 8

4

3

8

20

8

ISA 16

8

7

+

16

24

8

LPC

6,7

7

+

8/16/32

32

33

EISA

33,3

7

+

+

32

32

8,33

MCA 16

16

+

+

16

24

10

MCA 32

20

+

+

32

32

10

VLB

132

(+)

32/64

32

33–50 (66)

PCI

133–533

+

+

32/64

32/64

33/66

PCI X

533–4256

+

+

16/32/64

32/64

66–133

PCI

496–15872

+

+

1/2/4/8/

32/64

2,5 ГГц

Express

 

 

 

 

12/16/32

 

 

AGP 1x/2x/

266/533/

+

+

32

32/64

66

4x/8x

1066/2132

 

 

 

 

 

 

PCMCIA

10/20

+

+

8/16

26

10

Card Bus

132

+

+

32

32

33

 

 

 

 

 

 

 

 

1Поддержка автоматического конфигурирования. Для ISA PnP является поздней надстройкой, реали$ зуемой адаптерами и ПО.

Организация шин PCI и PCI X

Шина PCI позволяет объединять равноранговые устройства. Любое устройство шины может выступать как в роли инициатора транзакций (задатчика), так и в роли целевого устройства. Целевое устройство отвечает на транзакции, адресован$ ные к его ресурсам (областям памяти и портам ввода/вывода). Ядро компьютера (центральный процессор и память) для шины PCI также представляется устрой$ ством — главным мостом (host bridge). В транзакциях, обращенных к устройствам PCI, инициированных центральным процессором, главный мост является задат$ чиком. В транзакциях от устройств PCI, обращающихся к ядру (к системной па$ мяти), главный мост является целевым устройством. Право на управление шиной в любой момент времени дается лишь одному устройству данной шины; арбитраж запросов на управление шиной осуществляется централизованным способом. Ар$ битр, как правило, является частью моста.

Наличие активных устройств (помимо ЦП) позволяет выполнять в компьютере параллельно несколько операций обмена: одновременно с обращениями процес$ сора могут выполняться транзакции от мастеров шины PCI. Эта параллельность — PCI Concurrency — возможна лишь для обменов по непересекающимся путям. Од$ новременный доступ нескольких инициаторов к одному ресурсу (как правило, к системной памяти) требует довольно сложной организации контроллера этого ресурса, но ради повышения суммарной эффективности системы на эти усложне$ ния приходится идти. В системе с несколькими шинами PCI возможна параллель$ ная работа устройств$мастеров на разных шинах — PCI Peer Concurrency. Однако если они обращаются к одному ресурсу (системной памяти), то какие$то фазы этих обменов все$таки должны будут выполняться последовательно.

Каждая физическая шина 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);