Как видно из названия, у меня проблема с получением физического адреса из виртуального.
Позвольте мне объяснить: учитывая объявление переменной в пространстве процесса, как я могу получить ее физический адрес, сопоставленный с ОС?
Я наткнулся на некоторые системные вызовы /asm/io.h
, где определена функция virt_to_phys()
; Однако кажется, что этот заголовок устарел, и я не могу найти обходной путь.
Тем не менее, io.h
доступно по адресу: /usr/src/linux-headers-2.6.35-28-generic/arch/x86/include/asm/
. Мое текущее ядро - 2.6.35-28
, но io.h
не включено в /usr/include/asm/
?
Итак, еще раз: мне нужен способ получить физический адрес из виртуального. Предпочтительно выводится из приложения во время выполнения. Но даже обходной путь использования монитора /proc/PID/maps
подойдет.
Любые идеи или комментарии будут с благодарностью.
EDIT
После небольшого исследования этой темы я нашел кое-что, что помогает в этом отношении.
Оказывается, это более чем выполнимо, хотя и требует некоторого обходного пути.
Вот ссылка на простое приложение, которое анализирует текущие отображенные страницы.
Получается файл (бинарный файл) /proc/pid/pagemap
(содержит физическое отображение виртуальных страниц). В любом случае код в этой ссылке можно изменить, чтобы он служил в качестве приложения для монитора или чего-то подобного.
Мне нужен был физический адрес для симуляции кэша.
Спасибо за помощь и ответы!