关于nopage,难以启齿啊~
2.4的内核,看到ldd中讲到的nopage,很是不能理解~
目前的情况是这个样子的:
1.在驱动中通过__get_free_pages 得到4块内存区域,a.b.c.d大小各位 X;
2.如果想在应用层访问a.b.c.d中的内容,用nopage怎么理解?
假设我在应用层调用
begin = mmap(……);begin 将会得到什么?
当我访问begin + X 的时候,内核应该调用 *nopage,这时候传给驱动的offset 是不是就是X?
总之很糊涂啊~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
如果mmap映射成功,则返回被映射区域的起始地址;如果失败,则返回MAP_FAILED。
因此,begin+X也就是映射区域的偏移地址了。
这个offset为文件中的起点,实际上应该就是这个映射是从文件中什么偏移开始的,而并不是你说的这个意思。
在2.4的内核版本中,mmap调用的执行路径为:
sys_mmap2() --> old_mmap() --> do_mmap2() -->do_mmap_pgoff() --> get_unmapped_area() --> .....
一旦映射以后,你的操作应该说和这个offset再没有什么关系,只是你应该明确它是文件偏移映射的其实地址而已。
get_free_page一次建立4K的页,而1个页表为1204页