我对以下评论感到困惑:
/* Looks up the physical address that corresponds to user virtual
address UADDR in PD. Returns the kernel virtual address
corresponding to that physical address, or a null pointer if
UADDR is unmapped. */
我理解第一句话是找到实际的物理地址,但是,我不明白为什么会返回与该地址相对应的内核虚拟地址。总之,既然 uaddr 是一个用户虚拟地址,那它为什么和内核虚拟地址有关呢?
void *
pagedir_get_page (uint32_t *pd, const void *uaddr)
{
uint32_t *pte;
ASSERT (is_user_vaddr (uaddr));
pte = lookup_page (pd, uaddr, false);
if (pte != NULL && (*pte & PTE_P) != 0)
return pte_get_page (*pte) + pg_ofs (uaddr);
else
return NULL;
}
提前致谢。