Electronic Joint Business

Solution for E-Business

了解Linux操作系统 (二)Linux内存架构

文章评分: 为了执行进程,Linux 内核会为请求的进程分配一段内存区域。进程用这段内存作为工作区来执行所请求的工作。这就像你申请了一张办公桌,你可以在桌面上摆放工作所需的纸张、文件和备忘录。不同之处是 Linux 内核采用动态的方法来分配内存空间。在内存大小通常是有限的情况下有时进程的数量会达到数万个,Linux 内核必须有效地来管控内存。在本章节中,我们会介绍内存的结构、地址分布,以及Linux是怎样有效地管理内存空间的。 物理内存与虚拟内存 如今我们面临选择 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_NORMA L可一直延伸到64GB,在 IA-64 中甚至达到 128GB。正如你所见到的,在 64 位架构中,可以省掉将内存页从ZONE_HIGHMEM 映射到 ZONE_NORMAL 的开销。 虚拟内存寻址布局 图1-11展示了32位和64位Linux虚拟寻址布局。 在32位架构中,单个进程能存取的最大地址空间为4GB,这是32位虚拟寻址能力的限制。在标准实现中,虚拟地址空间被分为3GB的用户空间和1GB的内核空间,这有些像4 G/4 G寻址布局实现的变种。 在64位架构如X86_64和IA64中,就没有这样的限制。每个单独的进程都能从巨大的地址空间受益。 虚拟内存管理 操作系统的物理内存架构对于应用程序和用户来说通常是不可见,因为操作系统会将所有内存映射到虚拟内存。如果我们想要知道Linux操作系统调优的可能性,就必须要明白Linux是怎样管理虚拟内存的。正如上一节“物理内存和虚拟内存”中讲到的,应用是不能申请分配物理内存的,当向Linux内核请求一定大小的内存段时,得到是一段虚拟内存的地址段。如图1-12所示,虚拟内存不一定要映射到物理内存,如果你的应用申请大量内存,其中一部分很有可能被映射到了硬盘上的交换文件。 如图1-12所示应用程序通常不是直接写入硬盘子系统,而是写入缓存(Cache)或缓冲区(Buffer)。当内核线程pdflush空闲或文件大小超出缓冲区,pdflush会将缓存或缓冲区数据清空并写入硬盘。参考“清空脏缓冲”。 与Linux内核管理如何写入物理硬盘子系统紧密相关的是Linux内核管理硬盘缓存的方式。其它操作系统只分配部分内存作为硬盘缓存,而Linux在内存资源管理上则更加有效。Linux虚拟内存管理默认将所有空闲内存空间都作为硬盘缓存。因此在拥有数GB内存的生产环境的Linux系统中,经常可以看到可用的内存只有20MB。 […]

,

One thought on “了解Linux操作系统 (二)Linux内存架构

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.