问题:这个get_user_page后,到底得到了啥?访问它会发生啥?
先上结论:
1. get_user_page后,如果成功,则struct page引用会加1,表示被引用中。mmu页表项也会分配出一个page,此时仍然是no present的。直到真实的access内容时才会page in。
这样做的好处是,lazy handle。
2.访问它时,这时会触发page fault。发生page in。载入内容。
pte_present(entry) 当前内容不在主存上。
pte_none(entry) 未分配了page。
static long __get_user_pages(){
page = follow_page_mask(vma, start, foll_flags, &page_mask);//遍历页表
if (!page) {
int ret;
ret = faultin_page(tsk, vma, start, &foll_flags, 无page,分配一个page.
nonblocking);
}
}