Memory mapped IO-как это делается?

Я читал о разнице между IO с отображением портов и IO с отображением памяти, но я не могу понять, как Io с отображением памяти реализуется в современных операционных системах (windows или linux)

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

как драйвер будет взаимодействовать с базовым оборудованием? Каковы функции, которые драйвер будет использовать? Являются ли адреса для связи с видеокартой фиксированными или есть какое-то "соглашение" перед их использованием?

Я все еще в замешательстве

3 ответов


следующее утверждение в вашем вопросе не так:

What I know is that a part of the physical memory is reserved to communicate with the hardware

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

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


вы спрашиваете о памяти файлы, памяти или порта ввода-вывода?

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

memory mapped port-IO выполняется на уровне ЦП путем перегрузки адресных строк как строк port-IO, которые позволяют записывать в память для перевода на шины QPI как port-IO. Это все сделано процессором, взаимодействующим с материнской платой. Единственное, что еще нужно сделать ОС, это сказать MMU, чтобы он не читал и не писал через биты PAE must-writethrough и no-cache.


http://en.wikipedia.org/wiki/Memory-mapped_I/O

http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/IO/mapped.html

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