Память сопоставлена IO - как это делается?
Я читал о различии между IO с сопоставлением портов и отображением IO с памятью, но я не могу понять, как отображаемая память Io реализована в современных операционных системах (windows или linux).
Что я знаю, так это то, что часть физической памяти зарезервирована для связи с аппаратным обеспечением, и там подразделение MMIO, участвующее в уходе за шиной и другими материалами, связанными с памятью.
Как драйвер взаимодействует с базовым оборудованием? Каковы функции, которые будет использовать драйвер? Установлены ли адреса для связи с видеокартой или существует какое-то "соглашение" перед их использованием?
Я все еще довольно смущен
Ответы
Ответ 1
В вашем вопросе неверно следующее утверждение:
What I know is that a part of the physical memory is reserved to communicate with the hardware
Часть физической памяти не зарезервирована для связи с оборудованием. Часть физического адресного пространства, к которому привязана физическая память и память, отображаемая IO. Этот макет памяти является постоянным, но пользовательские программы не видят его напрямую - вместо этого они запускаются в свое собственное виртуальное адресное пространство, к которому ядро может решить отображать, где захочет, физическую память и диапазоны ввода-вывода.
Вы можете прочитать следующие статьи, которые, как я считаю, содержат ответы на большинство ваших вопросов:
Ответ 2
Вы спрашиваете о файлах с отображением памяти или о отображаемом в памяти порт-IO?
Файлы с отображением памяти выполняются путем разбивки страниц и перехвата ошибок страниц на эти адреса. Все это выполняется ОС путем согласования между диспетчером файловой системы и обработчиком ошибок страницы.
Отображаемый память port-IO выполняется на уровне ЦП, перегружая адресные строки в виде портов-IO, которые позволяют переводить записи в память на линии шины QPI как порт-IO. Все это делает процессор, взаимодействующий с материнской платой. Единственное, что нужно ОС - это сообщить MMU не читать и записывать на калийные страницы через PAE-записи и бит без кэша.
Ответ 3
http://en.wikipedia.org/wiki/Memory-mapped_I/O
http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/IO/mapped.html
По сути, это всего лишь форма доступа к данным, как если бы вы сохраняли/читали из памяти. Но аппаратное обеспечение будет отслеживать адресную шину, и когда он увидит адрес для него, он просто получит данные на шине данных.