あなたの質問に対する短い答えは__get_locked_pte
です。しかし、私はあなたの目標を達成するための方がはるかに優れている(リソースの競合に関して効率的かつ公平である)方法があるので、それに対して助言するだろう。
linuxでは、ページテーブルを走査する典型的なイディオムは、ネストされたforループが4レベル深いものです(4つはLinuxがサポートするページテーブルレベルの数です)。例については、copy_page_range
およびapply_to_page_range
in mm/memory.cを参照してください。実際、copy_page_range
をよく見ると、kernel/fork.cのdup_mmap
からフォークするときに呼び出されます。基本的にvm_area_struct
全体で動作します。
これらの機能のいずれかで使用されているイディオムを複製することができます。しかし、いくつかの注意点があります。たとえば、copy_page_range
は、完全に別のcopy_huge_pmd
をcopy_pmd_range
の内側に使用することによって、透過的なhugepages(2.6.38)を完全にサポートします。 2つの別々の関数(普通のページと透明なページのためのもの)を書く必要がなければ、Documentation/vm/transhuge.txt
のGracefull fallback
を参照してください。
ポイントは、Linuxの仮想メモリは非常に複雑ですので、ケース。follow_page
mm/memory.cでは、あなたの拠点のすべてをカバーする方法を示さなければならない。
どうfollow_page 'について()' FOLL_GET'フラグ 'で?.. –