6.828: Operating System Engineering (53)
メモ。
- page table の先頭アドレスは KADDR(PTE_ADDR(pgdir[PDX(va)])) で求めることができる
- va はリニアアドレスです
- ちなみに pgdir[PDX(va)] の末端は 1 でないと駄目 (なはず)
- page table が存在する、という意味
- page table entry (ページフレームへのアドレスを保持してるはず) のアドレスは page table の先頭アドレスを p とすると PTE_ADDR(p[PTX(va)]) で求めることができる
- そういった意味では pgdir な配列には物理アドレスが格納されているのか
- ので、pgdir_walk 手続きでは取り出した物理アドレスを KADDR なフィルタにかけて処理してはいけない
- ちなみに pgdir_walk の仕様としてコメントに_pgdir_walk returns a pointer to the page table entry (PTE) for linear address 'va'_という記述がある
ダウトおよび確認事項一覧
直さず指摘するのみ、ということで。
- pgdir_walk 手続きで pte に (pte_t *)PTE_ADDR(pgdir[PDX(va)]) 格納してますが、これは物理アドレスなのでダウト
- あら、NULL 判定してるので変換しちゃ駄目なのか
- page table は pgdir_walk で確保したページフレーム
- ぶっちゃけると pgdir_walk では確保した page table の先頭アドレス戻せば良いはず
- ダウトかも
- page_insert を上記の pgdir_walk が page table の先頭アドレスを戻すとして
- page table entry が存在するか、な確認方法は
- pgdir_walk の戻りを p とすると PTE_ADDR(p[PTX(va)]) が page table entry のアドレス
- kva だか pa だかは不明
- 該当位置の中身が PTE_P かどうかで判断すれば良い (または NULL)
- ここにきちんと値を格納するしくみ (というかアクセサ) が必要
- pgdir_walk が確保したページフレームをどうするか
- page table entry に格納 (アクセサのポイント高いですね
- 存在フラグ (ry
- page table entry が存在するか、な確認方法は
- page_lookup
- page table entry のアドレスを pte_store に格納すれば OK
- 存在フラグはスルーで良いかどうか
- page table entry のアドレスを pte_store に格納すれば OK
- page_remove
- どうやって存在フラグを降ろすか
多分これを元に明日の晩から実装検討になる予定。明日の日中上記をどこまで精査できるのだろうか。