日期:2014-05-16  浏览次数:20734 次

关于2.4.2的mmap()
最近在看2.4.2的代码
mmap()的主体函数仅仅是创建了vma_area_struct,并将其插入当前进程的mm_struct结构
而分配page及从文件读入相应页面,建立映射的工作推迟到真正需要的时候才进行?
请问是不是这样的啊?
确认一下,请大家指教

------解决方案--------------------
对的,mmap调用创建并添加进程的空间,就是创建并添加一个vma_area_struct(PAGESIZE的整数倍),这样的好处就是可以尽量延迟,提高效率。
当访问该部分空间的时候,首先检查时不是处于vma_are_struct的链表,这是由进程描述符task-> mm指向的,如果属于进程地址空间,通过缺页处理程序来建立真正的page映射。

unmmap的时候,就要两部分的操作:
1)撤销线性空间;2)页表映射,如果需要要归还页框(比如有几个进程共享同一组页框,而这个进程作为最后一个进程attach到这组,这是内存管理模块自动处理的)