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

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

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

Общие вопросы организации интерфейсов

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

Структура компьютера

PC$совместимые компьютеры, как и большинство других, построены по класси$ ческой схеме фон$неймановской машины образца 1945 года. Согласно этой схеме, компьютер состоит из центрального процессора (ЦП, CPU), памяти и устройств ввода/вывода. Процессор исполняет программы, находящиеся в памяти; память предназначена для хранения программ и данных, доступных процессору; устрой ства ввода/вывода (УВВ) предназначены для связи с внешним миром. Время вне$ сло небольшие коррективы в названия этих «трех китов», и сейчас то, что попада$ ло под название УВВ, называют периферийными устройствами. Процессор (один или несколько), память и необходимые элементы, связывающие их между собой и другими устройствами, называют центральной частью или ядром компьютера (или просто центром).

Периферийные устройства (ПУ) — это все программно$доступные компоненты компьютера, не попавшие в его центральную часть. Их можно разделить по назна$ чению на несколько классов:

устройства хранения данных (устройства внешней памяти) — дисковые (маг$ нитные, оптические, магнитооптические), ленточные (стримеры), твердотель$ ные (карты, модули и устройства USB на флэш$памяти). Эти устройства исполь$ зуются для сохранения информации из памяти на энергонезависимые носители и загрузки этой информации в оперативную память. В каком виде хранится информация на этих устройствах, нам не так уж важно (главное — правильно считать то, что сохранили);

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

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

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

Главным действием в компьютере является исполнение программного кода цент$ ральным процессором, и ЦП должен иметь возможность взаимодействия с ПУ.

Для обращения к периферийным устройствам в процессорах x86, применяемых в PC$совместимых компьютерах, специально выделено пространство ввода/вы вода (I/O Space), отдельное от памяти. Размер пространства адресов ввода/выво$ да 64 Кбайт; в этой области могут располагаться регистры периферийных устройств разрядностью 1, 2 или 4 байт, и для обращения к ним имеется несколько специаль$ ных инструкций процессора (IN, OUT, INS и OUTS). Регистры ПУ могут отображаться и в пространстве памяти — областях, свободных от оперативной и постоянной па$ мяти. Заметим, что обособление пространства ввода/вывода используется далеко не во всех архитектурах процессоров. В любом случае разные регистры разных устройств не должны пересекаться по адресам в своих пространствах — в этом со$ стоит требование бесконфликтного распределения ресурсов по адресам.

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

Иерархия и организация подключений

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

системную шину компьютера. Системную шину образуют следующие физические интерфейсы:

шина подключения центрального процессора (или нескольких процессоров в сложных системах) — FSB (Front Side Bus, фасадная шина)1;

шина подключения контроллеров памяти, оперативной и постоянной. Собствен$ но шина памяти (Memory Bus) системной уже не является, поскольку в ней фигурируют не системные адреса, а адреса физических банков памяти;

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

Типичные представители шин ввода/вывода в IBM PC — шина ISA (отмирающая) и шина PCI (развивающаяся в PCI$X и далее). Через шины ввода/вывода прохо$ дят все обращения ЦП к периферии. К шинам ввода/вывода подключаются кон троллеры и адаптеры2 периферийных устройств или их интерфейсов. Часть ПУ совмещена со своими контроллерами (адаптерами), как, например, сетевой адап$ тер Ethernet, подключенный к шине PCI. Другие же ПУ подключаются к своим контроллерам через промежуточные периферийные интерфейсы, являющиеся ниж$ ним уровнем иерархии подключений. Периферийные интерфейсы — самые разно$ образные из всех аппаратных интерфейсов. К периферии, подключаемой через промежуточные интерфейсы, относится большинство устройств хранения (диско$ вые, ленточные), устройств ввода/вывода (дисплеи, клавиатуры, мыши, принтеры, плоттеры), ряд коммуникационных устройств (внешние модемы). Для взаимодей$ ствия с ПУ процессор обращается к регистрам контроллера, «представляющего интересы» подключенных к нему устройств.

По назначению периферийные интерфейсы можно разделить на специализиро$ ванные и универсальные, выделенные и разделяемые:

