Интерфейсы ПК

       

А.2. Пространство ввода/вывода


А.2. Пространство ввода/вывода

Процессоры х86 имеют раздельную адресацию памяти и пор- тов ввода/вывода. Инструкции ввода/вывода порождают шинные циклы обмена, в которых вырабатываются сигналы IORD# (чтение порта) и IOWR# (запись в порт) на шинах ввода/вывода. Эти сигналы отличают пространство ввода/ вывода от пространства памяти, где соответствующие опе- рации чтения и записи вырабатывают сигналы MEMRD# и MEMWR#. Для обращения к пространству ввода/вывода пред- назначены четыре основные инструкции процессора: IN (ввод в регистр), OUT (вывод из регистра), INS (ввод из порта в элемент строки памяти) и OUTS (вывод элемента из строки памяти). Последние две инструкции с префиксом повтора REP используются для быстрой пересылки блоков данных между портом и памятью. Разрядность слова, передаваемо- го за одну инструкцию ввода/вывода, может составлять 8, 16 или 32 бита. В зависимости от выравнивания адреса по гра- нице слова и разрядности шины это слово может переда- ваться за один или несколько циклов шины.

Сигналы IORD# и IOWR# вырабатываются и в циклах DMA;

в этом случае на шину адреса подается адрес памяти, к кото- рой производится доступ, а не порта. Для блокировки сраба- тьшания дешифратора адреса порта в цикле DMA в шине ISA имеется сигнал AEN. Селективное программное управление сигналом AENx для каждого слота шины EISA дает возмож- ность изолировать пространства ввода/вывода портов, что используется для программного конфигурирования адресов адаптеров. В шине ISA разделение слотов не предусмотрено, что объясняет сложность реализации для нее системы РпР.

Для дешифрации адреса в оригинальном PC из 16 бит ис- пользовались только младшие 10 (АО-А9), что позволяет об-

ращаться к портам 0-3FFh. Старшие биты адреса, хотя и поступают на шину, устройствами игнорируются. Так, обра- щение по адресам 378h, 778h, B78h и F78h воспринимается устройствами одинаково. В адаптерах для шин МСА и PCI используются все 16 бит адреса. Современные системные платы полностью дешифруют адрес.


В реальном режиме процессора программе доступно все про- странство адресов ввода/вывода. В защищенном режиме (в частности, в режиме виртуального процессора 86) можно программно ограничить пространство ввода/вывода, опре- делив его максимальный размер. Внутри разрешенной обла- сти доступ может быть разрешен или запрещен для каждого конкретного адреса. Размер области и карта разрешенных портов (70 Permission Bitmap) задаются ОС в дескрипторе сегмента состояния задачи (TSS). При обращении по нераз- решенному адресу вырабатывается исключение процессора, обработчик которого определяется ОС. Возможно снятие задачи-нарушителя. Не исключено, что по обращению к пор- ту ОС выполнит некоторые действия, создав для програм- мы иллюзию реальной операции ввода/вывода.

Несколько портов вывода могут иметь совпадающие адреса. Операции записи они будут отрабатывать нормально. Для операций считывания ситуация другая. Если несколько пор- тов ввода имеют совпадающий адрес, при считывании они передают свои данные на шину. Если они находятся на од- ной физической шине, возникает конфликт. При прочих рав- ных условиях для каждого бита шины "побеждает" порт, выводящий логический ноль. Так, если один порт "хочет" передать байт OFh, а другой - FOh, то процессор считает OOh. Если порты находятся на разных физических шинах (напри- мер, один в ISA, а другой - в PCI), конфликта не будет, по- скольку шины отделены друг от друга буферами данных. Каждой шине назначается своя область ввода, и дешифра- тор, расположенный на системной плате, при чтении откры- вает соответствующие буферы, так что реально считывают- ся данные только с одной шины. При записи в порты данные (и сигнал записи) обычно распространяются по всем ши- нам компьютера. Адреса Oh-OFFh отведены для устройств системной платы, чтение по этим адресам не распространя-

ется на шины расширения. Для современных плат со встро- енной периферией и несколькими шинами (ISA, PCI) рас- пределением адресов управляет BIOS через регистры кон- фигурирования чипсета.



Приведенные выше рассуждения справедливы и для про- странства памяти, но, как правило, они актуальны только для портов ввода/вывода.

Карта распределения адресов ввода/вывода стандартных устройств приведена в табл. АЛ. Подразумевается 10-битная дешифрация адреса.



AT и PS/2

PC/XT

Назначение

000-OOF

000-OOF

Контроллер DMA #1 8237

010-01F

PS/2 - расширение DMA # 1

020-021

020-021

Контроллер прерываний #1 - 8259А

040-05F

040-043

Таймер (PC/XT: 8253, AT: 8254)

060

060

Диагностический регистр POST (только запись)

060-063

Системный интерфейс 8255

060,064

Контроллер клавиатуры AT 8042

061

Источники NMI и управление звуком

070-07F

Память CMOS и маска NMI

080

Диагностический регистр

080-08F

080-083

Регистры страниц DMA

090-097

PS/2: микроканал, арбитр и т. д.

ОАО

Маска NMI

OAO-OBF

Контроллер прерываний #2 - 8259А

OCO-ODF

Контроллер DMA #2 8237А-5

OFO-OFF

Сопроцессор 80287

100-1 EF

Управление микроканалом PS/2

170-177

Контроллер НЖМД #2 (IDE#2)

1FO-1F7

Контроллер НЖМД #1 (IDE#1)

AT и PS/2

PC/XT

Назначение

200-207

200-20F

Игровой адаптер

210-217

Блок расширений

238-23F

COM4

278-27F

278-27F

Параллельный порт LPT2 (LPT3 при наличии MDA)

2А2-2АЗ

Часы MSM48321RS

2CO-2DF

2CO-2DF

EGA #2

2ЕО-2Е7

COM4

2E8-2EF

COM4

2F8-2FF

2F8-2FF

COM2

300-31F

Плата-прототип

320-32F

Жесткий диск XT

338-33F

COM3

370-377

Контроллер НГМД #2

376-377

Порты команд IDE#2

378-37F

378-37F

Параллельный порт LPT1 (LPT2 при наличии MDA)

380-38F

380-38F

Синхронный адаптер SDLC/BSC #2

3AO-3AF

ЗАО-ЗА9

Синхронный адаптер BSC #1

ЗВО-ЗВВ

ЗВО-ЗВВ

Монохромный адаптер (MDA)

ЗВ4-ЗС9

Видеосистема PS/2

3BC-3BF

3BC-3BF

Параллельный порт LPT1 платы MDA

3CO-3CF

3CO-3CF

EGA#1

3CO-3DF

3CO-3DF

VGA

3DO-3DF

3DO-3DF

CGA/EGA

ЗЕО-ЗЕ7

COM3

3E8-3EF

COM3

3FO-3F7

3FO-3F7

Контроллер НГМД #1

3F6-3F7

Порты команд IDE#1

3F8-3FF

3F8-3FF

СОМ1


Содержание раздела