免费注册 查看新帖 |

Chinaunix

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

[内核入门] 高端内存存在的意义 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-11 16:13 |只看该作者 |倒序浏览
问两个很二的问题,1)Linux为什么要划分出3G/1G的空间?2)高端内存存在的意义是什么?

高端内存主要是解决1G的虚拟空间下大于1G物理空间的问题,可以这么理解么?

论坛徽章:
0
2 [报告]
发表于 2012-05-11 16:49 |只看该作者
1. 1G/3G是为了将4G的线性地址划分为内核空间/用户空间。
    当用户空间的进程要访问内核空间的地址的时候,就会报错。
    是一种保护机制。
2. 在32为的系统中,高端内存是指大于896MB的物理地址空间。
    以内核的角度来看,高端内存时不能直接映射到自己的线性地址当中的。
    而只能通过其他方式暂时的进行映射。

以上是本人愚见,不知道能不能帮你解开疑惑。

论坛徽章:
0
3 [报告]
发表于 2012-05-11 16:54 |只看该作者
楼上正解。
不过不同的架构上分界线不尽相同,内核用户也可以是4G空间对半劈开。高端内存的物理分界也不是固定的896MB。

论坛徽章:
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
4 [报告]
发表于 2012-05-11 17:17 |只看该作者
回复 1# icanth
1)Linux为什么要划分出3G/1G的空间?2)高端内存存在的意义是什么?

高端内存主要是解决1G的虚拟空间下大于1G物理空间的问题,可以这么理解么?


1.划分空间,是为了将内核态和用户态地址空间区分开,提高安全性。
   至于这个3:1的比例,则是一个人为设定值,可以是2:2,也可以是1:3。
2.高端内存 这里以3:1为例。内核空间只有1G,如果物理内存超过了1G,没有高端内存,就无法管理所有的物理内存了,所有需要高端内存。


   

论坛徽章:
0
5 [报告]
发表于 2012-05-11 20:37 |只看该作者
回复 2# muzi19861113

清楚多了,谢谢哈,~

论坛徽章:
0
6 [报告]
发表于 2012-05-12 11:50 |只看该作者
回复 2# muzi19861113


    “以内核的角度来看,高端内存时不能直接映射到自己的线性地址当中的。
    而只能通过其他方式暂时的进行映射。”

    弱弱的问一句,为什么不能直接映射?

论坛徽章:
0
7 [报告]
发表于 2012-05-12 11:56 |只看该作者
内核线性空间有限,即内核页表项有限,所以896M以上的无法像0~896MB那样支持一一映射,只能临时映射了

论坛徽章:
0
8 [报告]
发表于 2012-05-13 09:21 |只看该作者
32 bit system can only addr 2^32 bit mem addr. which is why we have 4G mem space. 1~3 G space is used by usermode context, and 4th G is used for kernel context. Of course physical mem can be more than 4G, and so we need a way to addr. mem above 4G, kernel use mem page frame to addr. those, not the linear addr.. 896M is not exactly 1G, is because, some space are reserved for low on mem cases, so kernel resere some from the 1G leaner addr. for those, say DMA, atomic mem alloc requests, so it decide to use 896M as max. Above that, it needs to dynamic alloc pages to addr. mem indirectly. Buddy system is used to managed those requests for allocating pages.

in 64 bit machine, there is no high mem area, or empty one. Because kernel can addr. the memory 2^64 bytes, so a linear addring is always possible.

论坛徽章:
0
9 [报告]
发表于 2012-05-13 15:40 |只看该作者
回复 1# icanth
about first one,

安全方面的考虑并不是这个问题的答案。

其实也完全可以用4G/4G split。甚至有人尝试去实现它
4G/4G split on x86, 64 GB RAM (and more) support

问题是,导致频繁的TLB-flush。
同时,由于硬件的限制,也无法把user space和kernel完全割裂开,4G for user space中必须有一部分属于kernel的页。

由于实现上,用户空间和核心空间必然要共享4G地址空间,同时由于性能方面的不利影响,虽然4G/4G split在内存使用方面有一定的优势,
community更倾向于3G/1G split。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
10 [报告]
发表于 2012-05-13 17:02 |只看该作者
回复 9# kudakitsune

x86切换ring级别的时候不能自动切换页表,这就是在缺乏硬件支持下让内核拥有独立的地址空间。x86下,tlb的问题可以设置内核页表的global标志,这样大部分时候切换页表时tlb还能hold住,能减少一些损失,但到什么程序就不好说了。

这样做大的问题应该是内核态往用户态传数据更麻烦了,要跨地址空间。我印象中,内核态与用户态共享地址空间已经是演化后的结果了。以前有CPU在硬件上就支持内核态与用户态地址空间分离的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP