在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,在这
方面,区别于 Windows的内存管理。主要特点是,无论物理内存有多大,Linux
都将其充份利用,将一些程序调用过的硬盘数据读入内存,利用内存读写的高速特性来提高Linux系统的数据访问性能。而Windows
是只在需要内存时,才为应用程序分配内存,并不能充分利用大容量的内存空间。换句话说,每增加一些物理内存,Linux
都将能充分利用起来,发挥了硬件投资带来的好处,而Windows只将其做为摆设,即使增加8GB甚至更大。
Linux 的这一特性,主要是利用空闲的物理内存,划分出一部份空间,做为 cache 和 buffers ,以此提高数据访问性能。
1、什么是 cache ?
页高速缓存(cache)是 Linux内核实现的一种主要磁盘缓存。它主要用来减少对磁盘的I/O操作。具体地讲,是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问。
磁盘高速缓存的价值在于两个方面:第一,访问磁盘的速度要远远低于访问内存的速度,因此,从内存访问数据比从磁盘访问速度更快。第二,数据一旦被访问,就很有可能在短期内再次被访问到。
页高速缓存是由内存中的物理页组成的,缓存中每一页都对应着磁盘中的多个块。每当内核开始执行一个页I/O操作时(通常是对普通文件中页大小的块进行
磁盘操作),首先会检查需要的数据是否在高速缓存中,如果在,那么内核就直接使用高速缓存中的数据,从而避免访问磁盘。
举个例子,当使用文本编辑器打开一个源程序文件时,该文件的数据就被调入内存。编辑该文件的过程中,越来越多的数据会相继被调入内存页。最后,当你编
译它的时候,内核可以直接使用页高速缓存中的页,而不需要重新从磁盘读取该文件了。因为用户往往会反复读取或操作同一个文件,所以页高速缓存能减少大量的
磁盘操作。
2、cache 如何更新?
由于页高速缓存的缓存作用,写操作实际上会被延迟。当页高速缓存中的数据比后台存储的数据更新时,那么该数据就被称做脏数据。在内存中累积起来的脏页最终必须被写回磁盘。在以下两种情况发生时,脏页被写回磁盘:
◆当空闲内存低于一个特定的阈值时,内核必须将脏页写回磁盘,以便释放内存。
◆当脏页在内存中驻留时间超过一个特定的阈值时,内核必须将超时的脏页写回磁盘,以确保脏页不会无限期地驻留在内存中。
在2.6内核中,由一群内核线程—pdflush后台回写例程统一执行两种工作。
首先,pdflush线程在系统中的空闲内存低于一个特定的阈值时,将脏页刷新回磁盘。该后台回写例程的目的在于在可用物理内存过低时,释放脏页以重
新获得内存。特定的内存阈值可以通过dirty_background_ratio
sysctl系统调用设置。当空闲内存比阈值:dirty_background_ratio还低时,内核便会调用函数wakeup_bdflush()
唤醒一个pdflush线程,随后pdflush线程进一步调用函数background_writeout()开始将脏页写回磁盘。函数
background_
writeout()需要一个长整型参数,该参数指定试图写回的页面数目。函数background_writeout()会连续地写出数据,直到满足以
下两个条件:
◆已经有指定的最小数目的页被写出到磁盘。
◆空闲内存数已经回升,超过了阈值dirty_background_ratio。
上述条件确保了pdflush操作可以减轻系统中内存不足的压力。回写操作不会在达到这两个条件前停止,除非pdflush写回了所有的脏页,没有剩下的脏页可再被写回了。
为了满足第二个目标,pdflush后台例程会被周期性唤醒(和空闲内存是否过低无关),将那些在内存中驻留时间过长的脏页写出,确保内存中不会有长
期存在的脏页。如果系统发生崩溃,由于内存处于混乱之中,所以那些在内存中还没来得及写回磁盘的脏页就会丢失,所以周期性同步页高速缓存和磁盘非常重要。
在系统启动时,内核初始化一个定时器,让它周期地唤醒pdflush线程,随后使其运行函数wb_kupdate()。
分享到:
相关推荐
Linux内存管理机制包括多种层次和策略,旨在高效地分配和回收内存,避免内存耗尽和系统崩溃。本文将深入探讨Linux内存管理模型、伙伴系统、Slab分配流程以及内存回收策略。 首先,Linux内存管理模型将物理内存划分...
### Linux内存管理机制的分析与研究 #### 一、引言与重要性 内存管理作为操作系统的核心组件之一,其重要性和复杂性不言而喻。Linux操作系统,以其强大的灵活性和可定制性,提供了丰富的内存管理机制,使得即使是...
Linux 内存管理机制在嵌入式系统,尤其是基于 ARM 技术的设备中扮演着至关重要的角色。与 Windows 的内存管理方式不同,Linux 更倾向于充分利用所有可用的物理内存,而不是仅在需要时分配。这一策略的核心是通过缓存...
Linux作为一款广泛使用的开源操作系统,其内存管理机制非常成熟且高效。本文旨在深入解析Linux内存分页机制原理,帮助读者更好地理解Linux是如何管理和利用物理内存的。 #### 二、物理内存的功能区域划分 Linux...
Linux内存管理是操作系统的核心组成部分,它负责有效地分配和回收内存资源,确保系统高效稳定地运行。在本实验中,我们主要探讨了Linux虚拟内存管理的原理、动态内存操作函数的使用,以及如何检测主存使用情况。 ...
段页式管理机制是Linux内存管理的基础,它基于80386硬件特性来实现内存管理。 **1. 存储器地址** - **逻辑地址**:程序中使用的地址,通常指的是符号地址。 - **线性地址**:标识0-4GB范围内的地址。 - **物理地址*...
Linux 内存管理还涉及到缓存机制,缓存机制可以提高系统的性能,Linux 中提供了多种缓存机制,例如页面缓存、磁盘缓存等。 Linux 内存管理是一个复杂的过程,涉及到多种技术,包括页框管理、Slab 算法、NUMA 技术...
Linux内存映射机制是一种操作系统内核管理内存的方式,它涉及到虚拟地址到物理内存地址的转换过程...此外,内核版本的选取、内核代码的阅读工具以及与内存映射相关的技术细节都为深入研究Linux内存管理提供了重要参考。
本文将详细阐述Linux操作系统的内存管理机制,包括物理内存和虚拟内存的管理机制、地址映射机制、内存碎片和内存不连续的问题解决等。 Linux操作系统的内存管理机制旨在解决进程需要使用的代码和数据都放在内存中,...
总的来说,Linux内存管理机制通过伙伴系统和slab分配器的结合,实现了高效、灵活的内存管理。这两个机制互相补充,解决了内存分配速度、碎片控制和资源利用率的问题,确保了Linux系统的稳定运行。然而,随着系统复杂...
本文档提供了一个全面的Linux内存管理的知识体系,不仅适合Linux内核爱好者学习,也适用于系统管理员和开发者加深对Linux内存管理机制的理解。通过对存储器层次、UMA/NUMA架构、内存域划分、线性地址概念、页帧管理...
在Linux中,虚拟内存管理是通过地址映射机制把用户程序的逻辑地址映射到物理地址实现的。当用户程序运行时,如果发现程序中要用的虚地址没有对应的物理内存,就发出请求页要求。如果有空闲的内存可供分配,就请求...
以下是Linux内存管理的一些关键知识点: 1. **内存管理工具**: - CodeViz:这是一个用于生成代码调用关系图的工具,可以帮助开发者理解代码间的调用结构,虽然在描述中没有详细展开,但它是分析Linux内核源码的...
一、Linux内存管理 1. 分区与地址空间:Linux内存分为物理内存和虚拟内存。物理内存是实际的RAM,而虚拟内存则是硬盘上的一个区域,通过交换空间模拟RAM。Linux使用页全局目录(PGD)、页中间目录(PMD)、页表目录...
Linux内存管理是操作系统的核心部分,它负责有效地分配和回收系统中的物理和虚拟内存。在Linux中,内存被划分为多个区域(Zone)和节点(Node),以优化内存的使用和性能。以下是对这些概念的详细解释: 1. **节点...
Linux虚拟内存管理机制 Linux操作系统的虚拟内存管理机制是指Linux操作系统中用于管理内存的机制,该机制使得操作系统可以更好地管理和分配内存资源,从而提高系统的性能和稳定性。虚拟内存管理机制是 Linux操作...
在Linux系统中,内存管理涉及多个层次的机制和算法,包括虚拟内存、地址映射、内存分配与回收、缓存与刷新、请求调页、交换以及内存共享等。 1. **地址映射机制**: 地址映射是将进程的逻辑地址转换为实际的物理...
Linux内核分析与应用课件第4章(一)内存管理机制 Linux内核分析与应用课件的第四章... Linux内核分析与应用课件的第四章对Linux内存管理机制进行了详细的讲解,帮助读者深入理解Linux内存管理机制的实现原理和机制。
Linux 操作系统 的内存管理机制中,Slab 分配机制 plays a crucial role in optimizing memory allocation and deallocation. This mechanism is designed to minimize memory fragmentation and improve system ...