免费注册 查看新帖 |

Chinaunix

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

[内存管理] 64位系统中的地址空间分布 [复制链接]

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-27 17:04 |只看该作者 |倒序浏览
好像没看到过有关64位系统,内存管理和地址空间分布的比较详细的文章,不知哪位大侠了解,普及下?

论坛徽章:
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-01-28 09:16 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2014-01-28 15:38 |只看该作者
mips64的


论坛徽章:
0
4 [报告]
发表于 2014-01-29 16:47 来自手机 |只看该作者
感谢,先学习下

论坛徽章:
0
5 [报告]
发表于 2014-01-29 16:47 来自手机 |只看该作者
感谢分享!!

论坛徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
6 [报告]
发表于 2014-02-06 13:20 |只看该作者
在最新的内核64TB以内的物理内存都是线性映射的, 都是内核的低端内存,对于再大的物理内存就会触发内核里面埋藏的逻辑炸弹,简单说就是不支持了

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
7 [报告]
发表于 2014-02-07 08:58 |只看该作者
回复 6# gaojl0728
感谢,有更详细的说明就更好了。


   

论坛徽章:
0
8 [报告]
发表于 2014-02-07 16:32 |只看该作者
按照六樓的說法

那64bit cpu在kenrel這邊不需要支援highmem嘍

剛有看一下32bit arm cpu若有支援LPAE的話是需要支援highmem

论坛徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
9 [报告]
发表于 2014-02-08 21:04 |只看该作者
64位的地址太长了,算起来真头疼
查了下3.12.5的内核代码, 在x86_64下,最大的物理内存是64T, 是hardcode的限制, 不是逻辑炸弹(以前看过的难道记错了),
1. 在e820_end_of_ram_pfn中已经限制了最大物理内存为MAX_ARCH_PFN,也就是64T, max_pfn的最大值只能为64T
2. 在init_mem_mapping会线性映射所有的物理内存,因为最大的物理内存是64T,所以此时内核地址空间最大也是64T, 因此在PAGE_OFFSET与__START_KERNEL_map之间留下了一个将近64T的洞
3. x86_64下HIGHMEM是没有定义的,在arch/x86/Kconfig
config HIGHMEM
        def_bool y
        depends on X86_32 && (HIGHMEM64G || HIGHMEM4G)
4. 因为CONFIG_HIGHMEM没有定义,在zone_sizes_init就不会定义高端内存区,只会定义DMA,DMA32和低端内存。
5. 内核空间和用户空间的分界线是STACK_TOP, 是0xffff880000000000, 低于这个地址都是用户内存。
6. 用户空间默认从高端内存分配所需内存,虽然x86_64没有高端内存也没关系,内核设计了适当的回退机制, 用户空间一样可以分配在低端内存分配内存, 只不过需要二次映射,浪费了一点点效率。
7. 在pgtable_64_types.h定义了内核空间的一些子分区细节

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
10 [报告]
发表于 2014-02-10 08:53 |只看该作者
gaojl0728 发表于 2014-02-08 21:04
64位的地址太长了,算起来真头疼
查了下3.12.5的内核代码, 在x86_64下,最大的物理内存是64T, 是hardcode ...

感谢帅哥,不知能否整个详细点的文档或者文章,分享下,肯定要火~
另外一个小疑问:你说的在初始化时,所有物理内存都会预先映射好,请问这种映射具体是通过什么完成的?是内核页表么?如果是的话,岂不浪费较大的内存?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP