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

カーネル空間のメモリマップ


Rev.4を表示中。最新版はこちら

カーネルは0xc0000000以降の約1GBのアドレス空間を使用する(図1)。

この領域は物理ページ#0から順番に固定的にストレートマップされている。



図1 メモリマップ


このストレートマップしているPageDirectoryはswapper_pg_dirに格納されている。立ち上げ時に初期化される。

カーネル空間のアドレスマップの作成
arch/i386/mm/init.c
paging_init()
pagetable_init()
:
kernel_physical_mapping_init(swapper_pg_dir)
カーネルアドレス空間(0xc0000000〜)を物理メモリへストレートマップ
(max_low_pfnページ分をマップ)
<--全物理ページ分

swapper_pg_dirの先にPageDirectoryが作成される。

swapper_pg_dirをCR3に設定してストレートマップ完了



init_mm
カーネルが使用するmm
vmalloc()の領域で確保された領域はここで管理される?

init_mm.pgd = swapper_pg_dir (INIT_MM()マクロで初期化)
<--物理ページへストレートマップするPageDrectoryがある





swapper_pg_dirの中身
0xc0358be0 <swapper_pg_dir+3040>: 0x00000000 0x00000000
0x00000000 0x00000000
0xc0358bf0 <swapper_pg_dir+3056>: 0x00000000 0x00000000
0x00000000 0x00000000
0xc0358c00 <swapper_pg_dir+3072>: 0x000001e3 0x004001e3
0x008001e3 0x00c001e3
0xc0358c10 <swapper_pg_dir+3088>: 0x010001e3 0x014001e3
0x018001e3 0x01c001e3
0xc0358c20 <swapper_pg_dir+3104>: 0x020001e3 0x024001e3
0x02bfe163 0x02ffe163


最終更新 2006/07/03 19:41:49 - kztomita
(2006/07/03 19:18:38 作成)
添付ファイル
memorymap.png - kztomita


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