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

概要

  • linux2.6/mm/rmap.cにて定義
  • 引数で渡されたページの対応するマッピング(ファイル/物理メモリ)を解除する

引数

  • page--マッピングを解除するページ

実装

/**

* try_to_unmap - try to remove all page table mappings to a page
* @page: the page to get unmapped
*
* Tries to remove all the page table entries which are mapping this
* page, used in the pageout path.  Caller must hold the page lock.
* Return values are:
*
* SWAP_SUCCESS	- we succeeded in removing all mappings
* SWAP_AGAIN	- we missed a mapping, try again later
* SWAP_FAIL	- the page is unswappable
*/

int try_to_unmap(struct page *page) {

	int ret;
	BUG_ON(PageReserved(page));
  • ページpageが予約されているか調べる
    • 予約されている場合1を返し、予約されていない場合は0を返す
    • 詳細はPageReserved()/linux2.6を参照
	BUG_ON(!PageLocked(page));
  • ページpageがロックされている場合は1を、ロックされていない場合は0を返す
	if (PageAnon(page))
		ret = try_to_unmap_anon(page);
  • ページpageがユーザ仮想メモリにマッピングされている場合、1を返して終了
  • ページpageの対応する物理ページ(無名メモリ)とのマッピングを解除する
	else
		ret = try_to_unmap_file(page);
	if (!page_mapped(page))
		ret = SWAP_SUCCESS;
  • ページpageがアドレス空間にマッピングされているか調べる
	return ret;

}

呼出元


履歴

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

コメント



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