Linux では、特定のプロセスが物理メモリ内の特定のアドレスを所有/使用していることをどのように確認できますか?
これには、カーネル データ構造にアクセスして結果をユーザーに返すためのカーネル モジュールを作成する必要がある場合があることを理解しています。それがどれほど複雑であるかに関係なく、どのように実行できるかを知る必要があります。
Linux では、特定のプロセスが物理メモリ内の特定のアドレスを所有/使用していることをどのように確認できますか?
これには、カーネル データ構造にアクセスして結果をユーザーに返すためのカーネル モジュールを作成する必要がある場合があることを理解しています。それがどれほど複雑であるかに関係なく、どのように実行できるかを知る必要があります。
プロセスによって使用されているページと物理メモリ内のそれらの場所は、静的な情報ではありません。ただし、求める情報はページ テーブルにある必要があります。カーネルに変更が加えられました。これは、探しているものとほぼ同じである可能性があります。
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) によって有効になります。
プロセス仮想メモリが物理メモリにどのようにマップされるかについて説明するために、ここから始めたいと思うかもしれません。これは、その情報が保存されているページテーブルなどにアクセスするためにカーネルにフックする必要がある場所を見つけることから始めるのに適した場所です。
Linux での処理方法により、プロセスが 1 つのインスタンスでメモリを所有し、その後はページングのために所有しなくなる場合があります。
http://en.wikipedia.org/wiki/Paging
基本的に、これは、コンピューターが一時的に必要のないデータを切り替えて、メモリを別の用途に使用できるようにすることを意味します。
これが役に立ったかどうかはわかりませんが、ページ テーブルとディレクトリを確認することをお勧めします。これらを使用して物理アドレスに変換できるからです。
これに使用できる可能性がありますpmap -d [pid]
...残念ながら、すべてのプロセスで実行して、指定されたメモリアドレスの結果を返したプロセスを確認する必要があります。確かに、カーネル モジュールほど効率的ではありません (また、検索中にメモリがページ アウトされると、結果が得られない場合もあります)。