2011-07-13 7 views
2

virt_to_page関数は正確に何を返しますか?それはカーネル空間のアドレスが与えられたページを返しますか、それともユーザー空間のアドレスが与えられたページを返しますか?私が知る限り、それはカーネルアドレスをとり、そのページを返します。そうであれば、タスクまたはmm_structを指定して仮想アドレスを指定したユーザー空間プロセスからページを取得するにはどうすればよいですか?Linuxで特定のタスクのユーザー空間プロセスからページを取得する方法は?

+0

私はこの質問の見出しが少し誤解を招くと思います。 virt_to_pageは、カーネルアドレスに関連付けられたページ記述子のアドレスを生成する、Linuxカーネルコードのマクロです。 – vivekian2

答えて

3

virt_to_page()実際に直接マップされたカーネルアドレスに対してのみ機能します。ユーザー空間マッピングのページを見つけるには、get_user_pages()を使用する必要があります(ページの参照を解除するには、put_pageを実行してください)。

+0

私はそれをしたら、私はそれを正しいにリリースするput_page(ページ)をしなければならないと私は一度get_user_pages()(1ページを取得する)を行うか? –

+0

はい、get_user_pages()は返す各ページで参照を取ります。その参照を再び削除するには、各ページで一致するput_page()を実行する必要があります。 – Roland

+0

mm_structのmmapセマフォのdown_readとup_reaについて忘れないでください:P –

関連する問題