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

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

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

Ответы [ 4 ]

8 голосов
/ 25 февраля 2009

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

author  Arjan van de Ven <arjan@linux.intel.com>    2008-04-17 15:40:45 (GMT) 
committer   Ingo Molnar <mingo@elte.hu>                 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 <arjan@linux.intel.com> 
Cc: mingo@elte.hu 
Cc: tglx@tglx.de 
Cc: hpa@zytor.com 
Signed-off-by: Ingo Molnar <mingo@elte.hu> 
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

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

2 голосов
/ 24 февраля 2009

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

0 голосов
/ 25 февраля 2009

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

0 голосов
/ 25 февраля 2009

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

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

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

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

...