このページを編集する際は、編集に関する方針に従ってください。

概要

  • linux2.6/mm/rmap.cにて定義
  • anon_vma領域にマッピングされたページの参照数を返す

引数

実装

static int page_referenced_anon(struct page *page, int ignore_token) {

	unsigned int mapcount;
  • pageがアドレス空間にマッピングされている数
	struct anon_vma *anon_vma;
  • anonymousメモリ(無名メモリ)
    • anonymousメモリ(無名メモリ)とはファイルと直接関連づけられていないページ(ページ群)を指す
      • プロセスのヒープ領域、スタック、Copy-On-Writeページに対して使用される
      • Copy-On-Writeページ:ゼロページを割り当てておいて、実際に使用する際に例外を発生させ、ページの割り当てを遅延する
    • anon_vma/linux2.6を参照
	struct vm_area_struct *vma;
	int referenced = 0;
	anon_vma = page_lock_anon_vma(page);
	if (!anon_vma)
		return referenced;
  • anon_vmaがNULLであればreferencedを返して終了
	mapcount = page_mapcount(page);
	list_for_each_entry(vma, &anon_vma->head, anon_vma_node) {
  • リストanon_vma->headにつながれたエントリを走査する
		referenced += page_referenced_one(page, vma, &mapcount,
							ignore_token);
		if (!mapcount)
			break;
  • mapcountが0なら繰り返しを抜ける
	}
	spin_unlock(&anon_vma->lock);
  • スピンロックanon_vma->lockの開放を行う。プリエンプション機能を有効にし、可能であれば自ら積極的にプリエンプション(実行権の移譲を行うこと)する
	return referenced;

}

呼出元


履歴

  • 作者:ひら
  • 日付:2005/11/25
  • 対象:2.6.10
    更新日更新者更新内容

コメント



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-11-24 (火) 07:16:41 (2861d)