2009-02-24 10 views
4

В Linux, как я могу определить, какой конкретный процесс владеет/использует данный адрес в физической памяти?Linux - идентифицировать процесс, владеющий определенным адресом в физической памяти

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

ответ

8

Страницы, используемые процессом и их расположение в физической памяти, не являются статическими частями информации. Однако запрашиваемая информация должна находиться в page tables. change вошел в ядро, которое может быть почти точно то, что вы ищете:

author Arjan van de Ven <[email protected]> 2008-04-17 15:40:45 (GMT) 
committer Ingo Molnar <[email protected]>     2008-04-17 15:40:45 (GMT) 
commit 926e5392ba8a388ae32ca0d2714cc2c73945c609 (patch) 
tree 2718b50b8b66a3614f47d3246b080ee8511b299e 
parent 2596e0fae094be9354b29ddb17e6326a18012e8c (diff) 

x86: add code to dump the (kernel) page tables for visual inspection by kernel developers 

This patch adds code to the kernel to have an (optional) 
/proc/kernel_page_tables debug file that basically dumps the kernel 
pagetables; this allows us kernel developers to verify that nothing 
fishy is going on and that the various mappings are set up correctly. 
This was quite useful in finding various change_page_attr() bugs, and 
is very likely to be useful in the future as well. 

Signed-off-by:Arjan van de Ven <[email protected]> 
Cc: [email protected] 
Cc: [email protected] 
Cc: [email protected] 
Signed-off-by: Ingo Molnar <[email protected]> 
Signed-off-by: Thomas Gleixner <[email protected]> 

Добавленная функциональность включена с помощью новой опции конфигурации (X86_PTDUMP).

2

Могу ли я указать start here на предмет того, как виртуальная память процесса отображается в физическую память. Это даст вам хорошее место для начала, чтобы выяснить, где вам нужно будет подключаться к ядру для доступа к таблице страниц и т. Д., Где эта информация хранится.

0

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

http://en.wikipedia.org/wiki/Paging

По сути, это означает, что компьютер переключается из данных не нужно в один момент, так что память может быть использована для чего-то еще.

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

0

Возможно, вы можете использовать pmap -d [pid] для этого ... к сожалению, вам придется запускать его для всех процессов, чтобы увидеть, какой из них возвращает результат для заданного адреса памяти. Разумеется, это не так эффективно, как модуль ядра (и вы даже не можете получить результат, если память выгружается, когда вы его ищете).

+2

Я не верю, что это правильно. 'pmap' сообщает о виртуальных адресах. Физические адреса указываются только для устройств, а не для основной памяти с помощью этой команды. По крайней мере, из того, что я могу сказать. –