Архитектура ввода*вывода

March 27, 2012 by admin Комментировать »

В этой главе вкратце рассматриваются основные аппаратно программные аспекты, ка сающиеся организации  и функционирования подсистем ввода вывода в компьютерных сис темах с различной конфигурацией  системных шин, включая шину PCI платформы  x86, которая наиболее часто применяется в персональных компьютерах. Такой анализ поможет глубже понять принципы функционирования различных периферийных устройств в различных систе мах и облегчит задачи программирования  таких устройств. Под термином «подсистема ввода вывода» обычно понимают как  аппаратные устройства компьютера, так и программный ин терфейс, позволяющий взаимодействовать с ними.

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

Рис. 2.7

Временная диаграмма работы цикла записи на шине PCI

Здесь я не буду анализировать  назначение  сигнальных линий PCI шины – их назначение описано  в  многочисленной  литературе и спецификациях на стандарт. По ходу я объясню смысл сигналов,  присутствующих на шине. Самое первое, что следует отметить при анализе работы шины PCI – синхронизацию  любых операций по фронту импульсов тактовой частоты CLK. Информация на шине будет действительна при перепаде сигнала CLK из высокого  уров ня в низкий, причем это касается команд, адресов, данных и сигналов состояния.

Новый цикл шины начинается  с установки  сигнала  FRAME# в низкий уровень, который свидетельствует о выполнении операции на шине. Высокий уровень на этой линии запрещает обмен  данными.  После установки  сигнала  FRAME# в  низкий  уровень  на  линии  адреса

AD[0:31]  выставляется адрес устройства, которому необходимо передать данные. Одновре менно на линии команд C/BE# выставляется код команды, которая будет выполняться (в дан ном случае, код равен 0011,  что соответствует записи).

На линию DEVSEL# выставляется  сигнал  выбора  устройства  (активный  уровень  низкий). Наконец,  контроллер шины выставляет на линию сигнал IRDY# готовности данных для записи устройства. Пока целевое устройство (target) не выставит сигнал готовности к приему данных на линию  TRDY#, никакой   записи  данных в устройство  не произойдет,  и логика  шины будет ожидать,  пока  сигнал  на линии TRDY# не станет активным (низкий уровень).

