关于nopage,难以启齿啊~

发布于 2022-09-23 12:19:17 字数 315 浏览 27 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

抱猫软卧 2022-09-30 12:19:17

如果mmap映射成功,则返回被映射区域的起始地址;如果失败,则返回MAP_FAILED。
因此,begin+X也就是映射区域的偏移地址了。

疯了 2022-09-30 12:19:17

这个offset为文件中的起点,实际上应该就是这个映射是从文件中什么偏移开始的,而并不是你说的这个意思。
在2.4的内核版本中,mmap调用的执行路径为:

sys_mmap2() --> old_mmap() --> do_mmap2() -->do_mmap_pgoff() --> get_unmapped_area() --> .....

一旦映射以后,你的操作应该说和这个offset再没有什么关系,只是你应该明确它是文件偏移映射的其实地址而已。

鹊巢 2022-09-30 12:19:17

get_free_page一次建立4K的页,而1个页表为1204页

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文