免费注册 查看新帖 |

Chinaunix

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

线性地址与逻辑地址 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-20 16:25 |只看该作者 |倒序浏览
系统RAM所有页框描述符都存在mem_map数组中,指针mem_map指针是该数组的线性地址还是物理地址?virt_to_page(addr)宏返回的是页框描述符的线性地址还是物理地址?
ULK说,如果页框不在高端内存区,可以通过计算页框下标,然后将其转换为物理地址,在根据物理地址得到相应页框的线性地址,代码如下:__va((unsigned long) (page - mem_map) << 12),page-mem_map可以得到该页框在数组mem_map的偏移,但是再左移12位是什么意思呢?

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
2 [报告]
发表于 2010-11-20 16:47 |只看该作者
本帖最后由 瀚海书香 于 2010-11-20 16:59 编辑
系统RAM所有页框描述符都存在mem_map数组中,指针mem_map指针是该数组的线性地址还是物理地址?virt_to_pag ...
diandianlianyi 发表于 2010-11-20 16:25


mem_map是线性地址,virt_to_page返回的也是线性地址。
page-mem_map可以得到该页框在数组mem_map的偏移,而偏移的单位就是每个页框的大小,也就是4K。所以需要再左移12位。

论坛徽章:
0
3 [报告]
发表于 2010-11-20 23:33 |只看该作者
本帖最后由 diandianlianyi 于 2010-11-21 15:58 编辑

回复 2# 瀚海书香


    page-mem_map就可以得到偏移了?好像有问题吧?我觉得应该再除以32,因为mem_map数组每个元素的大小是32字节。类似的如永久内核映射的pkmap_count数组,要想根据一个4KB线性地址区的起始地址page得到该区域在该数组的偏移,做法是,page-PKMAP_BASE>>PAGE-SHIFT! 在这里从PKMAP开始的一个个4KB的大小的线性地址区不就相当于一个元素大小为4KB的数组吗?求解释~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP