免费注册 查看新帖 |

Chinaunix

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

[内存管理] 内存管理-高端内存和低端内存 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-25 18:01 |只看该作者 |倒序浏览
   高端内存是指物理地址大于 896M 的内存。
   加入当前内存就是512M的内存,那么本系统还存在高端内存吗?还是说系统会根据实际的内存大小,改变高端内存的阀值?

   如果没有高端内存,是否整个体系中,就不存在永久内存映射?

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
2 [报告]
发表于 2013-12-25 20:09 |只看该作者
内核想用一段虚拟地址空间把所有的物理内存线性cover。当物理内存大于内核能用的虚拟地址空间时,多出那部份cover不了的物理内存就是高端内存了。896M是说,内核最多只能用这么大的虚拟地址空间用来线性映射物理内存。

所以高端内存产生的原因是,kernel_linear_virtual_space < physical_memory。64位时kernel_linear_virtual_space大到可以盖住所有物理内存,高端内存就不存在了。32位时,如果物理内存小到可以缩进kernel_linear_virtual_space里,高端内存也不存在。

论坛徽章:
0
3 [报告]
发表于 2013-12-26 09:56 |只看该作者
关于高端内存的映射不是很懂?什么是这些永久映射?

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
4 [报告]
发表于 2013-12-26 09:59 |只看该作者
哪里看到高端内存是896MB的? 那书都快10年了。

论坛徽章:
3
双鱼座
日期:2013-09-04 19:47:39天蝎座
日期:2013-12-11 20:30:532015年亚洲杯之澳大利亚
日期:2015-04-20 00:28:02
5 [报告]
发表于 2013-12-29 21:39 |只看该作者
回复 1# xingdajing

   高低端内存划分过程:
    1)内核将根据bios的信息中得到的物理RAM的大小。 x86, max_pfn = e820_end_of_ram_pfn();
    2)取决于机器是32位还是64位:
      ·  32位机器将会执行find_low_pfn_range()
         将会判断物理内存是否小于预定义的MAXMEM值(MAXMEM_PFN=VMALLOC_END-PAGE_OFFSET-__VMALLOC_RESERVE).
         a)当小于该值时,所有实际物理内存都用做低端内存。但还判断用户是否需要设置高端内存来划分用户需要的内存做高端内存。
         arch/x86/mm/init_32.c lowmem_pfn_init()
         #ifdef CONFIG_HIGHMEM
           if(highmem_pages >= max_pfn)
                       max_low_pfn -=  highmem_pages;  //最终确认的低端内存值.
         
        b) 当大于MAXMEM_PFN值时, 部分内存溢出预定义的最大低端内存.
                      arch/x86/mm/init_32.c highmem_pfn_init()
           如果用户没有要求高端内存的大小,则溢出部分做高端内存.
                     if(highmem_pages == -1)
                              highmem_pages = max_pfn - MAXMEM_PFN;

           整个调用链 : setup_arch()--->  find_low_pfn_range()---> low_mem_init()/high_mem_init();

论坛徽章:
0
6 [报告]
发表于 2013-12-30 10:48 |只看该作者
    不管高端内存如何映射,内核空间的虚拟地址就是3G~4G,所以是否可以认定内核可使用的内存就是最大1G。

论坛徽章:
0
7 [报告]
发表于 2013-12-30 10:52 |只看该作者
   malloc在分配内存是首选就是高端内存,在高端内存不足时才会从低端内存中获取。
   高端内存主要是为了让进程空间较大内存而设计的,而非针对内核空间,可以这样理解吗。

论坛徽章:
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
8 [报告]
发表于 2013-12-30 11:07 |只看该作者
xingdajing 发表于 2013-12-30 10:48
不管高端内存如何映射,内核空间的虚拟地址就是3G~4G,所以是否可以认定内核可使用的内存就是最大1G。

1、内核虚拟地址空间是可配置的,不一定就只有1G
2、即使只有1G的虚拟机地址空间,内核中也可以通过Vmalloc区映射高端内存。
3、高端内存仅适用于32位系统,64位就没有这些烦恼了。

论坛徽章:
0
9 [报告]
发表于 2013-12-30 11:08 |只看该作者
NO。。。。

回复 7# xingdajing


   

论坛徽章:
0
10 [报告]
发表于 2013-12-30 14:34 |只看该作者
   我的理解是内核地址空间的虚拟地址是0XC000 0000 ~ 0XFFFF FFFF,无论是直接映射还是通过页表映射,内核空间要使用某一物理内存,都需要通过虚拟地址,虚拟地址在内核空间只有1G的寻址范围。那么内核就无法使用超出1G的物理内存,在物理内存上不一定都是1G范围内的物理内存。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP