内存区域管理与页错误异常处理
1. 内存区域相关函数
1.1 get_user_pages() 函数
get_user_pages() 函数会遍历从 addr 到 addr + len 之间所有页面的起始线性地址。对于每个起始线性地址,它会调用 follow_page() 函数来检查当前页表中是否存在到物理页面的映射。如果不存在这样的物理页面, get_user_pages() 会调用 handle_mm_fault() 函数,该函数会分配一个页框,并根据内存区域描述符的 vm_flags 字段设置其页表项。最后,它会返回新内存区域的线性地址。
1.2 do_munmap() 函数
当内核需要从当前进程的地址空间中删除一个线性地址区间时,会使用 do_munmap() 函数。该函数的参数包括进程内存描述符的地址 mm 、区间的起始地址 start 以及其长度 len 。要删除的区间通常并不对应一个内存区域,它可能包含在一个内存区域中,也可能跨越两个或更多区域。
do_munmap() 函数的执行步骤如下:
1. 对参数值进行一些初步检查。如果线性地址区间包含大于 TASK_SIZE 的地址,或者 start 不
超级会员免费看
订阅专栏 解锁全文
2万+

被折叠的 条评论
为什么被折叠?



