免费注册 查看新帖 |

Chinaunix

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

[其他] 逻辑地址、虚拟地址不解 [复制链接]

论坛徽章:
2
双鱼座
日期:2014-05-10 15:58:14未羊
日期:2014-05-18 11:36:43
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-05 17:01 |只看该作者 |倒序浏览
之前以为逻辑地址、虚拟地址是同一个概念:
http://www.oldlinux.org/oldlinux/viewthread.php?tid=2378
比如:
char *p = xx;
这里的xx就是逻辑地址(明明白白写在程序中的地址),而虚拟地址是xx以及“背后”的段寄存器值吗?或者说只要不是物理地址就可以称作虚拟地址?

论坛徽章:
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 [报告]
发表于 2014-05-05 19:20 |只看该作者
回复 1# fireaway7
char *p = xx;
这里的xx就是逻辑地址(明明白白写在程序中的地址),而虚拟地址是xx以及“背后”的段寄存器值吗?或者说只要不是物理地址就可以称作虚拟地址?


这里的xx是逻辑地址,可以理解为段内偏移;虚拟地址=段首地址+段内偏移

由于linux下段的首地址都使用0,所有逻辑地址=虚拟地址


所以在linux下你可以理解逻辑地址就是虚拟地址。

   

论坛徽章:
2
双鱼座
日期:2014-05-10 15:58:14未羊
日期:2014-05-18 11:36:43
3 [报告]
发表于 2014-05-05 20:11 |只看该作者
嗯,谢谢版主回答。书里面说内核在建立一个进程时,cs寄存器设置为__USER_CS,ds、es、ss都设置为__USER_DS,分别能找到GDT中第4个和第5个描述项,而这两个描述项的内容也是事先设置好的,基址为0,段长度为4GB,所以虚拟地址是多少,映射得到的线性地址就还是多少,下一步就进入页映射。


   

论坛徽章:
2
双鱼座
日期:2014-05-10 15:58:14未羊
日期:2014-05-18 11:36:43
4 [报告]
发表于 2014-05-06 11:06 |只看该作者
请问一下我有一个求助,标题是“请教PAGE_OFFSET宏的意义”,不知道什么原因被删除了?


   

论坛徽章:
0
5 [报告]
发表于 2014-05-08 17:28 |只看该作者
PAGE_OFFSET  就是物理地址与线性地址(虚拟地址)之间的位移量

论坛徽章:
2
双鱼座
日期:2014-05-10 15:58:14未羊
日期:2014-05-18 11:36:43
6 [报告]
发表于 2014-05-08 17:43 |只看该作者
嗯,这个我知道,我想弄明白的是为什么要有它?比如C语言里面需要有“int”这个关键字,因为需要用这个关键字声明或定义整型变量。你帮我回答了PAGE_OFFSET代表偏移,能不能再帮我解释一下为什么要有这个偏移,如果没有会导致什么问题吗?


   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
7 [报告]
发表于 2014-05-08 20:57 |只看该作者
回复 6# fireaway7


    PAGE_OFFSET和TEXT_OFFSET,加在一起就是内核起始虚拟地址,在ARM里面PAGE_OFFSET是3G,TEXT_OFFSET是0x8000


PAGE_OFFSET和PHYS_OFFSET用于计算虚拟到物理和物理到虚拟的转换

论坛徽章:
2
双鱼座
日期:2014-05-10 15:58:14未羊
日期:2014-05-18 11:36:43
8 [报告]
发表于 2014-05-08 23:24 |只看该作者
那我换个问题请教吧,为什么从内核到用户,地址需要加PAGE_OFFSET,用户到内核,地址需要减PAGE_OFFSET,我不是不知道有这个过程,而是不明白为什么要有这个过程?这个偏移是线性的,也就是说本来1能找到1,2能找到2,3能找到3,现在非要用1做偏移,让1找到2,2找到3,3找到1,这样不"多余"吗?初学者问得问题可能都有点傻,但确实就是没想明白,希望能帮忙解释一下。


   

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
9 [报告]
发表于 2014-05-09 10:00 |只看该作者
回复 8# fireaway7

如果内核空间不做 PAGE_OFFSET偏移,内核空间大小又不确定。那么编译器对进程的期望运行地址如何安排?

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
10 [报告]
发表于 2014-05-09 19:09 |只看该作者
fireaway7 发表于 2014-05-08 23:24
从内核到用户,地址需要加PAGE_OFFSET,用户到内核,地址需要减PAGE_OFFSET


你的理解有错误

低于PAGE_OFFSET就是user space,高于PAGE_OFFSET就是kernel space
PAGE_OFFSET和PHYS_OFFSET是用来计算内核空间虚拟到物理和物理到虚拟的,而不是用来计算用户到内核或内核到用户的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP