免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 21893 | 回复: 6
打印 上一主题 下一主题

请教大家一个mmap的问题 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2007-06-13 11:08 |显示全部楼层
我觉得你首先得了解vm->vm_pgoff和PAGE_SHIFT是什么意思,vm_pgoff 代表的是这个VM被映射的物理页,而物理页号左移PAGE_SHIFT后,得到的是物理地址,物理地址右移PAGE_SHIFT得到的是物理页号。

论坛徽章:
0
2 [报告]
发表于 2007-06-13 12:59 |显示全部楼层
off = ((address-area->vm_start) >> PAGE_CACHE_SHIFT) + area->vm_pgoff;
请仔细看看这句,其实在这里area->vm_pgoff才是基址,前面那部分才是基于它的偏移, 请看清楚。

vm_pgoff是在做mmap的时候给赋值的。

论坛徽章:
0
3 [报告]
发表于 2007-06-13 14:19 |显示全部楼层
你也要看清楚用在什么场合,代表什么意思,你仅仅凭它的名称来定义呵呵,太搞笑了

论坛徽章:
0
4 [报告]
发表于 2007-06-13 14:38 |显示全部楼层
off = ((address-area->vm_start) >> PAGE_CACHE_SHIFT) + area->vm_pgoff;
在这里,area->vm_pgoff是这个vm_area_struct相对于文件的偏移,area->vm_start是相对于文件的地址偏移,address - area->vm_start是这个地址相对于当前的VM area的偏移,右移PAGE_CACHE_SHIFT是转换成页号,两者相加,是这个address在当前VM area中的页number 偏移的数量。

请指正。

论坛徽章:
0
5 [报告]
发表于 2007-06-13 14:53 |显示全部楼层
对的,并不能把它和物理页联系起来。 只有在特定的上下文中才可以。

论坛徽章:
0
6 [报告]
发表于 2007-06-13 15:43 |显示全部楼层
原帖由 思一克 于 2007-6-13 15:18 发表于 22楼  
remap_pfn_range是用来map整个物理内存成一个文件。这时,vm_pgoff的数值就等于物理页号。


应该是当remap_pfn_range被用来map整个物理内存成一个文件的时候.....

remap_page_range() 和remap_pfn_range()是完成同样功能的函数,只是后者可以实现映射>4G的内存到虚拟地址空间。

论坛徽章:
0
7 [报告]
发表于 2007-06-14 10:54 |显示全部楼层
我觉得我们应该从那个例子的上下文中去理解楼主的问题,唉,断章取义不可取。不过我觉得这个问题已经很清楚了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP