免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: chenzhanyiczy
打印 上一主题 下一主题

虚拟地址问题求助!!高手进!! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-11-08 10:34 |只看该作者
原帖由 superfight 于 2009-11-7 16:58 发表
分开用3GB是很久以前的事情了~  


这个我表达有误~ 其实是想说每个进程使用一个GDT~  而每个GDT都有4G的逻辑地址~

并不是说每个进程都能映射3G的线性地址~ Orz

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
12 [报告]
发表于 2009-11-08 12:18 |只看该作者
原帖由 superfight 于 2009-11-8 00:06 发表



每个段可以映射4G的地址~ 这个地址是逻辑地址~ 经过分段转换之后为线性地址~

在转换成线性地址的时候就将她们映射到了不同的线性地址上了~

最早的时候linux0.11为了适应这种分段机制,每个程序并没有 ...



但问题是,映射后的线性地址会出现相同。。怎样才能保证不相同呢?

举个例子:

首先,线性地址=段对应的线性基地址+偏移量

text 段线性基地址是0x8a,某个偏移量是10,那么对应的线性地址是0x9a

bss段的线性基地址也是0x8a,某个偏移量也是10,那么对应的线性地址也是0x9a

这样不是就出现相同的线性地址了吗?

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
13 [报告]
发表于 2009-11-08 12:20 |只看该作者
原帖由 zbwise 于 2009-11-8 09:27 发表



1. 理论上,用户程序的每个段都可以分别映射至0-3G的线性地址空间
2. 实际上, 链接器和加载器会进行各段地址和符号的重定位 ,确保每个段不会重叠


关于2,因为每个段都可以分别映射至0-3G的线性地址空间,怎么不会出现重叠呢?链接器和加载器如何确保每个段不重叠的?

先谢了!

论坛徽章:
0
14 [报告]
发表于 2009-11-08 13:04 |只看该作者

回复 #13 chenzhanyiczy 的帖子

没看我的贴?
你所的这些段在连接加载后被分配给特定的"进程虚拟地址空间区域"来管理,不同的区域有不同的属性来满足你的需要,注意
这个区域是不重叠的.那么在做页寻址时,对应的虚拟地址属性也就可以是唯一的,虽然不同的虚拟地址页框可以影射到相同的物理地址,但是从2个虚拟地址看还是有不同的属性.

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
15 [报告]
发表于 2009-11-08 14:03 |只看该作者
原帖由 epegasus 于 2009-11-8 13:04 发表
没看我的贴?
你所的这些段在连接加载后被分配给特定的"进程虚拟地址空间区域"来管理,不同的区域有不同的属性来满足你的需要,注意
这个区域是不重叠的.那么在做页寻址时,对应的虚拟地址属性也就可以是唯一的,虽 ...



有点晕。。。

“不同的虚拟地址页框可以影射到相同的物理地址”,既然物理地址都相同了,那程序怎么区分呢? 比如:0x81物理地址既可以保存text段一指令内容,又可以作为程序变量的存储地址,这怎么可能呢?

望epegasus兄回答一下

论坛徽章:
0
16 [报告]
发表于 2009-11-08 14:13 |只看该作者

回复 #15 chenzhanyiczy 的帖子

我说的这种应该是比较少见的,大部分出现在内核空间.
即使出现在进程空间, 你想想页式寻址的过程,虚拟地址A 不同于虚拟地址B,假设分属于2个不同的页,注意这里的页还是虚拟地址,在页寻址的找到页表项后,表项里面的属性字段自然可以代表A的或B的地址属性. 注意这里的表项仍然是针对虚拟地址范围的.  最后寻到物理地址. 如果A 和B对应相同的物理地址,但是你程序寻址A和寻址B找到是2个不同的页表项, 当然可以有不同的属性.
不知道说清楚了没有...

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
17 [报告]
发表于 2009-11-08 14:48 |只看该作者
原帖由 epegasus 于 2009-11-8 14:13 发表
我说的这种应该是比较少见的,大部分出现在内核空间.
即使出现在进程空间, 你想想页式寻址的过程,虚拟地址A 不同于虚拟地址B,假设分属于2个不同的页,注意这里的页还是虚拟地址,在页寻址的找到页表项后,表项里面 ...



感觉好像不对吧

A和B都对应相同的物理地址,这句话就好像错了,物理地址是最后的cpu要存取的地址了,一个物理地址怎么可能会同时对应A和B?


A和B是虚拟地址 --> 通过分段机制  --> 得到相同的线性地址 --> 通过分页机制 --> 得到相同的物理地址

从上面可以看出,相同的线性地址它的页目录项是相同的,页表也是相同的,偏移量也是相同的,所以它们转换后的物理地址也是相同的,

所以现在的关键点是如何保证A和B转换后的线性地址是不同的?

论坛徽章:
0
18 [报告]
发表于 2009-11-08 15:38 |只看该作者
原帖由 chenzhanyiczy 于 2009-11-8 12:18 发表
但问题是,映射后的线性地址会出现相同。。怎样才能保证不相同呢?
举个例子:
首先,线性地址=段对应的线性基地址+偏移量
...


这里分2种情况来考虑:
text和bss使用不同的段:  呢么text和bss的基地址不一样   偏移一样
text和bss使用相同的段:  呢么text和bss的基地址一样     偏移不一样
段,偏移,必然有一个不一样,同样的话本身虚拟地址就冲突了

[ 本帖最后由 superfight 于 2009-11-8 15:48 编辑 ]

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
19 [报告]
发表于 2009-11-08 15:49 |只看该作者
”text和bss使用相同的段:  呢么text和bss的基地址一样     偏移不一样“

偏移量为什么不可以一样呢?应该可以一样啊,因为根据每个段都可以分别映射至0-3G的线性地址空间啊

论坛徽章:
0
20 [报告]
发表于 2009-11-08 15:59 |只看该作者

回复 #17 chenzhanyiczy 的帖子

好象不对?那你就再确认下吧.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP