Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

Современные устройства PCI и PCI-E для размещения своих регистров в ос­новном используют пространство памяти, поскольку оно достаточно велико и спецификации PCI позволяют перемещать занимаемые области в любую часть пространства. Использование пространства ввода-вывода не приветству­ется: оно маленькое, к тому же «перегорожено» регистрами традиционных устройств и их псевдонимами, порожденными неполным использованием шины адреса в ISA.

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

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

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

♦ программный обмен;

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

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

Программный обмен с устройством осуществляется с помощью инструкций вво­да-вывода для портов устройства или инструкций обращений к областям памя­ти, находящейся в устройстве. Эти инструкции размещаются в прикладной программе или драйверах, которыми она пользуется. Реальное физическое взаимодействие с устройством и вызываемые этим изменения состояния уст­ройства происходят в момент выполнения этих инструкций. Данный способ взаимодействия позволяет предельно упростить интерфейсную часть перифе­рийного устройства. Расплатой за это упрощение является дополнительная на­грузка на центральный процессор. Программный обмен можно подразделить на два типа:

♦ При программно-управляемом обмене перед передачей очередного байта про­
граммно анализируется (и ожидается) готовность устройства, для чего счи-
тывается его регистр состояния. Такой обмен сильно загружает процессор
и не позволяет достичь высоких скоростей передачи данных, особенно если
программа формирует и управляющие сигналы обмена. Так, например, рабо­
тает драйвер параллельного порта в стандартном режиме, когда строб дан­
ных формируется двумя инструкциями OUT.

В случае блочного обмена РЮ (Programmed Input/Output — программируе­
мый ввод-вывод) цепочка байтов, слов или двойных слов между памятью
и портом ввода-вывода пересылается с помощью одной инструкции REP
INS/OUTS. Для этих инструкций задаются начальный адрес памяти, длина
блока, адрес порта и направление изменения адреса памяти (инкремент или
декремент). Инструкции блочной пересылки (и обмен РЮ) появились с про­
цессорами 80286, они обеспечивают более быстрый обмен, чем стандартный
контроллер DMA (8237А). Передача в режиме РЮ применяется для обмена
с устройствами ATA (IDE) и LPT-портом (в режимах ЕРР и ЕСР). Для уст­
ройств АТА определен ряд режимов обмена РЮ Mode x (см. 19.2) со скоростями от 3,3 (PIO Mode 0) до 22,2 Мбайт/с (РЮ Mode 4). Готовность к обме­ну проверяется один раз перед передачей блока, готовое устройство обязано выдержать пересылку всего блока. Управление потоком возможно с ис­пользованием сигнала готовности, притормаживающего шинные циклы об­мена.

Отметим, что применительно к шине PCI (и всем ее «родственникам») про­граммный обмен (даже блочный) не позволяет приблизиться к декларирован­ной высокой пропускной способности шины. Причиной тому является неспо­собность процессора породить длинные пакетные транзакции на шине PCI (см. 14.4). По этой причине следует избегать данного способа взаимодействия при интенсивном обмене данными.

Прямой доступ к памяти (DMA) минимизирует участие процессора в обмене данными с устройством. В зависимости от того, кто является инициатором об­мена, различают два варианта прямого доступа: по инициативе хоста и по ини­циативе устройства:

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

DMA no инициативе устройства (target Initiated DMA). Хост-программа фор­
мирует в памяти программу ввода-вывода для устройства (обычно это свя­
занный список дескрипторов передач) и указывает устройству на ее начало
(начало списка). Контроллер устройства исполняет эту программу: считыва­
ет дескрипторы из ОЗУ и по ним организует сеансы передачи данных между
устройством и буферами в ОЗУ, описанными дескрипторами передач. Фор­
мирование программы может быть статическим или динамическим. В пер­
вом случае хост-программа передает устройству указатель на готовый спи­
сок дескрипторов и не имеет права его модифицировать до тех пор, пока
устройство не отработает список до конца. Так, например, работает традици­
онный контроллер PCI шины АТА. При динамическом формировании хост
может добавлять новые дескрипторы (в конец списка), постоянно «подбра­
сывая» контроллеру новые задания. Подобным образом работают контрол­
леры шин USB и FireWire, PCI-контроллеры локальных сетей и ряд дру­
гих. Функционирование устройства по программе требует усложнения его
контроллера, но эти затраты окупаются повышением производительности
и эффективности ввода-вывода. При этом стараются минимизировать число
прерываний центрального процессора, инициируемых устройством.

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

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

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

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

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

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

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.