Interested Article - Порт ввода-вывода
- 2021-07-16
- 1
Ввод-вывод через порты ( англ. I/O ports ) — схемотехническое решение, организующее взаимодействие процессора и устройств ввода-вывода. Противоположность вводу-выводу через память .
Во многих моделях процессоров ввод-вывод организуется теми же функциями, что и чтение-запись в память — так называемый «ввод-вывод через память». Соответственно, схемотехнически устройства ввода-вывода располагаются на шине памяти, и часть адресов памяти направляется на ввод-вывод. В процессорах
Intel
, микроконтроллерах
AVR
и некоторых других существуют отдельные команды для ввода-вывода —
IN
и
OUT
— и, соответственно, отдельное адресное пространство: в процессорах Intel — от 0000
16
до FFFF
16
.
Порты ввода-вывода создаются в системном оборудовании, которое циклически декодирует управляющие, адресные и контакты данных процессора. Затем порты настраиваются для обеспечения связи с периферийными устройствами ввода-вывода .
Одни порты используются для передачи данных (например, приём данных от клавиатуры или чтение времени системных часов), другие — для управления периферийными устройствами (команда чтения данных с диска). Исходя из этого порт ввода-вывода может быть портом только для ввода, только вывода, а также двунаправленным портом.
Ввод-вывод через память никак не связан с прямым доступом к памяти ; ПДП — отдельное схемное решение, связывающее шину ввода-вывода с контроллером памяти и разгружающее процессор на крупных операциях ввода-вывода. В машине с ПДП, чтобы записать блок памяти, например, на диск, надо сформировать этот блок в памяти, а затем операциями ввода-вывода (либо через порт, либо через специальный адрес памяти, в зависимости от архитектуры) отправить команду «Начать запись». Когда запись будет закончена, устройство каким-то образом предупредит процессор об этом (например, прерыванием ). В частности, известные любому знакомому с DOS три параметра SoundBlaster — порт, DMA и IRQ — указывают, как передавать звуковой плате команды, как она будет брать звуковую волну из памяти и как плата сообщит процессору, что отрезок волны проигран.
Порты или память?
Преимущества портов:
- Возможна совсем другая схемотехническая организация ввода-вывода.
- Человек, читающий ассемблерный листинг, сразу же видит, что это работа не с памятью, а с внешним устройством.
- Всё адресное пространство машины можно пустить на ОЗУ, без всяких «дыр» наподобие UMB .
- Для машин низкой разрядности, у которых адрес в памяти задаётся регистровой парой, а на порт хватает и одного регистра, ускоряется работа с внешними устройствами.
Преимущества памяти:
- Упрощение конструкции процессора.
- Более широкий набор возможных инструкций: все инструкции, способные записать данные в память, в том числе автоинкрементные и SIMD , могут заниматься вводом-выводом.
- Удобнее работа с функциями, оперирующими большими объёмами данных (например, чтение-запись на , в видеоадаптер ).
Порты в архитектуре IA-32
Процессор позволяет осуществлять ввод-вывод как через память, так и через порты. Доступ к портам осуществляется особыми командами
IN
,
INS
,
INSB
,
INSW
,
INSD
,
OUT
,
OUTS
,
OUTSB
,
OUTSW
и
OUTSD
; доступ к памяти — обычными функциями работы с памятью (
MOV
,
ADD
,
LODSB
и прочими). Два последовательных порта могут объединяться в один двухбайтовый порт, четыре — в один четырёхбайтовый. Как и с памятью, для максимальной производительности номера портов должны быть выровнены соответственно по 2- и 4-байтовой границе. Если требуется записывать данные в два соседних порта в определённом порядке, этого нельзя делать многобайтовыми командами (на выровненных портах ввод-вывод происходит параллельно, на невыровненных — порядок вызова
не определён
).
Процессор умеет проецировать порты в память; при этом процессор гарантирует, что операция ввода-вывода через порт завершится до того, как начнёт выполняться следующая команда. С вводом-выводом через память такой гарантии нет. Впрочем, процессор не проверяет ошибок чётности на портах, поэтому в системах высокой надёжности программист должен быть готов к ошибкам чётности.
Физически адрес порта подаётся через ту же адресную шину, что и адрес памяти. В процессорах Intel архитектуры x86 (до Pentium ) была линия MI/O# (1 — память, 0 — порт); в более поздних эту функцию выполняют линии запроса команды.
- 2021-07-16
- 1