remap_pfn_range
Функция (используется в mmap
call in driver) может использоваться для сопоставления памяти ядра с пользовательским пространством. Как это делается? Кто-нибудь может объяснить точные шаги? Режим ядра - это привилегированный режим (PM), в то время как пространство пользователя не является привилегированным (NPM). В ЦП ЦП можно получить доступ ко всей памяти, в то время как в NPM ограниченная память - доступ к ЦП невозможен. Когда вызывается remap_pfn_range
, как этот диапазон памяти, который был ограничен только PM, теперь доступен для пользовательского пространства?Как remap_pfn_range переназначает память ядра в пользовательское пространство?
Глядя на remap_pfn_range
код pgprot_t struct
. Это связанная структура защиты. Что такое защита? Это ответ на вышеупомянутый вопрос?
«часть этого совпадает с частью таблицы страниц ядра, которая не дублируется для каждого процесса», когда вы говорите, что вы имеете в виду, что есть только одна копия таблицы страниц для отображения ядра, которая используется всеми процессами ? Не могли бы вы подробнее рассказать о том, как это можно сделать? – user31986
Возможно, прочитайте следующее: http://turkeyland.net/projects/overflow/intro.php , а на картинке вы можете увидеть, что один процесс ОДИН набор таблиц страниц, базовый адрес которого будет загружен в регистр CR3. И для всех этих виртуальных адресов (специально для ядра), которые должны быть разделены между разными процессами, все они будут иметь одинаковое значение, указывающее на одну и ту же физическую страницу. желающий это проясните. –
Как удерживать «мм семафор»? –