3

Linux カーネルでは、 を指定すると、プロセスの のリストにアクセスできtask_structます。これらの が与えられた場合、実際にこの vma に対応するを取得するにはどうすればよいですか?mmvm_area_structvm_area_structstruct page

mm/memory.c などで関数を探してみましたが、途方にくれました。

編集: アイデアは、vma 内のどのページが現在メモリ内にあり、どのページがそうでないかを見つけることです。しかし、これは宿題の小さな部分であり、自分で解決する必要があるため、誰かにこの方法を教えてもらいたくありません。しかし、この vma に対応するページを見つける方法がわかりません。ページを見つけることができれば、有効な pfn があるかどうかを確認できると思います。

4

2 に答える 2

1

あなたのコメントから別の回答まで(編集:他の回答は削除されたようです)、ユーザー空間から読みたいようです。ユーザー空間ページを取得する関数は になりますがget_user_pages()、それはおそらくあなたが望むものではありません。おそらくcopy_from_user/が必要ですcopy_to_user

于 2008-11-18T19:40:10.017 に答える
0

直接の答えはありませんが、lxr.linux.noを使用して構造をナビゲートするのにそれほど時間はかかりません。

開始したい構造体がすでにある場合は、http://lxr.linux.no/linux+v2.6.29/+code=vm_area_structを参照してください。定義を探したり、単一の構造体が使用されている場所を確認したりできます。探している最終的な構造体名がすでにわかっている場合は、逆方向に進み、mmに到達するまで上に移動できます。

ネット接続があまり良くない場合は、ディストリビューションのlxrパッケージを取得し、ローカルでインデックスを生成することにより、インデックス付きソースのローカルコピーをインストールすることをお勧めします。以前は400MHz/128MBのマシンで2時間かかりましたが、現在ははるかに高速になるはずです。

于 2009-05-19T20:54:50.837 に答える