6.828: Operating System Engineering (54)
gitorious 云々は一旦置いといてこちらに戻ります。7/21 のエントリを見つつ確認事項一覧からダウトかどうかを確認するなど。
- pgdir_walk 手続き
- pte に (pte_t *)PTE_ADDR(pgdir[PDX(va)]) 格納はビンゴ
- 存在フラグ見てないけど大丈夫?
- そもそも登録済みかどうか、は *pde | PTE_P が真かどうかとか、そもそも *pde が NULL でないかどうかを見ないと駄目なの?
- *pde に page2pa(page)|PTE_P を格納してるのはダウト?
- 上記によればダウトではないな
- pte に (pte_t *)PTE_ADDR(pgdir[PDX(va)]) 格納はビンゴ
- pgdir_walk は page_table の先頭アドレスを戻すとすると
- pgdir[PDX(va)] の中身に page table の先頭アドレスが格納されてるはずなのでそれを PTE_ADDR なフィルタにかけて戻せば良い。
- これ、物理アドレスになりますね。。
- KADDR なフィルタをかけて戻す必要があるのかどうか
- page_insert
- tmp に pgdir_walk(pgdir, va, 0) の戻りを格納してて tmp が NULL ではなくて tmp[PTX(va)] も NULL ではない場合、が there is already a page mapped at 'va' な状態という理解で良いかな
- これは page table entry をお払い箱にする場合、きちんと後始末をするのが前提
- その場合、page_remove(pgdir, va) して page_alloc(&pp) する形?
- page table entry に tmp[PTX(va)] でアクセスできるのは楽ッス
- tlb_invalidate(pgdir, va) しないといけん模様
- tmp に pgdir_walk(pgdir, va, 0) の戻りを格納してて tmp が NULL ではなくて tmp[PTX(va)] も NULL ではない場合、が there is already a page mapped at 'va' な状態という理解で良いかな
- page_lookup
- ここでも pgdir_walk 使ってる
- pgdir_walk の戻りを pte に格納するとして pte[PTX(va)] の中身を *pte_store の中に入れといてあげれば良さげ
- (pte_t *)PTE_ADDR(pte)[PTX(va)] かな
- 上記の中身を pa2page でフィルタした値を戻してあげれば良いはず
- ここでも pgdir_walk 使ってる
- KADDR とか PADDR とか
- 手続きの中でその番地にアクセスする場合は KADDR で変換、ってことなのかな
- できれば直前で変換したいよな
- page_remove
- page_lookup の戻りな Page ディスクリプタを page_decref
- pp_ref が 0 になって削除された場合、ページを初期化
- tlb_invalidate もすること
なんとなくいいカンジに見えはしますが、盛り込んでみないと分からないですね。
帰宅後に
盛り込みなど実施できればしてログもエントリ投入の方向ッス。