Jump to content

Ввод-вывод, отображаемый в памяти, и ввод-вывод, отображаемый на портах

(Перенаправлено с порта ввода-вывода )

Ввод-вывод с отображением в памяти ( MMIO ) и ввод-вывод с отображением на порты ( PMIO ) — это два взаимодополняющих метода выполнения ввода-вывода (I/O) между центральным процессором (ЦП) и периферийными устройствами в компьютере (часто опосредующими доступ через чипсет ). Альтернативный подход — использование выделенных процессоров ввода-вывода, широко известных как каналы на мейнфреймах , которые выполняют свои собственные инструкции .

Отображенный в память ввод-вывод использует одно и то же адресное пространство для обращения к основной памяти. [а] и устройства ввода/вывода . [1] Память и регистры устройств ввода-вывода сопоставлены (связаны) со значениями адреса, поэтому адрес памяти может относиться либо к части физической оперативной памяти , либо к памяти и регистрам устройства ввода-вывода. Таким образом, инструкции ЦП, используемые для доступа к памяти (например, MOV ...) также можно использовать для доступа к устройствам. Каждое устройство ввода-вывода либо контролирует адресную шину ЦП и реагирует на любой доступ ЦП к адресу, назначенному этому устройству, подключая системную шину нужного устройства к аппаратному регистру , либо использует выделенную шину.

Чтобы разместить устройства ввода-вывода, некоторые области адресной шины, используемые ЦП, должны быть зарезервированы для ввода-вывода и не должны быть доступны для обычной физической памяти; диапазон адресов, используемых для устройств ввода-вывода, определяется аппаратным обеспечением. Резервирование может быть постоянным или временным (достигается посредством переключения банков ). Пример последнего можно найти в Commodore 64 , который использует форму отображения памяти, чтобы заставить ОЗУ или оборудование ввода-вывода появиться в списке. 0xD000-0xDFFF диапазон.

При вводе-выводе с отображением портов часто используется специальный класс инструкций ЦП, разработанный специально для выполнения ввода-вывода, например in и out инструкции, встречающиеся в микропроцессорах на базе архитектуры x86 . Различные формы этих двух инструкций могут копировать один, два или четыре байта ( outb, outw и outlсоответственно) между регистром EAX или одним из подразделений этого регистра на ЦП и указанным адресом порта ввода-вывода, который назначен устройству ввода-вывода. Устройства ввода-вывода имеют отдельное адресное пространство от общей памяти, что обеспечивается либо дополнительным выводом «I/O» на физическом интерфейсе ЦП, либо целой шиной, предназначенной для ввода-вывода. Поскольку адресное пространство ввода-вывода изолировано от адресного пространства основной памяти, его иногда называют изолированным вводом-выводом. [2] В архитектуре x86 пара индекс/данные часто используется для ввода-вывода с сопоставлением портов. [3]

Различные методы связи между ЦП и устройством, такие как сопоставление памяти, не влияют на прямой доступ к памяти (DMA) для устройства, поскольку по определению DMA — это метод связи между памятью и устройством, который обходит ЦП.

Аппаратные прерывания — это еще один метод связи между ЦП и периферийными устройствами, однако по ряду причин прерывания всегда рассматриваются отдельно. Прерывание инициируется устройством, в отличие от упомянутых выше методов, которые инициируются процессором. Он также является однонаправленным, поскольку информация передается только от устройства к процессору. Наконец, каждая строка прерывания несет только один бит информации с фиксированным значением, а именно: «в устройстве на этой линии прерывания произошло событие, требующее внимания».

Операции ввода-вывода могут замедлить доступ к памяти, если шины адреса и данных являются общими. Это связано с тем, что периферийное устройство обычно намного медленнее основной памяти. В некоторых архитектурах ввод-вывод с отображением портов работает через выделенную шину ввода-вывода, что решает проблему.

Одним из преимуществ ввода-вывода с отображением в памяти является то, что, отбросив дополнительную сложность, которую приносит ввод-вывод через порт, ЦП требует меньше внутренней логики и, следовательно, дешевле, быстрее, проще в сборке, потребляет меньше энергии и может быть физически меньше; это соответствует основным принципам вычислений с сокращенным набором команд , а также является преимуществом во встроенных системах . Другое преимущество заключается в том, что, поскольку для адресации устройств используются обычные инструкции памяти, все режимы адресации ЦП доступны как для ввода-вывода, так и для памяти, а также инструкции, которые выполняют операцию АЛУ непосредственно с операндом памяти (загрузка операнд из ячейки памяти, сохранение результата в ячейку памяти или и то, и другое) также можно использовать с регистрами устройств ввода-вывода. Напротив, инструкции ввода-вывода с отображением порта часто очень ограничены, часто обеспечивая только простые операции загрузки и сохранения между регистрами ЦП и портами ввода-вывода, так что, например, для добавления константы к отображенному порту регистр устройства потребует трех инструкций: прочитать порт в регистр ЦП, добавить константу в регистр ЦП и записать результат обратно в порт.