специализированные интерфейсы ориентированы на подключение устройств определенного узкого класса, и в них используются сугубо специфические про$ токолы передачи информации. Примеры — популярнейший интерфейс мони$ торов VGA, интерфейс накопителя на гибких дисках, традиционные интерфей$ сы клавиатуры и мыши, IDE/ATA и ряд других;

универсальные интерфейсы имеют более широкое назначение, их протоколы обеспечивают доставку данных, не привязываясь к специфике передаваемой информации. Примеры — коммуникационные порты (COM), SCSI, USB, FireWire;

выделенные интерфейсы позволяют подключить к одному порту (точке подклю$ чения) адаптера (контроллера) лишь одно устройство; число подключаемых устройств ограничено числом портов. Примеры — COM$порт, LPT$порт в стан$ дартном режиме, интерфейс VGA$монитора, порт AGP, Serial SCSI;

разделяемые интерфейсы позволяют подключить к одному порту адаптера мно$ жество устройств. Варианты физического подключения разнообразны: шина (жесткая, как ISA или PCI; кабельная шина SCSI и IDE/ATA), цепочка (daisy

1Это понятие в ряде источников отождествляют с системной шиной, но в данной книге будем пользо$ ваться более широким толкованием понятия «системная шина».

2 Контроллер отличается от адаптера более высоким уровнем «интеллекта»

chain) устройств (SCSI, LPT$порт в стандарте IEEE 1284.3), логическая шина на хабах (USB) или встроенных повторителях (IEEE 1394 FireWire).

Параллельные и последовательные интерфейсы

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

параллельный интерфейс — для каждого бита передаваемой группы использу$ ется своя сигнальная линия (обычно с двоичным представлением), и все биты группы передаются одновременно за один квант времени. Примеры: параллель$ ный порт подключения принтера (LPT$порт, 8 бит), интерфейс ATA/ATAPI (16 бит), SCSI (8 или 16 бит), шина PCI (32 или 64 бита);

последовательный интерфейс — используется лишь одна сигнальная линия, и биты группы передаются друг за другом по очереди; на каждый из них отво$ дится свой квант времени (битовый интервал). Примеры: последовательный коммуникационный порт (COM$порт), последовательные шины USB и Fire$ Wire, PCI Express, интерфейсы локальных и глобальных сетей.

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

Теперь подробнее разберемся со скоростью передачи данных. Очевидно, что она равна числу бит, передаваемых за квант времени, деленному на продолжительность кванта. Для простоты можно оперировать тактовой частотой интерфейса — ве$ личиной, обратной длительности кванта. Это понятие естественно для синхрон$ ных интерфейсов, у которых имеется сигнал синхронизации (clock), определяю$ щий возможные моменты возникновения всех событий (смены состояния). Для асинхронных интерфейсов можно воспользоваться эквивалентной тактовой час$ тотой — величиной, обратной минимальной продолжительности одного состояния интерфейса. Теперь можно сказать, что максимальная (пиковая) скорость переда$ чи данных равна произведению тактовой частоты на разрядность интерфейса. У последовательного интерфейса разрядность 1 бит, у параллельного она соответ$

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

В параллельном интерфейсе существует явление перекоса (skew), существенно вли$ яющее на достижимый предел тактовой частоты. Суть его в том, что сигналы, од$ новременно выставленные на одной стороне интерфейсного кабеля, доходят до другого конца не одновременно из$за разброса характеристик цепей. На время про$ хождения влияет длина проводов, свойства изоляции, соединительных элементов и т. п. Очевидно, что перекос (разница во времени прибытия) сигналов разных битов должен быть существенно меньше кванта времени, иначе биты будут иска$ жаться (путаться с одноименными битами предшествующих и последующих по$ сылок). Вполне понятно, что перекос ограничивает и допустимую длину интер$ фейсных кабелей: при одной и той же относительной погрешности скорости распространения сигналов на большей длине набегает и больший перекос. Пере$ кос сдерживает и увеличение разрядности интерфейса: чем больше используется параллельных цепей, тем труднее добиться их идентичности. Из$за этого даже при$ ходится «широкий» (многоразрядный) интерфейс разбивать на несколько «узких» групп, для каждой из которых используются свои управляющие сигналы. В 90$х го$ дах в схемотехнике приемопередающих узлов стали осваиваться частоты в сотни мегагерц и выше, то есть длительность кванта стала измеряться единицами нано$ секунд. Достичь соизмеримо малого перекоса можно лишь в пределах жестких компактных конструкций (печатная плата), а для связи отдельных устройств ка$ белями длиной в десятки сантиметров пришлось остановиться на частотах, не пре$ вышающих десятков мегагерц. Для того чтобы ориентироваться в числах, отме$ тим, что за 1 нс сигнал пробегает по электрическому проводнику порядка 20–25 см. Наносекунда — это период сигнала с частотой 1 ГГц.

