2

特定の構造体ページで対応する構造体 task_struct を見つける方法はありますか? 私がやりたいことは、どの KVM 仮想マシンが仮想化環境で特定のページを使用しているかを知りたいということです。そして、task_struct に新しいデータ メンバー (つまり vm_id) が追加されるため、指定された struc ページで task_struct を取得すると、vm id を取得できます。直接的な解決策はないようです。しかし、私はそれについて何も知りません。

では、そのようなことを行う正しい方法は何ですか? どうもありがとう!

4

3 に答える 3

1

Linuxカーネルに実装されているページフレーム再利用アルゴリズムがあることを考慮してください。PFRAを実装するために、再利用される同じページを使用しているすべてのページテーブルエントリを検索するためにカーネルによって使用されるデータ構造があります。ページテーブルが配置されている場合、CONFIG_MM_OWNERが定義されている場合は、task_structも配置する必要があります。

mm_structへのページマッピングは1:Nであり、task_structへのページマッピングも1:Nである可能性があります。

ファイル./mm/rmap.c、関数try_to_unmap_anon()およびtry_to_unmap_file()には、ページ構造体からmm_structへの逆マッピング作業を行うコードがあります。

PFRAの実装の詳細については、第17章「Linuxカーネルの理解、第3版」を参照してください。

于 2013-03-11T05:59:36.447 に答える
1

Linux では、kvm vm は pid を持つ通常のプロセスであり、多くの vm 構造体を通常のタスクとして使用します。必要なものをアーカイブするには、カーネル モジュールを作成し、次のようなことを行う必要があると思いますLinux でのプロセスのページ テーブルのウォーキング

于 2013-07-19T07:56:15.853 に答える
0

一般に、いいえ。多くのページが複数のタスク/プロセス間で共有されているためです(共有ライブラリ、実行中のプログラムの複数のインスタンスなど)。しかし、私は別の解決策を提案するためのカーネル構造に精通していないので、他の誰かにそのビットに答えさせます...

于 2012-11-08T14:54:52.600 に答える