~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 702F1EB6F30275AAAD4369C7BB033AAC__1714932360 ✰
Заголовок документа оригинал.:
✰ Memory-mapped I/O and port-mapped I/O - Wikipedia ✰
Заголовок документа перевод.:
✰ Ввод-вывод, отображаемый в памяти, и ввод-вывод, отображаемый на портах — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Memory-mapped_I/O ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/70/ac/702f1eb6f30275aaad4369c7bb033aac.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/70/ac/702f1eb6f30275aaad4369c7bb033aac__translat.html ✰
Дата и время сохранения документа:
✰ 20.06.2024 21:18:44 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 5 May 2024, at 21:06 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Ввод-вывод, отображаемый в памяти, и ввод-вывод, отображаемый на портах — Википедия 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 [ править ]

Ввод-вывод с отображением в памяти предпочтителен в архитектурах на базе x86 , поскольку инструкции, выполняющие ввод-вывод на основе порта, ограничены одним регистром: 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. ядра mmiotrace Ядро Linux также позволяет отслеживать доступ к MMIO из модулей ядра (драйверов) с помощью средства отладки . Для этого ядро ​​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. ^ «Псевдоним адреса» . Hewlett Packard .
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 702F1EB6F30275AAAD4369C7BB033AAC__1714932360
URL1:https://en.wikipedia.org/wiki/Memory-mapped_I/O
Заголовок, (Title) документа по адресу, URL1:
Memory-mapped I/O and port-mapped I/O - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)