Для повышения пропускной способности параллельных интерфейсов с середины 90$х годов стали применять двойную синхронизацию DDR (Dual Data Rate). Ее идея заключается в выравнивании частот переключения информационных сигнальных линий и линий стробирования (синхронизации). В «классическом» варианте дан$ ные информационных линий воспринимаются только по одному перепаду (фрон$ ту или спаду) синхросигнала, что удваивает частоту переключения линии синх$ росигнала относительно линий данных. При двойной синхронизации данные воспринимаются и по фронту, и по спаду, так что частота смены состояний всех линий выравнивается, что при одних и тех же физических параметрах кабеля и ин$ терфейсных схем позволяет удвоить пропускную способность. Волна этих модер$ низаций началась с интерфейса ATA (режимы UltraDMA) и прокатилась уже и по SCSI (Ultra160 и выше), и по памяти (DDR SDRAM). Кроме того, на высоких

частотах применяется синхронизация от источника данных (Source Synchronous transfer): сигнал синхронизации, по которому определяются моменты переключе$ ния или действительности (валидности) данных, вырабатывается самим источ$ ником данных. Это позволяет точнее совмещать по времени данные и синхронизу$ ющие импульсы, поскольку они распространяются по интерфейсу параллельно

водном направлении. Альтернатива — синхронизация от общего источника (common clock) — не выдерживает высоких частот переключения, поскольку здесь

вразных (пространственных) точках временные соотношения между сигналами данных и сигналами синхронизации будут различными.

Повышение частоты переключений интерфейсных сигналов, как правило, сопро$ вождается понижением уровней сигналов, формируемых интерфейсными схема$ ми. Эта тенденция объясняется энергетическими соображениями: повышение ча$ стоты означает уменьшение времени, отводимого на переключения сигналов. Чем выше амплитуда сигнала, тем выше должна быть скорость нарастания сигнала и, следовательно, выходной ток передатчика. Повышение выходного тока (импульс$ ного!) нежелательно по разным причинам: большие перекрестные помехи в парал$ лельном интерфейсе, необходимость применения мощных выходных формирова$ телей, повышенное тепловыделение. Тенденцию снижения напряжения можно проследить на примере порта AGP (3,3/1,5/0,8 В), шин PCI/PCI$X (5/3,3/1,5 В), SCSI, шин памяти и процессоров.

В последовательном интерфейсе явления перекоса отсутствуют, так что повышать тактовую частоту можно вплоть до предела возможностей приемопередающих це$ пей. Конечно, есть ограничения и по частотным свойствам кабеля, но изготовить хороший кабель для одной сигнальной цепи гораздо проще, чем для группы цепей. А когда электрический кабель уже «не тянет» требуемые частоту и дальность, мож$ но перейти на оптический, у которого есть в этом плане огромные, еще не освоен$ ные «запасы прочности». Устраивать же параллельный оптический интерфейс — слишком дорогое удовольствие.1

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

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

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

1 В 10$гигабитной версии технологии Ethernet есть параллельно$последовательный вариант.

2Другие платформы могут отличаться по набору свойств, например не иметь выделенного простран$ ства ввода/вывода.

системной шине PC$совместимого компьютера2 — интерфейсе со следующими ба$ зовыми свойствами:

