Ввод-вывод через порты (англ. I/O ports) — схемотехническое решение, организующее взаимодействие процессора и периферийных (устройств ввода-вывода). Противоположность вводу-выводу через память.
Во многих моделях процессоров ввод-вывод организуется теми же функциями, что и чтение-запись в память — так называемый «ввод-вывод через память». Соответственно, схемотехнически устройства ввода-вывода располагаются на шине памяти, и часть адресов памяти направляется на ввод-вывод. В процессорах Intel, микроконтроллерах AVR и некоторых других существуют отдельные (команды) для ввода-вывода — IN
и OUT
— и, соответственно, отдельное адресное пространство: в процессорах Intel — от 000016 до FFFF16.
Порты ввода-вывода создаются в системном оборудовании, которое циклически декодирует управляющие, адресные и контакты данных процессора. Затем порты настраиваются для обеспечения связи с устройствами ввода-вывода.
Одни порты используются для передачи данных (например, приём данных от клавиатуры или чтение времени системных часов), другие — для управления периферийными устройствами (команда чтения данных (с диска)). Исходя из этого порт ввода-вывода может быть портом только для ввода, только вывода, а также двунаправленным портом.
Ввод-вывод через память никак не связан с (прямым доступом к памяти); ПДП (DMA) — отдельное схемное решение, связывающее шину ввода-вывода с контроллером памяти и разгружающее процессор на крупных операциях ввода-вывода. В машине с ПДП, чтобы записать блок памяти, например, на диск, надо сформировать этот блок в памяти, а затем операциями ввода-вывода (либо через порт, либо через специальный адрес памяти, в зависимости от архитектуры) отправить команду «Начать запись». Когда запись будет закончена, устройство каким-то образом предупредит процессор об этом (например, прерыванием). В частности, известные любому знакомому с 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 — порт); в более поздних эту функцию выполняют линии запроса команды.
Примечания
В статье не хватает (см. ). |
Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер