Rmap
Rev.8を表示中。最新版はこちら。
1. 概要
物理アドレスから仮想アドレス空間のアドレスを逆引きするための仕組み。
2. データ構造
Rmapのデータ構造を図1に示す。
図1 Rmapのデータ構造
物理ページの管理構造体であるstruct pageからanon_vma経由で物理ページにマッピングされている仮想アドレス空間(vma)を全て取得することができる。
struct pageのmappingが通常struct address_spaceへのポインタだが、PAGE_MAPPING_ANON(1)がセットされていたら、struct anon_vmaへのポインタであることを示す。
struct anon_vmaからこの物理ページに対応するstruct vm_area_structのリストをたどる事ができる。(anon_vma_nodeが同じanon_vmaを持つvm_area_structの双方向リストになっている)
vm_area_structのanon_vmaは自分の所属しているanon_vmaへのポインタを保持している。
3. 関連関数
page_add_new_anon_rmap()vma_address()
page_address_in_vma()
anon_vma_prepare(vma)
struct anon_vmaを割り当てて、anon_vmaのリストにvmaをチェーンする。
vmaは事前に anon_vma_prepare()でanon_vmaが用意されていないといけない。
vmaは事前に anon_vma_prepare()でanon_vmaが用意されていないといけない。