Поскольку 16-битные процессоры устарели и были заменены 32-битными и 64-битными , в общем использовании, резервирование диапазонов адресного пространства памяти для ввода-вывода не является проблемой, поскольку адресное пространство памяти процессора обычно намного больше. больше, чем необходимое пространство для всей памяти и устройств ввода-вывода в системе. Поэтому становится все более практичным использовать преимущества ввода-вывода с отображением в памяти. Однако даже несмотря на то, что адресное пространство больше не является серьезной проблемой, ни один из методов сопоставления ввода-вывода не является универсальным, и будут случаи, когда использование ввода-вывода с отображением портов по-прежнему будет предпочтительнее.

Ввод-вывод с отображением в памяти предпочтителен в архитектурах на базе x86-32 и x86-64, поскольку инструкции, выполняющие ввод-вывод на основе порта, ограничены одним регистром: EAX, AX и AL — единственные регистры, в которые можно перемещать данные. в или из, и либо непосредственное значение размером в байт в инструкции, либо значение в регистре DX определяет, какой порт является портом источника или портом назначения передачи. [4] [5] Поскольку любой регистр общего назначения может отправлять или получать данные в или из памяти и устройств ввода-вывода, отображаемых в памяти, ввод-вывод, отображаемый в памяти, использует меньше инструкций и может работать быстрее, чем портовый ввод-вывод. AMD не расширила инструкции ввода-вывода порта при определении архитектуры x86-64 для поддержки 64-битных портов, поэтому 64-битные передачи не могут выполняться с использованием ввода-вывода порта. [6]

На новых платформах Intel, начиная с 5-й серии 2008 года , устройства ввода-вывода на чипсете напрямую обмениваются данными через выделенную шину Direct Media Interface (DMI). [б] [7]

Барьеры памяти

[ редактировать ]

Поскольку кэши опосредуют доступ к адресам памяти, данные, записанные по разным адресам, могут достигать памяти периферийных устройств или регистров вне программного порядка, т. е. если программное обеспечение записывает данные по одному адресу, а затем записывает данные по другому адресу, буфер записи кэша не гарантировать, что данные достигнут периферийных устройств именно в этом порядке. [8] Любая программа, которая не включает инструкции по очистке кэша после каждой записи в последовательности, может столкнуться с непредвиденными эффектами ввода-вывода, если система кэширования оптимизирует порядок записи. Записи в память часто можно переупорядочить, чтобы уменьшить избыточность или лучше использовать циклы доступа к памяти без изменения конечного состояния того, что было сохранено; тогда как те же самые оптимизации могут полностью изменить смысл и эффект записи в отображаемые в памяти области ввода-вывода.

Недальновидность в выборе областей ввода-вывода, отображаемых в памяти, привела ко многим барьерам, связанным с объемом оперативной памяти в компьютерах старых поколений. Проектировщики редко ожидали, что машины смогут полностью использовать теоретический объем оперативной памяти архитектуры, и поэтому часто использовали некоторые старшие биты адресного пространства в качестве селекторов для отображаемых в памяти функций ввода-вывода. Например, барьер в 640 КБ в IBM PC и его производных обусловлен резервированием области между 640 и 1024 КБ (64 КБ сегментов с 10 по 16) для верхней области памяти . Первоначально этот выбор не оказал большого влияния, но в конечном итоге ограничил общий объем оперативной памяти, доступной в 20-битном доступном адресном пространстве. Барьер в 3 ГБ и дыра PCI являются аналогичными проявлениями этой проблемы с 32-битными адресными пространствами, усугубляемыми деталями процесса загрузки x86 и конструкцией MMU . 64-битные архитектуры часто технически имеют подобные проблемы, но они редко имеют практические последствия.

Пример карты системной памяти
Диапазон адресов ( шестнадцатеричный ) Размер Устройство
0000–7FFF 32 КиБ БАРАН
8000–80FF 256 байт Универсальный ввод-вывод
9000–90FF 256 байт Звуковой контроллер
А000–А7FF 2 КиБ Видеоконтроллер/ОЗУ дисплея с текстовым отображением
C000–FFFF 16 КиБ ПЗУ

Простая система, построенная на базе 8-битного микропроцессора, может иметь 16-битные адресные строки, что позволяет ей адресовать до 64 кибибайт (КиБ) памяти. В такой системе первые 32 КБ адресного пространства могут быть отведены под оперативное запоминающее устройство (ОЗУ), еще 16 КБ — для постоянного запоминающего устройства (ПЗУ), а оставшаяся часть — для множества других устройств, таких как таймеры, счетчики, видеоустройства. чипы дисплея, устройства генерации звука и т. д.

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

Предполагая, что четвертый регистр видеоконтроллера устанавливает цвет фона экрана, ЦП может установить этот цвет, записав значение в ячейку памяти A003, используя свою стандартную команду записи в память. Используя тот же метод, графики можно отображать на экране, записывая значения символов в специальную область оперативной памяти видеоконтроллера. До появления дешевой оперативной памяти , которая позволяла использовать растровые дисплеи , этот метод символьных ячеек был популярным методом для компьютерных видеодисплеев (см. Текстовый пользовательский интерфейс ).

Основные виды декодирования адреса

[ редактировать ]

