Chinaunix

标题: 64位系统中的地址空间分布 [打印本页]

作者: humjb_1983    时间: 2014-01-27 17:04
标题: 64位系统中的地址空间分布
好像没看到过有关64位系统,内存管理和地址空间分布的比较详细的文章,不知哪位大侠了解,普及下?
作者: 瀚海书香    时间: 2014-01-28 09:16
回复 1# humjb_1983

http://bbs.chinaunix.net/forum.p ... ;page=1#pid21661966
   
作者: chenyu105    时间: 2014-01-28 15:38
mips64的



作者: humjb    时间: 2014-01-29 16:47
感谢,先学习下
作者: humjb    时间: 2014-01-29 16:47
感谢分享!!
作者: gaojl0728    时间: 2014-02-06 13:20
在最新的内核64TB以内的物理内存都是线性映射的, 都是内核的低端内存,对于再大的物理内存就会触发内核里面埋藏的逻辑炸弹,简单说就是不支持了
作者: humjb_1983    时间: 2014-02-07 08:58
回复 6# gaojl0728
感谢,有更详细的说明就更好了。


   
作者: wth0722    时间: 2014-02-07 16:32
按照六樓的說法

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

剛有看一下32bit arm cpu若有支援LPAE的話是需要支援highmem
作者: gaojl0728    时间: 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定义了内核空间的一些子分区细节
作者: humjb_1983    时间: 2014-02-10 08:53
gaojl0728 发表于 2014-02-08 21:04
64位的地址太长了,算起来真头疼
查了下3.12.5的内核代码, 在x86_64下,最大的物理内存是64T, 是hardcode ...

感谢帅哥,不知能否整个详细点的文档或者文章,分享下,肯定要火~
另外一个小疑问:你说的在初始化时,所有物理内存都会预先映射好,请问这种映射具体是通过什么完成的?是内核页表么?如果是的话,岂不浪费较大的内存?
作者: humjb_1983    时间: 2014-02-10 09:02
wth0722 发表于 2014-02-07 16:32
按照六樓的說法

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

64位确实是没有highmem的。32位整得太复杂了~~
作者: gaojl0728    时间: 2014-02-10 14:09
回复 10# humjb_1983


    我也就看个大概, 毕竟不是专业搞这个,再弄细节了,难免出错,搞不了啊。

    X86_64目前是48位虚拟地址, 采用4级页表,分别是9+9+9+9+12, 所有的物理内存段都是调用kernel_physical_mapping_init线性映射到内核页表,映射的细节很多,页表不在是固定4K, 而是会尽量映射2M,1G的页表,说实话看的也不是很明白。
作者: humjb_1983    时间: 2014-02-10 14:14
gaojl0728 发表于 2014-02-10 14:09
回复 10# humjb_1983

呵呵,明白,非常感谢~~




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2