\Device\PhysicalMemory
— это объект раздела, который в терминах Win32 API является отображаемым в памяти файлом. Учитывая его название, это может быть MMF, полностью поддерживаемый оперативной памятью; являющееся отображением физических страниц один на один.
И это в значительной степени мой вопрос: представляет ли этот объект раздела невыгружаемую физическую память или невыгружаемое системное адресное пространство?
А если первое, то как быть с «дырами» в физической памяти? Например, в системах с поддержкой PAE физическая память, лежащая в основе системного адресного пространства, может быть фактически «фрагментирована». Что произойдет, если я получу доступ к таким дырам после сопоставления представления с этим объектом раздела \Device\PhysicalMemory
?
Причина, по которой я запутался, заключается в том, что функция MmMapIoSpace
принимает параметр PHYSICAL_ADDRESS PhysicalAddress
и сопоставляет этот физический адрес с невыгружаемым системным адресным пространством. Также см. другие функции диспетчера памяти, такие как MmAllocateContiguousMemory
. Представляется довольно опасным делать доступной реальную физическую память и притворяться, что доступ к ней возможен непрерывным образом.
Итак, очевидно, что между невыгружаемой физической памятью и невыгружаемым системным адресным пространством существует сопоставление, которое не обязательно один к одному.
Попытка найти вышеуказанное и ряд связанных терминов в Windows Internals, 6-е изд. не дал однозначного ответа. В главе 10 в основном рассматривается то, что в документации WDK называется системным адресным пространством. Поэтому и спрашиваю здесь.
Пожалуйста, не забудьте указать на авторитетные источники для вашего ответа.