免费注册 查看新帖 |

Chinaunix

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

请教一个一直很疑惑的问题,又是关于高端内存 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-09 23:52 |只看该作者 |倒序浏览
看了不少关于高端内存的问题,但是有一点还是始终没弄明白
说高端内存是为了内核能访问大于1G的线性地址
但是我直接用用户空间的虚拟地址来访问不行么?
毕竟intel是提供了4G的线性地址空间。
为什么一定要映射到内核空间来呢?

我在想是不是有时候需要根据物理地址来访问?
我能想到的好像只有这种情况下无法通过用户空间虚拟地址来访问一块内存。

可能问题比较菜,见笑了~

论坛徽章:
0
2 [报告]
发表于 2009-03-10 00:08 |只看该作者
楼主你先看看这个贴子呢:
http://linux.chinaunix.net/bbs/v ... p;page=1#pid6905219

论坛徽章:
0
3 [报告]
发表于 2009-03-10 08:30 |只看该作者
好像是说内核要有能力管理全部的内存,而内核的1G线性是有限的,所以物理ram>1G时,就有了高端内存(>896M)映射的问题

论坛徽章:
0
4 [报告]
发表于 2009-03-10 08:37 |只看该作者

回复 #2 scutan 的帖子

这个帖子我看过了,网上我也看了很多关于高端内存解惑类的文章帖子
但是可能哪里想歪了,这一点总是弄不明白
就是内核如果要访问哪一个地址的话为什么不用用户空间的虚拟地址
为什么一定要先映射到内核空间然后在访问?
我想出来的就是内核假如要访问一个物理地址就必须这样,因为它没有办法把一个物理地址转换成当前页表的虚拟地址
所以只有通过这个办法来访问。
但是它如果要访问一个虚拟地址,不是完全可以直接用用户空间的地址么

论坛徽章:
0
5 [报告]
发表于 2009-03-10 08:37 |只看该作者

回复 #3 wangch05 的帖子

确实是这么说的
但是本人资质愚钝
上面的问题还是没想清楚。。

论坛徽章:
0
6 [报告]
发表于 2009-03-10 08:56 |只看该作者
可能我的问题就在于内核“管理”1G的空间没太弄明白
访问跟管理是一个概念么
我觉得它可以用上用户空间的虚拟地址访问整个4G阿

论坛徽章:
0
7 [报告]
发表于 2009-03-10 09:32 |只看该作者
原帖由 peimichael 于 2009-3-10 08:37 发表
这个帖子我看过了,网上我也看了很多关于高端内存解惑类的文章帖子
但是可能哪里想歪了,这一点总是弄不明白
就是内核如果要访问哪一个地址的话为什么不用用户空间的虚拟地址
为什么一定要先映射到内核空间然 ...


我们一步一步来, 首先, Linux是Monolithic kernel, 即一个单内核形式. 此时, 每个进程都有3G的自己的用户空间, 而所有的进程都拥有1G的内核地址空间, 这1G的内核地址空间是每个进程与内核所共同拥有的.

>>为什么一定要先映射到内核空间然后在访问

操作系统就是为每个进程提供了访问硬件资源的功能, 所以这个过程肯定是进程向操作系统发送请求, 然后操作系统再对硬件资源进行操作, 并返回给用户进程. 而且每个进程的页表都在内核空间的, 建立了虚拟地址与物理地址的联系之后, 就得将这个联系写到页表中去. 说白了就是内核对所有的硬件资源进行管理, 当用户态的进程需要时, 就找内核要, 内核就给它. 而内核的地址空间只有1G的大小, 要管理大于1G的物理地址空间. 就不能够是简单的一个偏移量的映射关系.

论坛徽章:
0
8 [报告]
发表于 2009-03-10 11:44 |只看该作者
跟着scutan老大,我也补充两句:

楼主显然没明白逻辑地址、虚拟地址、物理地址的区别,原因是没弄懂分页机制,也就没明白分页之前的分段机制,也就不清楚实模式和保护模式的区别,归根到底是不清楚系统究竟为什么要存在不同的地址空间和映射。所以需要如下理清思路:
x86实模式--->x86保护模式--->分段机制--->分页机制--->页表映射--->高端内存
去买本linux2.6内核标准教程看吧,新出的。把整个系统启动流程(包括引导用的汇编代码)都搞清楚了,就一切都很easy了。

我也是才学linux 2月的菜鸟,希望能对一样菜鸟的有所帮助,咱们共同学习提高呀!

论坛徽章:
0
9 [报告]
发表于 2009-03-10 13:14 |只看该作者
我觉得关于x86的分段分页我还是比较清楚的
以前实模式保护模式的汇编都写过
但是对于scutant老大说的,
用户空间向内核要内存的话,内核只需要操作页表就行了啊,
页表是可以放在线性映射的地址段中把,为什么还要把那个页面整个映射到内核空间呢,
即使是需要把页面清零,也可以映射到用户空间之后再直接用用户空间的地址来清零。

以前看的书都是一块一块介绍的,没看过系统启动代码,也许是如楼上所说,我应该认真看看系统初始化的代码吧

论坛徽章:
0
10 [报告]
发表于 2009-03-10 13:31 |只看该作者
原帖由 peimichael 于 2009-3-10 13:14 发表
我觉得关于x86的分段分页我还是比较清楚的
以前实模式保护模式的汇编都写过
但是对于scutant老大说的,
用户空间向内核要内存的话,内核只需要操作页表就行了啊,
页表是可以放在线性映射的地址段中把,为什 ...


楼主你看看这两篇文章呢:
http://blogimg.chinaunix.net/blog/upfile2/090309170518.pdf
http://blogimg.chinaunix.net/blog/upfile2/090309170458.pdf

其实我是这样来理解的:

你如果只看内核地址空间, 它只有1G的大小是吧(3G-4G). 那么这个时候, 这1G的地址空间要去管理所有的物理地址, 如果说此时的物理地址小于1G, 那么没有什么问题, 如果说大于1G了呢? 那就只有使用高端内存的映射方式去对这整个内存进行管理. 说白了, 就是, 用1G的线性地址去管理大于1G的物理地址空间. 因为物理地址都是由内核去进行管理的. 普通的用户程序如果需要内存, 那就向内核去要, 内核就给它, 此时用户程序就可以通过页表去访问这段内存了.

下面这幅大图也不错:
http://linux.chinaunix.net/bbs/v ... p%3Bfilter%3Ddigest
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP