17

Может кто-нибудь объяснить, в чем разница между отображением портов и отображением памяти, и что достигается с обоими? Почему отображается порт, как он отличается по структуре от карт памяти, и есть ли причина, по которой многие архитектуры используют обе? Кроме того, что такое "порт" в этом смысле, потому что порт может означать разные вещи в разных контекстах?

Пример: переадресация портов, порт в качестве конечной точки связи, "сопоставление портов".

Скажем, я пишу OUT на порт 400h (вымышленный; только для примера) (как в x86-64 и т.д.).

Что или куда я пишу, если это не в памяти? Как отображается "порт", и что это в этом смысле?

2 ответа2

21

Сопоставленный с памятью ввод-вывод и сопоставленный с портом ввод-вывод являются двумя дополнительными способами ввода-вывода.

Отображение в память ввода-вывода

В системах с отображением памяти доступ к устройству ввода-вывода осуществляется так, как будто он является частью памяти. Команды Load и Store выполняются для чтения и записи на устройства ввода-вывода, точно так же, как они используются для памяти (у port-mapped есть специальные команды для ввода-вывода). Это означает, что устройства ввода-вывода используют ту же адресную шину, что и память, а это означает, что ЦП может ссылаться на память или устройство ввода-вывода в зависимости от значения адреса. Этот подход требует изоляции в адресном пространстве: адреса, зарезервированные для ввода-вывода, не должны быть доступны физической памяти.

Ниже приведено изображение простой базовой компьютерной системы. Дело гораздо сложнее в современных системах.


Port-Mapped I/O

Согласно Википедии

Порт-отображенный ввод-вывод часто использует специальный класс инструкций ЦП специально для выполнения ввода-вывода. Это встречается на микропроцессорах Intel с инструкциями IN и OUT. Эти инструкции могут считывать и записывать от одного до четырех байтов (outb, outw, outl) на устройство ввода-вывода. Устройства ввода-вывода имеют отдельное адресное пространство из общей памяти, либо с помощью дополнительного вывода «ввода-вывода» на физическом интерфейсе ЦП, либо всей шины, выделенной для ввода-вывода. Поскольку адресное пространство для ввода-вывода изолировано от основного пространства памяти, его иногда называют изолированным вводом-выводом.


Что касается преимуществ и недостатков: поскольку периферийные устройства работают медленнее, чем память, совместное использование данных и адресных шин может замедлить доступ к памяти. С другой стороны, благодаря системам отображения памяти, обеспечивающим простоту ввода-вывода, ЦП требует меньше внутренней логики, что помогает внедрять более быстрые, дешевые и менее потребляющие ЦП. Логика аналогична системам RISC: уменьшите сложность, получите более специализированную и надежную систему, которая, например, очень удобна для встраиваемых систем.

Наоборот (опять из вики):

Команды ввода-вывода с отображением портов часто очень ограничены, зачастую обеспечивая только простую загрузку и сохранение операций между регистрами ЦП и портами ввода-вывода, так что, например, для добавления константы в регистр сопоставленного с портом устройства потребуется три Инструкции: чтение порта в регистр CPU, добавление константы в регистр CPU и запись результата обратно в порт.

Я настоятельно рекомендую вам прочитать эту статью вики для получения дополнительной информации.


Чтобы ответить на один из ваших вопросов:

Что или куда я пишу, если это не в памяти?

Вы записываете в регистры интерфейса ввода / вывода через шину данных, которая позже (когда готово) отправляет данные на фактическое устройство ввода / вывода. Ниже приведено изображение примера интерфейса устройства ввода / вывода.

1

При отображении в память ввода-вывода (просто MMIO) доступ к устройствам осуществляется с помощью инструкций, которые фактически предназначены для доступа к памяти. Каждое устройство получает определенный адрес памяти. Однако при попытке чтения или записи в эту часть памяти определенное устройство (вероятно, северный мост) просто отправляет его на соответствующее устройство. Даже если у компьютера недостаточно памяти для такого адреса (так как адреса MMIO обычно очень высоки), это не имеет значения как физическая память (та, которую вы видите, когда смотрите на материнскую плату, та, которая называется RAM) ) даже не связано. Если у вас достаточно ОЗУ для адреса, оно либо сопоставлено с более высоким, чем у ввода-вывода, либо просто потеряно, что означает, что вы не можете читать или записывать туда.

Port-Mapped I/O (просто PMIO) сильно отличается. У вас есть разные инструкции, используемые для чтения и записи в порты. Существует адресное пространство порта, подобное адресному пространству памяти, где адреса являются либо адресами ввода-вывода, которые фактически связываются с устройствами, либо являются просто недействительными. По сути, PMIO можно рассматривать как MMIO с отдельным адресным пространством памяти только для ввода-вывода.

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