Из временной  диаграммы видно, что при 3 м тактовом импульсе CLK запись данных все еще невозможна,  поскольку нет готовности устройства к приему данных (об этом свидетель ствует высокий  уровень  на линии TRDY#). Наконец, устройство сигнализирует о готовности принять данные, которые и записываются  в устройство по фронту 4 го синхроимпульса CLK. Цикл записи  заканчивается  при установке сигнала FRAME# в высокий уровень.

Как  видно из описания  цикла  работы шины PCI, она, по существу, является асинхронной двунаправленной шиной обмена данными, скорость обмена на которой может варьировать ся в зависимости от характеристик производительности устройства ввода вывода. Аппарат ный интерфейс устройства ввода вывода для такой шины будет, естественно, несколько сложнее, чем тот, который мы рассмотрели для гипотетической  шины обмена данными ранее в этой главе.

Что же касается программной  части, то доступ к портам ввода вывода осуществляется посредством операций чтения записи с использованием  стандартных инструкций процессо ра (для процессоров, совместимых с Intel, это команды in/out  и их модификации). Если же устройство работает с регистрами, отображаемыми  на память, то доступ к ним осуществляет ся с использованием инструкций mov. Данные, с которыми оперирует порт, могут иметь раз мер 1 байт, 2 байта (слово) и 4 байта (двойное слово).

Проанализируем, как  выполнить чтение регистра состояния параллельного порта. Для этой цели можно использовать инструкцию in, например:

mov  DX, 0x379 in  AL, DX

Первая команда  помещает в регистр DX адрес порта, а вторая читает данные размером в 1 байт в регистр AL процессора.

Из всего пространства адресов ввода вывода (0–0xFFFF) часть адресов резервируется си

стемой и не должна использоваться в программах пользователей — это адреса с 0xF8 по 0xFF.

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

Второй пример. Для преобразования  сигналов интерфейса RS 232, используемого при обмене данных через последовательный порт, в сигналы PCI на материнской плате имеется контроллер UART (асинхронного приемопередатчика). Специализированные контроллеры ис пользуются и для любых других интерфейсов( параллельного порта, Bluetooth,  Wi Fi и т. д.).

В более ранних операционных системах Windows 98/Me  программы пользователя могли напрямую обращаться к портам ввода вывода посредством инструкций процессора in и out, о которых я упоминал ранее. Для операционных  систем Windows 2000/XP/2003, в которых код  пользовательской  программы  не  имеет  доступа к адресному  пространству  системы (к которому принадлежат и порты ввода вывода), выполнение операций с устройствами вво да вывода возможно  только посредством драйверов устройств, а прямой доступ к портам в некоторых случаях невозможен даже из драйвера.

При работе процессора в защищенном режиме защита доступа к портам ввода вывода

обеспечивается двумя механизмами:

    установкой  уровня привилегий  ввода вывода  в поле IOPL (I/O  Provilege level) (биты

12 13 в регистре флагов процессора EFLAGS);

    картой, содержащей биты доступа в  сегменте состояния задачи TSS (Task State

Segment).

Поле IOPL в регистре флагов позволяет  управлять доступом к пространству адресов по средством ограничения использования определенных инструкций процессора. Этот меха низм  защиты позволяет устанавливать необходимый для операционной  системы уровень привилегий  для выполнения  операций ввода вывода.  В общем случае, доступ к адресному пространству ввода вывода ограничен  уровнями 0 и 1. В этом случае операции ввода выво да могут выполнять драйверы ядра и драйверы устройств, в то время как приложения с мень шим уровнем привилегий операции ввода вывода выполнить не смогут. Для менее привиле гированных программ  доступны механизмы ввода вывода посредством вызовов  функций интерфейса WinAPI.

Следующие инструкции  будут выполнены  только в том случае, если уровень привилегий выполняющейся   программы   (CPL, Current  Privilege Level) меньше  или равен  установленному  в IOPL: in, ins, out, outs, cli, sti.

Любая попытка выполнить эти инструкции в программе, уровень привилегий которой недостаточен, вызывает исключение общей защиты (General Protection Exceptin). Поскольку каждая  выполняющаяся задача получает собственную копию  регистра флагов, то для нее устанавливается свой IOPL.

Рассмотрим инструкции процессора, используемые при выполнении операций ввода

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

Инструкции in (ввод данных с порта) и out (вывод данных в порт) передают данные между

портом и регистрами EAX (32 разрядная операция), AX (16 разрядная  операция) или AL (опе рация с одним байтом). Адрес порта может быть задан непосредственно в команде или по средством регистра DX.

Например,

in    AL, 0x378 mov  DX, 0x379 out  DX, AL

Строковые инструкции ins и outs пересылают данные между памятью и портом ввода вывода. При этом адрес порта заносится  в регистр DX, а адрес области памяти определяется одной из пар регистров  DS:ESI (при вводе) или ES:EDI (при выводе данных).

При использовании префиксов повторения (например, rep) инструкции ins и outs выпол няют поблочную передачу данных. В этом случае регистр ESI или EDI инкрементируется  или декрементируется (в зависимости  от значения  флага DF), чтобы указывать  на следующий байт, слово или двойное слово.

Следующие, более высокие уровни взаимодействия с устройствами используются опера ционными системами (системный уровень) и пользовательскими приложениями. Во всех со временных  операционных  системах все устройства ввода вывода,  а также все файлы и ката логи для пользовательских процессов представлены как  объекты файловой системы, а это означает, что доступ к объектам и операции с ними выполняются по некоторым унифициро ванным правилам, независимо  от природы объекта (устройство, файл, именованный канал, сокет и т. д.). Такая модель позволяет пользовательским  и системным процессам использо вать для работы с объектами  файловой системы набор стандартных функций интерфейса API. Замечу, что эта модель взаимодействия изначально была использована  в операционных си стемах UNIX и хорошо себя зарекомендовала.

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

В рассмотренном  только что примере  чтение порта ввода  с адресом 0x379 возможно только из программы, выполняющейся в режиме ядра. Например, программный код пользо вательской программы в Windows работает только в режиме пользователя и взаимодейству ет с операционной системой посредством интерфейса прикладного программирования  WinAPI, который реализован в виде подсистемы Win32.

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

Источник:  Магда Ю. С. Компьютер  в домашней лаборатории.  – М.: ДМК Пресс, 2008. – 200 с.: ил.

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

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты