Сопоставленный с памятью ввод-вывод и сопоставленный с портом ввод-вывод являются двумя дополнительными способами ввода-вывода.
Отображение в память ввода-вывода
В системах с отображением памяти доступ к устройству ввода-вывода осуществляется так, как будто он является частью памяти. Команды Load
и Store
выполняются для чтения и записи на устройства ввода-вывода, точно так же, как они используются для памяти (у port-mapped есть специальные команды для ввода-вывода). Это означает, что устройства ввода-вывода используют ту же адресную шину, что и память, а это означает, что ЦП может ссылаться на память или устройство ввода-вывода в зависимости от значения адреса. Этот подход требует изоляции в адресном пространстве: адреса, зарезервированные для ввода-вывода, не должны быть доступны физической памяти.
Ниже приведено изображение простой базовой компьютерной системы. Дело гораздо сложнее в современных системах.
Port-Mapped I/O
Согласно Википедии
Порт-отображенный ввод-вывод часто использует специальный класс инструкций ЦП специально для выполнения ввода-вывода. Это встречается на микропроцессорах Intel с инструкциями IN и OUT. Эти инструкции могут считывать и записывать от одного до четырех байтов (outb, outw, outl) на устройство ввода-вывода. Устройства ввода-вывода имеют отдельное адресное пространство из общей памяти, либо с помощью дополнительного вывода «ввода-вывода» на физическом интерфейсе ЦП, либо всей шины, выделенной для ввода-вывода. Поскольку адресное пространство для ввода-вывода изолировано от основного пространства памяти, его иногда называют изолированным вводом-выводом.
Что касается преимуществ и недостатков: поскольку периферийные устройства работают медленнее, чем память, совместное использование данных и адресных шин может замедлить доступ к памяти. С другой стороны, благодаря системам отображения памяти, обеспечивающим простоту ввода-вывода, ЦП требует меньше внутренней логики, что помогает внедрять более быстрые, дешевые и менее потребляющие ЦП. Логика аналогична системам RISC: уменьшите сложность, получите более специализированную и надежную систему, которая, например, очень удобна для встраиваемых систем.
Наоборот (опять из вики):
Команды ввода-вывода с отображением портов часто очень ограничены, зачастую обеспечивая только простую загрузку и сохранение операций между регистрами ЦП и портами ввода-вывода, так что, например, для добавления константы в регистр сопоставленного с портом устройства потребуется три Инструкции: чтение порта в регистр CPU, добавление константы в регистр CPU и запись результата обратно в порт.
Я настоятельно рекомендую вам прочитать эту статью вики для получения дополнительной информации.
Чтобы ответить на один из ваших вопросов:
Что или куда я пишу, если это не в памяти?
Вы записываете в регистры интерфейса ввода / вывода через шину данных, которая позже (когда готово) отправляет данные на фактическое устройство ввода / вывода. Ниже приведено изображение примера интерфейса устройства ввода / вывода.