Память IO - как это делается? - PullRequest
25 голосов
/ 11 марта 2012

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

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

Как драйвер взаимодействует с базовым оборудованием?Какие функции будет использовать драйвер?Исправлены ли адреса для связи с видеокартой или существует какое-то «соглашение» перед их использованием?

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

Ответы [ 3 ]

34 голосов
/ 12 марта 2012

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

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

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

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

2 голосов
/ 23 июля 2014

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

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

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

2 голосов
/ 11 марта 2012

Вы спрашиваете о файлах, сопоставленных с памятью, или о портах ввода-вывода с отображением в памяти?

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

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

...