2

AFAIK, применяются следующие определения:

  • Порты ввода / вывода - это адреса памяти, используемые в качестве интерфейса для связи с внешними устройствами, например принтером.
  • Физический порт (т.е. разъем) - это физический интерфейс, к которому вы подключаете устройство.

Как вы можете видеть из этого определения, это две разные вещи. Однако верно ли это (мое определение)? Или это на самом деле одно, а физический порт имеет адрес памяти?

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

Я был бы очень признателен, если бы ответ мог кратко объяснить, как используются порты ввода / вывода ... Я просто не понимаю

3 ответа3

2

Есть ли разница между портом ввода / вывода и физическим портом?

Применяются следующие определения:

  • Порты ввода / вывода - это адреса памяти, используемые в качестве интерфейса для связи с внешними устройствами, например принтером.
  • Физический порт (разъем) - это физический интерфейс, к которому вы подключаете устройство.

Ваши определения по существу верны.

Порт ввода / вывода взаимодействует с помощью программного драйвера (устройства) с физическим устройством (устройством, подключенным к физическому порту).

См. I/O Systems для более подробного обзора.

2

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

Причина, по которой память и ввод-вывод были необходимы для совместного использования шины данных, заключалась в ограниченном объеме адресного пространства, доступного для 16-битного процессора (64 КБ). По мере развития процессора шина данных выросла до 32 бит (4 гигабайта) и 64 бит (18 квинтиллионов!) и накладные расходы делиться не были нужны.

Теперь, когда используются 32-битные и 64-битные процессоры, память и ввод-вывод адресованы напрямую, устройства ввода-вывода отображаются в другую область адресов. Этот метод называется отображением ввода-вывода в память.

Что касается физических портов, и порты ввода-вывода, и ввод-вывод с отображением в памяти подключены к аппаратному обеспечению, которое дополнительно буферизует и форматирует (например, RS-232) сигнал, который поступает на разъем, который находится на задней панели компьютера.

1

Пространство / порты ввода-вывода - это унаследованное от x86 наследие. В старых добрых словах было много разных адресных пространств (возможно, вы видели недавнюю тенденцию к адресному пространству совместно используемой памяти для лучшего совместного использования ресурсов CPU / GPU, таких как в PlayStation 4 и Xbox One) для адресации памяти и адресации Периферия ввода / вывода ".

Пространство ввода / вывода использовалось для связи с "настоящими" аппаратными периферийными устройствами, такими как последовательный или параллельный порт. Обычно, по адресу пространства ввода / вывода 0x3F8, первый последовательный порт в системе будет расположен там. Чтобы поговорить с этим устройством, вместо того, чтобы использовать обычные инструкции доступа к памяти, вы должны вместо этого ввести инструкции доступа ввода-вывода; например, в Linux вы бы использовали outb(), outl() или outw(), в зависимости от ширины, которую вы намереваетесь использовать. Опять же, это совершенно другое пространство памяти, чем системная карта памяти.

По мере развития ПК и x86 (читай: теперь мы можем обращаться к 32-битной памяти и более), распределение операций ввода-вывода с отображением памяти становится все более распространенным. Теперь произвольная ячейка памяти на карте системной памяти (скажем, от 0 до 0xFFFFFFFF) может быть динамически сопоставлена с конкретным устройством. Устройство PCI будет иметь BAR (регистры базовых адресов), которые требуют определенного объема памяти ИЛИ пространства ввода / вывода. Следовательно, простое чтение / запись, чтобы сказать адрес памяти 0x80000000, может фактически отображаться на физическое устройство PCI, которое отображает индикатор, когда вы записываете «1» в это место. Это чрезмерное упрощение, которое пренебрегает существованием адресного пространства виртуальной памяти / процесса и даже адресов пользователей в пространстве ядра.

Таким образом, чтобы подвести итог, по моему мнению и мнению инженера-электрика / компьютера, «Порт ввода-вывода» относится к расположению в области памяти ввода - вывода архитектуры x86, которое отображается на какое-то конкретное устройство. Физический порт был бы неким реальным, осязаемым соединителем на вашем вычислительном устройстве, будь то USB, последовательный порт, что угодно.

В качестве забавного примера, если вы помните, как играли в старые игры для DOS, такие как Star Wars: Dark Forces, вы вспомните настройку, скажем, SoundBlaster Pro. Вы будете устанавливать параметры, такие как порт 220, IRQ 5, DMA 1. Это говорит игре о том, что ваша звуковая карта расположена в пространстве ввода-вывода в 0x220 с использованием канала IRQ 5 (помните, у вас не было высокопроизводительного APIC на данный момент, вы, вероятно, имели Intel 8259 или два), и DMA канал 1.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .