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

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

Насколько мне известно, применяются следующие определения:

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

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

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

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

решение1

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

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

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

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

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

ВидетьСистемы ввода/выводадля более подробного обзора.

решение2

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

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

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

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

решение3

Пространство ввода-вывода / порты — это наследие x86. В старых добрых поговорках было несколько различных адресных пространств (вы могли заметить недавнюю тенденцию к общему адресному пространству памяти для лучшего распределения ресурсов ЦП/ГП, например, в 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. Вы устанавливаете такие параметры, как Port 220, IRQ 5, DMA 1. Это сообщает игре, что ваша звуковая карта находится в пространстве ввода-вывода по адресу 0x220, используя канал IRQ 5 (помните, у вас не было высокопроизводительного APIC в тот момент, у вас, вероятно, был Intel 8259 или два) и канал DMA 1.

решение4

Я бы не согласился с вашим утверждением. Терминпортассоциируется с физическим интерфейсом, таким как порт USB, разъем db-25 (SR-232) и т. д. Как и ожидалось, терминПорт ввода/выводатакже часто интерпретируется как «физическое»Контакты ввода/вывода.

Однако верно, что этиПорты ввода/вывода, или набор штифтов, имеют связанныйРегистры ввода-вывода, поэтому можно примерно считатьПорт ввода/выводабыть действительноадрес памяти.

На рисунке ниже можно увидеть4 порта ввода/вывода, к которому вы можете подключить кабели. Каждый порт имеет связанныйРегистры ввода-вывода. Например, PB0логический уровень вывода (первый вывод на рисунке) будет зависеть от того, как выбранные логические уровни регистров ( DDRB, PINBи PORTB) объединены на этом выводе.Регистр ввода-вывода, например DDRB, имеет связанныйадрес памятик которому вы можете получить доступ через код и изменить его логические значения.

введите описание изображения здесь

[ссылка на изображение]

Связанный контент