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! って出力されますが、その後にレジスタダンプがコンソールに出力されてるなぁ。
以降でページングを有効にしてるので、まだ何かヤらないといけないことをスルーしてるのだろうと思います。テキスト確認した方が良さげ。