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

概要

  • linux2.6/mm/memory.cにて定義
  • 引数で渡された開始アドレスから終了アドレスまでの物理ページ(ページフレーム)とのマッピングを解除する

引数

  • tlb--TLBを管理する構造体
  • vma--メモリリージョン
  • address--ページフレームとのマッピングを解除する開始アドレス
  • end--ページフレームとのマッピングを解除する終了アドレス
  • details--
    • zap_details/linux2.6?を参照

実装

static void unmap_page_range(struct mmu_gather *tlb,

		struct vm_area_struct *vma, unsigned long address,
		unsigned long end, struct zap_details *details)

{

	pgd_t * dir;
  • ページグローバルディレクトリ
	BUG_ON(address >= end);
  • 開始アドレスaddressが終了アドレスendより大きい場合はバグである
	dir = pgd_offset(vma->vm_mm, address);
  • addressに対応するページグローバルディレクトリをdirに設定する
	tlb_start_vma(tlb, vma);
	do {
		zap_pmd_range(tlb, dir, address, end - address, details);
  • addressからサイズ分(end - address)に該当するページミドルディレクトリを解放する
    • 詳細はzap_pmd_range()/linux2.6?を参照
		address = (address + PGDIR_SIZE) & PGDIR_MASK;
  • addressにページグローバルディレクトリのサイズを加算する
		dir++;
  • 次のページグローバルディレクトリへ進む
	} while (address && (address < end));
  • 開始アドレスaddressから終了アドレスendまで物理ページ(ページフレーム)とのマッピングを解除する
	tlb_end_vma(tlb, vma);

}

呼出元


履歴

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

コメント



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