6.828: Operating System Engineering (92)

ええと手続き定義のコメントが以下なのか。

// Initialize the kernel virtual memory layout for environment e.
// Allocate a page directory, set e->env_pgdir and e->env_cr3 accordingly,
// and initialize the kernel portion of the new environment's address space.
// Do NOT (yet) map anything into the user portion
// of the environment's virtual address space.

とりあえず、引数で struct Env なオブジェクトが渡されるので、page_alloc したナニを e->env_pgdir に格納して PADDR マクロでフィルタしたソレを e->env_cr3 に格納しとけば良いはず。
で、page directory の kernel な部分 (末端 1GB あたり?) を云々、ということなのかどうか。あとは Hint: な記述を参考に、なのか。

  • envs 用の VA なナニは UTOP の直上 (inc/memlayout.h にもその記述あり)
  • VPT と UVPT はセットしない (ここは page Table なナニ)
  • レイアウトと権限あたりは inc/memlayout.h 見れ
  • boot_pgdir 手続きはテンプレとして使える
  • UTOP より下は空で OK
  • page_alloc 以外の手続きは呼び出す必要ナシ

ええと pp_ref はメンテしなくて良いのかな。あら、env_pgdir の pp_ref は云々、という記述がありますね。あと kern/pmap.h の記述を云々、という話もありますね。

  • page2ppn
  • page2pa
  • pa2page
  • page2kva

あたりか。
夜に続きをヤるかも、ヤらないかも。