首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >32位和64位内核上的zone_NORMAL和ZONE_HIGHMEM

32位和64位内核上的zone_NORMAL和ZONE_HIGHMEM
EN

Stack Overflow用户
提问于 2011-05-26 21:42:49
回答 1查看 2.4K关注 0票数 3

我试图使linux内存管理在调优和性能方面更加清晰。

通过阅读这本非常有趣的红皮书“指南”,我发现了一些我不完全理解的东西。

在32位架构(如IA-32 )上,Linux内核只能直接寻址物理内存的第一个千兆字节(当考虑保留范围时为896 MB )。所谓的ZONE_NORMAL上面的内存必须映射到1GB以下的内存中.这种映射对应用程序是完全透明的,但是在ZONE_HIGHMEM中分配内存页会导致较小的性能下降。

  1. 为什么896 MB以上的内存必须映射到较低的1GB?
  2. 为什么在ZONE_HIGHMEM中分配内存页会对性能产生影响?
  3. 那么ZONE_HIGHMEM是用来做什么的呢?
  4. 为什么能够识别高达4gb ( CONFIG_HIGHMEM=y )的内核只能使用第一个千兆字节?

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2011-05-27 06:08:05

当用户进程陷入内核时,页面表不会更改。这意味着一个线性地址空间必须能够覆盖用户进程可用的内存地址和内核可用的内存地址。

在IA-32上,允许一个4GB的线性地址空间,通常将线性地址空间的前3GB分配给用户进程,最后1GB的线性地址空间分配给内核。

内核必须使用其1GB的地址范围,以便能够处理它需要的物理内存的任何部分。896 be以上的内存没有“映射到低1GB”--所发生的情况是,在内核的线性地址空间的一部分中,为896 be以下的物理内存分配了一个永久的线性地址,而当内存超过这个限制时,必须在线性地址空间的其余部分分配一个临时映射。

当将ZONE_HIGHMEM页面映射到用户空间进程时,性能不会受到影响--对于用户空间进程,所有物理内存页都是相等的。当内核需要访问ZONE_HIGHMEM中的非用户页面时,它必须将其映射到线性地址空间(如果还没有映射),就会对性能产生影响。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6145456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档