6.828: Operating System Engineering (61)
何故か北谷ジャスコのフードコートで作業。
昨日の記録によると 977 以降が微妙とのことだったのですが、PDX(KERNBASE) を確認したところでは 960 とのことでした。boot_map_segment に渡す値を勘違いしている気がしてきました。ちなみに現時点の記述としては以下。
boot_map_segment(boot_pgdir, KERNBASE, npage*PGSIZE, 0, PTE_P|PTE_W);
あら? なんかナチュラルな香りが漂っている気がしてきた。
整理
してみます。結構周りが騒がしくって集中できん。ええと
- PDX(UPAGES) が 956
- PDX(UVPT) が 957
- PDX(KSTACKTOP-1) が 958
- PDX(VPT) が 959
- PDX(KERNBASE) が 960
- 976 までは正常に処理されている模様
- pdx[977] 以降が 0 らしい
直前の空きページの状態を調べてみたら 140 とのことなので pgdir_walk の中の page_alloc に失敗している訳ではない模様なのかどうか。
帰宅
しかし狙いすましたカンジでハメてくるなぁ、と。
# ハマる方が悪いのは承知してるのですがorz
落ち着いてもっかい確認してみます。得意な printf デバグで
(i386_vm_init) npage is 40ff (i386_vm_init) npage*PGSIZE is 40ff000 (i386_vm_init) KERNBASE+npage*PGSIZE is f40ff000 (i386_vm_init) PDX(KERNBASE+npage*PGSIZE) is 976 (i386_vm_init) pgdir[PDX(KERNBASE+npage*PGSIZE)] is 8d001
あら、末端を npage*PGSIZE ってしてるのがダウトなのか。で、コメントに沿って以下にしたら試験パスしたのかな。
boot_map_segment(boot_pgdir, KERNBASE, 0xffffffff - KERNBASE, 0, PTE_P|PTE_W);
check_boot_pgdir() succeeded! って出力されますが、その後にレジスタダンプがコンソールに出力されてるなぁ。
以降でページングを有効にしてるので、まだ何かヤらないといけないことをスルーしてるのだろうと思います。テキスト確認した方が良さげ。