access_process_vm()はLinuxでどのように機能しますか?

access_process_vm()はLinuxでどのように機能しますか?

AFAIK, ptrace システムコールは、access_process_vm他のプロセスからデータを読み取るために使用されます。しかし、異なるプロセスのアドレス空間はどのように達成されますか?

答え1

プロセスのアドレス空間は実際には互いに分離されていますが、カーネルでは分離されません。カーネルは常にすべてのアクティブプロセスのメモリレイアウトを知っています。access_process_vm仕組みは次のとおりです。

64ビットプラットフォームでは、通常(つまりこのページはI / O再マップされたページではなく、最後のステップのマッピングはカーネルによる直接の物理マッピングに依存します。カーネルはすべての物理メモリに直接アクセスできます。 32ビットプラットフォームでは、HIGHMEM特定のマッピング生成を含めることができます。 (後者がkmap上記の最後のリンクで定義されている理由ですhighmem.h。ただしなければなりませんHIGHMEM。)

関連情報