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
あたりか。
夜に続きをヤるかも、ヤらないかも。