- 论坛徽章:
- 0
|
在handle_pte_fault()中,将会根据pte和vma的状态来判断创建对应的FILE_MAPPING和ANON 页面,
handle_pte_fault
if (pte_none(entry)) {
if (vma->vm_ops) {
if (likely(vma->vm_ops->fault))
return do_linear_fault(mm, vma, address,pte, pmd, flags, entry);
}
return do_anonymous_page(mm, vma, address,pte, pmd, flags);
本人理解,包括网上帖子描述do_linear_fault主要是用来创建FILE_MAPPING页面的,
do_linear_fault
->__do_fault
/*Should we do an early C-O-W break? */
page = vmf.page;
if (flags & FAULT_FLAG_WRITE) {
if (!(vma->vm_flags & VM_SHARED)) {
page = cow_page;
anon = 1;
copy_user_highpage(page, vmf.page, address, vma);
__SetPageUptodate(page);
在这里,为啥COW的写入是非VM_SHARED类型,就是ANON类型页面,如果是VM_SHARED类型,就是FILE_MAPPING页面呢?
谢谢!
|
|