Bsd daemon read
- 3. カーネル実行開始
●
カーネルの実行が始まるときは、MMUの機能
が無効になる。よって全てのアドレス参照は物
理アドレスに対して直接行われる。
●
カーネルは最初に仮想アドレス空間を表現する
ために必要なpmapと関連するデータ構造を用意
する。
- 6. 準備作業が終わると
●
MMUを有効にする。
●
カーネルはプロセス番号0番のコンテキス
トで動作を開始する。
- 9. pmap_init()
1089 pmap_init(vm_offset_t phys_start, vm_offset_t phys_end)
1090 {
1091
1092 CTR0(KTR_PMAP, "pmap_init");
1093
1094 pmap_upvo_zone = uma_zcreate("UPVO entry", sizeof (struct pvo_entry),
1095 NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_VM |
UMA_ZONE_NOFREE);
1096 uma_zone_set_allocf(pmap_upvo_zone, pmap_pvo_allocf);
1097 pmap_mpvo_zone = uma_zcreate("MPVO entry", sizeof(struct pvo_entry),
1098 NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_VM |
UMA_ZONE_NOFREE);
1099 uma_zone_set_allocf(pmap_mpvo_zone, pmap_pvo_allocf);
1100 pmap_initialized = TRUE;
1101 }
カーネルのページテーブルを保持するのに最低限必要な固定メモリを確保
する(一般に1Gバイトのアドレス空間が割り当てられる)
- 11. 単一マップされた物理ページ
●
pv_entryは構造体の配列となっており、ひとつ
の配列要素が1つのアドレス変換を表す。
●
vm_page構造体の機種依存情報に含まれるリス
トの先頭ポインタはpv_entry構造体を指す。
vmspace vm_map_entry
pv_entry 5 vm_map
(機種非依存 Vnode オブジェ ト
ク
情報) 開始アド ス
レ
vm_page 5
vm_pmap 終了アド ス
レ
pv_entry 18 (機種依存情報)
objオフセット
vm_page 18
統計情報
pv_entry 79 …
vm_page 79
- 12. 複数マップを伴う物理ページ
vmspace vm_map_entry
vm_map
(機種非依存
pv_entry 5 情報) 開始アドレス
vm_pmap 終了アドレス
(機種依存情報) ト
pv_entry objオフセッ
Vnode オブジェクト
統計情報 vm_page 5
…
pv_entry 18
vm_page 18
vmspace vm_map_entry
pv_entry vm_map
(機種非依存 vm_page 79
情報) 開始アドレス
終了アドレス
pv_entry 79 vm_pmap
(機種依存情報) objオフセット
pv_entry 統計情報
…