Типы декодирования адреса, при которых устройство может декодировать адреса полностью или частично, включают следующее:

Полное (исчерпывающее) декодирование
Соотношение 1:1 уникальных адресов с одним аппаратным регистром (ячейка физической памяти). Включает проверку каждой строки адресной шины .
Неполное (частичное) декодирование
n:1 сопоставление n уникальных адресов с одним аппаратным регистром. Частичное декодирование позволяет ячейке памяти иметь более одного адреса, что позволяет программисту ссылаться на ячейку памяти, используя n разных адресов. Это также можно сделать для упрощения аппаратного обеспечения декодирования за счет использования более простой и часто более дешевой логики, которая исследует только некоторые адресные строки, когда не требуется все адресное пространство ЦП. Обычно само декодирование является программируемым, поэтому система может переконфигурировать свою собственную карту памяти по мере необходимости, хотя это более новая разработка и, как правило, противоречит цели удешевления.
Синонимы: обратное преобразование, многократное сопоставление, частичное сопоставление, псевдоним адреса . [9] [10]
Линейное декодирование
Адресные строки используются напрямую, без какой-либо логики декодирования. Это делается с помощью таких устройств, как ОЗУ и ПЗУ, которые имеют последовательность адресных входов, а также с помощью периферийных микросхем, которые имеют аналогичную последовательность входов для адресации банка регистров. Линейная адресация редко используется отдельно (только когда на шине мало устройств, поскольку использование чисто линейной адресации для более чем одного устройства обычно тратит много адресного пространства), а вместо этого сочетается с одним из других методов для выбора устройства или группа устройств, внутри которой линейная адресация выбирает один регистр или ячейку памяти.

Порт ввода-вывода через драйверы устройств

[ редактировать ]

На компьютерах под управлением Windows доступ к памяти также можно получить с помощью специальных драйверов, таких как DOLLx8KD, который обеспечивает доступ к вводу-выводу в 8-, 16- и 32-разрядной версии на большинстве платформ Windows, начиная с Windows 95 и до Windows 7. Установка ввода-вывода Драйверы портов обеспечат доступ к памяти, активируя драйверы с помощью простых вызовов DLL, разрешая ввод-вывод порта, а когда он не нужен, драйвер можно закрыть, чтобы предотвратить несанкционированный доступ к портам ввода-вывода.

Linux предоставляет утилита pciem , позволяющая читать и записывать адреса MMIO. Ядро Linux также позволяет отслеживать доступ к MMIO из модулей ядра (драйверов) с помощью средства отладки ядра mmiotrace . Чтобы это сделать, ядро ​​Linux должно быть скомпилировано с включенной соответствующей опцией. mmiotrace используется для отладки драйверов устройств с закрытым исходным кодом.

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Память, которая помимо регистров напрямую доступна процессору, например, DRAM в компьютерах, совместимых с IBM PC , или Flash/SRAM в микроконтроллерах.
  2. ^ См. технические описания Intel для конкретного семейства процессоров, например, 2014 г. «Семейство процессоров Intel 10-го поколения» (PDF) . Интел . Апрель 2020 года . Проверено 5 июня 2023 г. ;
  1. ^ Хейс, Джон П. (1978). Компьютерная архитектура и организация . Международная книжная компания McGraw-Hill . п. 419. ИСБН  0-07-027363-4 .
  2. ^ Дандамуди, Шиварама П. (31 мая 2006 г.). «Глава 19 Организация ввода/вывода» (PDF) . Основы компьютерной организации и проектирования . Springer Science+Business Media . ISBN  978-0-387-21566-2 .
  3. ^ «Расширения Bochs VBE — OSDev Wiki» .
  4. ^ «Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32: Том 2A: Справочник по набору команд, AM» (PDF) . Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 . Корпорация Интел . Июнь 2010. стр. 3–520 . Проверено 21 августа 2010 г.
  5. ^ «Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32: Том 2B: Справочник по набору команд, Новая Зеландия» (PDF) . Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 . Корпорация Интел . Июнь 2010. стр. 4–22 . Проверено 21 августа 2010 г.
  6. ^ «Руководство программиста по архитектуре AMD64: Том 3: Универсальные и системные инструкции» (PDF) . Руководство программиста по архитектуре AMD64 . Передовые микроустройства . Ноябрь 2009 г., стр. 117, 181 . Проверено 21 августа 2010 г.
  7. ^ «Что такое интерфейс Direct Media (DMI) процессоров Intel?» . Интел . Проверено 5 июня 2023 г.
  8. ^ Руководство программиста серии ARM Cortex-A. Номер литературы ARM DEN0013D . стр. 10–13.
  9. ^ «Частичное декодирование адреса и пространство ввода-вывода в операционных системах Windows» . Майкрософт . 04.12.2001.
  10. ^ «Псевдоним адреса» . Хьюлетт-Паккард .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 23a01b0371fa5a7629904d464845f20b__1722633600
URL1:https://arc.ask3.ru/arc/aa/23/0b/23a01b0371fa5a7629904d464845f20b.html
Заголовок, (Title) документа по адресу, URL1:
Memory-mapped I/O and port-mapped I/O - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)