Linux Kernel(2.6)の実装に関するメモ書き

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が用意されていないといけない。

4. 参考

vm_area_structについては「アドレス空間の管理」参照

最終更新 2006/12/29 16:46:21 - kztomita
(2006/03/27 13:52:43 作成)
添付ファイル
rmap.png - kztomita


リンク
最近更新したページ
検索