1. 收集pagefault handler的相关信息,存入vmf结构体,并调用vma->vm_ops->fault进行缺页处理(完成页面的调入工作),返回的页存储在vmf.page中
2. 如果需要写访问,则需要区分私有映射和共享映射。
a. 如果是私有映射,首先调用anon_vma_prepare为vma区域建立一个新的anon_vma实例,并调用alloc_page_vma(页的分配过程是从伙伴系统进行分配的)分配一个新页page。最后调用copy_user_highpage函数将vmf.page所指向的页拷贝到新分配的页page中,创建数据副本。
b. 如果是共享页,首先进行一些安全检查,比如该页是否具有写权限等等,最后设置写标记page_mkwrite = 1
3. 通过1、2步操作,已经基本确定的页的位置,那么下一步工作就是将页与相应的进程建立联系