免费注册 查看新帖 |

Chinaunix

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

有关段式映射的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-04-28 09:42 |只看该作者
回复 9# sherf

在8086时代,内存管理只有分段这一个环节。经过分段单元后的地址即物理地址,直接放在总线上。所以如果两个进程的段重合了,它们就会互相影响。

后来有了分页机制,但为了兼容性,依旧要经过分段环节。分段是必需的,分页是可选的。如果不开启分页,情况和8086类似。开启分页后,经过分段单元后的地址变成了线性地址,线性地址再由分页单元映射到物理地址。假设大家的段都是重合的。只使用分段的话,这些地址直接映射到同一块物理内存,自然会混乱;开启分页的话,这些地址会再经过一道解释,不同进程的同一个线性地址(经过分段后的地址)会由分页单元依该进程页表内容映射到物理内存。所以,每个进程的地址空间是独立的。

论坛徽章:
0
12 [报告]
发表于 2011-04-28 10:17 |只看该作者
本帖最后由 sherf 于 2011-04-28 10:23 编辑
回复  sherf


    你说的很混乱。

1. 对于段式管理,你想要原理,还是要实现?
原理你说的也没什么 ...
mnf 发表于 2011-04-28 09:34



对于1,我要说的是实现,即段式管理实现的步骤(大致步骤即可,不是代码级别的)

对于2,有关页式映射部分,我重新review了一下,是我之前理解上有偏差了。 0x8048368是一个线性地址,当它经过线性转换(高10位,中间10位,低12位)后,所得到的 0x740368 是一个物理地址,而且该地址不是逻辑偏移(无需与段基址关联),即 greeting() 的物理地址就是 0x740368。

对于你所说的“linux一般不用LDT,CS都一样(除了user/kernel之间的转换)“,我的理解具体如下:

如果我在命令行输入 greeting(假设编译后的名字叫greeting),则系统会加载greeting入内存。这时,我在另一个命令窗口,再键入greeting,则系统会再加载一次 greeting。则后一个greeting 的内存映像会覆盖第一次加载的greeting内存映像。原因是因为它们的线性地址都是 0x8048368,最终转换出来的结果都是 0x740368(这个我下面会解释,不是这样的)。

但在linux的运行中是不会出现这种覆盖现象的,即第一次greeting的物理地址如果是 0x740368,则第二次的greeting的物理地址就一定不是 0x740368。那是什么原因造成线性地址一样而翻译结果不一样呢?我觉得是 页目录首址,即赋予 CR3 的那个地址。那换句话说,第一次greeting使用的页表与第二次greeting 使用的页表不一样,是2套不同的页表,且这2套页表应该是放在内核空间里的(猜的,还没看代码)。而linux之所以能够不用LDT(另外为每个进程设定不同的段基址)就能“有效隔离“不同的进程、使它们不重叠,靠的也是这个(一套不同的页表,至少页首址不同)。

我的理解对吗?如果是对的,那在i386中,linux的段式管理到底作了什么?因为通过上面的分析(如果上面的分析是对的话),可以看出,段基址、段界限等信息在寻址中根本不会用到,那是否只是为了检查权限(即DPL,RPL等信息)?

论坛徽章:
0
13 [报告]
发表于 2011-04-28 10:46 |只看该作者
回复 12# sherf


.........

论坛徽章:
0
14 [报告]
发表于 2011-04-28 11:48 |只看该作者
回复 13# sherf

。。。。

论坛徽章:
0
15 [报告]
发表于 2011-04-28 13:37 |只看该作者
回复 12# sherf

怎么都不吭声了呢?

论坛徽章:
0
16 [报告]
发表于 2011-04-28 14:12 |只看该作者
回复 12# sherf

你看了这么多帖子,经过漫长的思考,最后终于领悟出了每个进程的页表是不一样的。。。。。你在内核版的帖子下面有人帖了个精华帖链接你又不看。。。。。

论坛徽章:
0
17 [报告]
发表于 2011-04-28 16:02 |只看该作者
回复  sherf

你看了这么多帖子,经过漫长的思考,最后终于领悟出了每个进程的页表是不一样的。。。。。 ...
tempname3 发表于 2011-04-28 14:12


那个精华贴其实我看了,但里面说的跟《情景分析》里差不多,还是没有说清楚到底的段式管理要做些什么?或者说要获取些什么信息(也就是我在12楼里问的问题)?

论坛徽章:
0
18 [报告]
发表于 2011-04-28 16:50 |只看该作者
回复 17# sherf

你要是对OS的事不熟的话就别先看情景分析了,作者文笔太烂。找些其他的资料看看,比如深入理解Linux内核第二章。

论坛徽章:
0
19 [报告]
发表于 2011-04-28 17:02 |只看该作者
本帖最后由 sherf 于 2011-04-28 17:08 编辑
回复  sherf

你要是对OS的事不熟的话就别先看情景分析了,作者文笔太烂。找些其他的资料看看,比如深入 ...
tempname3 发表于 2011-04-28 16:50


楼上,其实《情景分析》还是很不错的......

我目前就是想把 12楼 里的问题弄清楚,但似乎我在 12楼 里提的问题大家都不太感兴趣............

论坛徽章:
0
20 [报告]
发表于 2011-04-28 17:20 |只看该作者
回复 12# sherf

你想问什么?我在11楼还没说明白吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP