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_lookup
    • page table entry のアドレスを pte_store に格納すれば OK
      • 存在フラグはスルーで良いかどうか
  • page_remove
    • どうやって存在フラグを降ろすか

多分これを元に明日の晩から実装検討になる予定。明日の日中上記をどこまで精査できるのだろうか。