Linux的内存结构

《Linux性能及调优指南》 Linux内存结构

1.2.1 物理内存与虚拟内存

1.2.2 虚拟内存管理

执行一个进程时,需要Linux 内核分配一段内存区域,用来作为工作区来执行它的工作。这就像你的办工桌,你可以用它来摆放工作需要的纸张、文件和备忘录。不同之处是Linux内核要使用动态的方法来分配内存空间。在内存大小通常是有限的情况下有时进程的数量会达到数万个,Linux内核必须有效地来使用内存。在本章节中,我们会了解到内存的结构、地址分布,以及Linux是怎样有效地管理内存空间的。

1.2.1 物理内存与虚拟内存

今天我要面对选择32位系统还是选择64位系统的这样问题。其中对于企业级用户最重要的区别就是虚拟内存地址是否可以超过4GB。从性能角度来看,弄明白32位和64位Linux内核是怎么样将物理内存映射到虚拟内存是非常有益的。

在图1-10中,你可以很明显的看出32位系统和64位系统在内存地址分配上的不同之处。关于物理内存映射到虚拟内存的详细内容已超出本文的范畴,本文将只着重介绍Linux内存结构的部分细节。

在32位架构如IA-32中,Linux内核只能直接访问物理内存的前1GB(当考虑保留部分时只有896MB)。在ZONE_NORMAL之上的内存需要映射到1GB一下,这样的映射对于应用来说是完全透明的,但分配内存页到ZONE_HIGHMEM会导致性能轻微的下降。

在64位架构如x86-64(也称作x64),ZONE_NORMAL可一直延伸到64GB,在IA-64中甚至达到128GB。正如你所见到的,在64位架构中,可以被省去将内存页从ZONE_HIGHMEM映射到ZONE_NORMAL的开销。

图1-10 32位和64位Linux内核内存布局

虚拟内存寻址布局

图1-11展示了32位和64位Linux虚拟寻址布局。

在32位架构中,单个进程能访问最大地址空间位4GB,这就限制了32位虚拟寻址能力。在标准实现中,虚拟地址空间被分为3GB的用户空间和1GB的内核空间,这有些像4 G/4 G

Linux的内存结构

Linux的内存结构相关文档

最新文档

返回顶部