интерфейс обеспечивает транзакции обращения к пространствам памяти и вво$ да/вывода;

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

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

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

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

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

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

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

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

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

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

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

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

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

1Например, мастеру шины ISA доступна системная память лишь в пределах первых 16 Мбайт; масте$ рам шин PCI безусловно доступна системная память, но могут быть недоступны другие устройства PCI, от которых их отделяет главный мост.

Программное обеспечение компьютера состоит из ряда компонентов: прикладно$ го ПО (исполняемые модули — .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 нет1. В зависимости от того, кто является инициатором обмена, различают два варианта прямого доступа:

DMA по инициативе хоста (Host Initiated DMA). Задание на пересылку каждо$ го блока формирует программа, исполняемая на ЦП; она же сообщает контрол$ леру DMA параметры сеанса (начальный адрес, длину блока и направление передачи) записью в его регистры. Физические операции обмена синхронизи$ руются с устройством — оно своими внутренними сигналами запускает обмен

1Эмуляция централизованного контроллера, введенная на время миграции с ISA на PCI (см. главу 2), в расчет не берется.

и, если требуется, управляет потоком (вводит сигнал готовности). Этот вари$ ант требует довольно простых аппаратных средств устройства, расплата за уп$ рощение — необходимость привлечения ЦП к организации каждого сеанса (обычно по прерываниям). Это не очень эффективно при передаче больших объемов данных, которые могут располагаться в разных не смежных страницах физической памяти (см. далее);

DMA по инициативе устройства (Target Initiated DMA). Здесь хост$программа формирует в памяти программу ввода/вывода для устройства, обычно представ$ ляющую собой связанный список дескрипторов передач, и указывает устрой$ ству на начало списка. Контроллер устройства считывает эти дескрипторы из ОЗУ и по ним организует сеансы передачи данных между устройством и буфе$ рами в ОЗУ, описанными дескрипторами передач. Формирование программы может быть статическим или динамическим. В первом случае хост$программа передает устройству указатель на готовый список дескрипторов и не имеет пра$ ва его модифицировать до тех пор, пока устройство не отработает список до конца. Так, например, работает PCI$контроллер шины ATA. При динамическом формировании хост может добавлять новые дескрипторы (в конец списка), постоянно «подбрасывая» контроллеру новые задания. Так работают контрол$ леры шины USB и FireWire, PCI$контроллеры локальных сетей и ряд других. Работа устройства по программе требует усложнения его контроллера, но эти затраты окупаются повышением производительности и эффективности ввода/ вывода. При этом стараются минимизировать число прерываний центрального процессора, инициируемых устройством.

Прерывания (Interrupts) — сигнализация от устройства (его контроллера) централь$ ному процессору (процессорам в мультипроцессорных системах) о некоторых со$ бытиях, требующих программных действий хоста. Эти события асинхронны по отношению к программному коду, исполняемому процессором. Прерывания тре$ буют приостановки выполнения текущего потока инструкций (с сохранением со$ стояния) и запуска исполнения процедуры$обработчика прерывания ISR (Interrupt Service Routine). Эта процедура первым делом должна идентифицировать источ$ ник прерывания (а их может быть и несколько), затем выполнить действия, свя$ занные с реакцией на событие. Если события должны вызывать некоторые дей$ ствия прикладной программы, то обработчику прерывания следует только подать сигнал (через ОС), запускающий (или пробуждающий) поток инструкций, выпол$ няющий эти действия. Собственно процедура ISR должна быть оптимизирована по затраченному времени. Обслуживание прерываний, особенно в защищенном режиме, в PC$совместимых компьютерах на процессорах x86 связано со значитель$ ными накладными расходами. По этой причине их число стараются сократить. Значительные хлопоты доставляет идентификация источника прерывания — в архитектуре PC$совместимых компьютеров для этого используются традицион$ ные, но неэффективные механизмы. В ряде случаев прерывания от устройств за$ меняют поллингом — программно$управляемым опросом состояния устройств. При этом состояния множества устройств опрашивают по прерыванию от таймера.