このページを編集する際は、[[編集に関する方針]]に従ってください。
*概要 [#dc4a8ec2]
-[[linux2.6/mm/rmap.c]]にて定義
-anon_vma領域にマッピングされたページの参照数を返す

*引数 [#c16e85ce]
-page--ページ
--[[page/linux2.6]]を参照
-ignore_token--

*実装 [#w643890d]
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;
-メモリリージョン
--[[vm_area_struct/linux2.6]]を参照

	int referenced = 0;

	anon_vma = page_lock_anon_vma(page);
-ページpageにマッピングされたanon_vma(無名メモリ)領域をロックする
--詳細は[[page_lock_anon_vma()/linux2.6]]を参照

	if (!anon_vma)
		return referenced;
-anon_vmaがNULLであればreferencedを返して終了

	mapcount = page_mapcount(page);
-ページpageのアドレス空間にマップされている数を返す
--詳細は[[page_mapcount()/linux2.6]]を参照

	list_for_each_entry(vma, &anon_vma->head, anon_vma_node) {
-リストanon_vma->headにつながれたエントリを走査する
--カレントエントリはvmaに設定される
--詳細は[[list_for_each_entry()/linux2.6]]を参照

		referenced += page_referenced_one(page, vma, &mapcount,
							ignore_token);
-ページpageの参照フラグが立っている場合はクリアし、参照数を返す
--詳細は[[page_referenced_one()/linux2.6]]を参照

		if (!mapcount)
			break;
-mapcountが0なら繰り返しを抜ける

	}
	spin_unlock(&anon_vma->lock);
-スピンロックanon_vma->lockの開放を行う。プリエンプション機能を有効にし、可能であれば自ら積極的にプリエンプション(実行権の移譲を行うこと)する
--詳細は[[spin_unlock()/linux2.6]]を参照

	return referenced;
}

*呼出元 [#u666e8d1]
- [[page_referenced()/linux2.6]] --  &new{2005-11-25 (金) 22:34:49};

#comment(noname)
*履歴 [#m5c0efd6]
-作者:[[ひら]]
-日付:2005/11/25
-対象:2.6.10
|更新日|更新者|更新内容|
||||

*コメント [#sfbbbe6d]

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS