Linux内存子系统基础及常用调优参数

本文详细介绍了Linux内存子系统的基础知识,包括内存分配策略、存储层次、高速缓存、虚拟存储器、地址空间等。讨论了系统调用、处理机状态、多级存储体系以及内存调优的关键参数,如swappiness、overcommit_memory等。通过对程序局部性原理、系统调用、内存管理单元等概念的讲解,阐述了如何进行内存调优以提高系统性能。
摘要由CSDN通过智能技术生成

内存调优涉及大量计算机操作系统原理知识,包括存储器管理中内存分配策略,基于分页/分段存储管理方式,请求分页/分段存储管理方式,页面置换算法,系统调用,中断机制,进程切换等,本文整合梳理了网络资料及书本知识,对上述问题进行简单介绍
程序的局部性原理
指程序在执行时呈现出局部性规律,即在一段时间内,整个程序的执行仅限于程序中的某一部分。相应地,执行所访问的存储空间也局限于某个内存区域。局部性原理又表现为:时间局部性和空间局部性。时间局部性是指被执行过的某条指令在不久以后可能会被再次执行;被访问的某些数据在不久以后可能再次被访问(通常在循环中)。空间局部性是指程序在一段时间内访问的地址,可能集中在一定的范围之内,例如程序的顺序执行。根据程序执行的局部性原理,将主存中一些经常访问的信息放在高速缓存中,减少访问主存的次数,可大幅度提高程序执行的速度。

系统调用
通常在OS的核心都设置了一组用于实现各种系统功能的子程序(过程),这些程序和过程是OS本身程序模块的一部分,为了保护OS程序不被用户程序破坏,一般都不允许用户程序访问OS的程序和数据,因此内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给用户。系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。
这里写图片描述
处理机状态
系统上通常运行着两类程序:系统程序和应用程序,为了保证系统程序不被应用程序破坏,为此OS需要两种CPU状态:用户态(目态)与系统态(管态或和心态)。OS在系统态运行,应用程序只能在用户态运行,在实际运行过程中,处理机会在两个状态间切换,相应的CPU的指令集分为特权指令和非特权指令。特权指令是内核态运行时的指令,例如启动I/O、设置系统时间、允许或禁止中断、清主存、修改存储器、管理寄存器、执行停机、状态转换指令等;特权指令只能由操作系统使用,应用程序不能使用。非特权呢指令是在用户态运行的指令。X86支持4个处理器特权级别,称为特权环,不同级别能够允许的指令集不同。如下图所示,从R0到R3,特权级别由高到低,R0相当于内核态,R3相当于用户态;R1运行一些设备驱动程序和I/O处理的历程,R2运行一些受保护的共享代码,比如语言编译环境。目前大多数基于X86处理器的操作系统只使用了R0和R3两个特权级别。
这里写图片描述
多级存储体系
理想情况下存储器应当具备速度快,容量大,价格低的特性,但是这三个条件在目前的技术条件下会有矛盾,于是现代计算机系统中通常采用多级存储器结构。存储层次至少应具有3级:最高层为CPU寄存器,中间为主存,底层为辅存。根据具体功能可细分为寄存器,高速缓存,主存储器,磁盘缓存,固定磁盘,可移动存储介质等。进程对辅存的访问需要通过I/O设备,这一过程涉及到中断,设备驱动以及物理设备的运行,所需耗费的时间远高于对寄存器和主存储器的访问,一般至少相差3个数量级。
这里写图片描述
Dynamic Random Access Memory
DRAM是个人计算机内存的主要组件,属于挥发性内存,靠MOS电路中的栅极电容来记忆信息,由于电容上的电荷会泄漏,需要定时给与补充,因此只有在通电时才能记录和使用,断电后存于其中的数据就会丢失;但集成度高、功耗低, 从而成本也低,适于作大容量存储器,内存通常采用动态RAM。

Static Random Access Memory
SRAM靠双稳态触发器来记忆信息,不需要刷新电路即可保存其内部存储的数据,集成度较低,价格较高,且不易做成大容量,但速度快,通常集成到CPU内成为高速缓存。

主存储器
简称内存或主存,用于保存进程运行时的程序和数据,也称可执行存储器,CPU的控制部件只能从主存储器中取得指令和数据,将它们装入到寄存器中,或者将它们从寄存器存入到主存储器。CPU不能与硬盘直接打交道,数据只有被载入到内存中才可以被CPU调用,内存的运行也决定了计算机的稳定运行,而其性能的好坏直接影响着整个操作系统。 由于主存储器的访问速度远低于CPU执行指令的速度,为了缓和这一矛盾,在计算机中引入了寄存器和高速缓存。

寄存器
它是CPU内的组成部分,访问速度最快,完全能与CPU协调工作,但价格十分昂贵,因此容量不肯能做得很大,寄存器的长度一般以字(word)为单位。
这里写图片描述
高速缓存
它位于CPU与内存之间,是一个读写速度比内存更快的存储器。其容量远大于寄存器,而比内存约小两到三个数量级左右,从几十KB到几MB,访问速度快于主存储器。由于高速缓存的速度越高价格越贵,所以一般计算机系统设置多级高速缓存。通常进程的程序和数据存放在内存中,每当使用时被临时复制到一个速度较快的高速缓存中,当CPU读取数据时,首先在高速缓存中寻找,如果找到(命中)就直接取出使用,如果未能找到(未命中),再从主内存中进行读取。
这里写图片描述
一级缓存一般分为一级数据缓存(Data Cache)和一级指令缓存(Instruction Cache),不同CPU的L1高速缓存各不相同。L1高速缓存对CPU的性能影响较大,其容量越大,CPU的性能也就越高。

二级缓存主要用于存放电脑运行时操作系统的指令、程序数据和地址指针等。从理论上讲,在一颗拥有二级缓存的CPU中,读取一级缓存的命中率为80%,剩下的20%从二级缓存中读取,而读取二级缓存的命中率也在80%左右。

三级缓存是为读取二级缓存后未命中的数据设计的—种缓存,在拥有三级缓存的CPU中,只有约5%的数据需要从内存中调用,这进一步提高了CPU的效率。具有较大L3缓存的处理器提供更有效的文件系统缓存行为及较短消息和处理器队列长度。

磁盘缓存
它本身并不是一种实际存在的存储介质,而是依托于固定的磁盘,提供对主存储器存储空间的扩充,即利用主存中的存储空间,将频繁使用的数据暂存下来,以减少访问磁盘的次数,从这个角度看,主存也可以理解为辅存的高速缓存。

Swapping
指把内存中暂时不能运行的进程或暂时不用的程序和数据调出到外存上,以便腾出足够的内存空间,在把具备运行条件的进程或者进程需要的程序和数据调入内存,以提高内存利用率。

虚拟存储器
指的是具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。基于程序的局部性原理,应用程序在运行前没有必要全部装入内存,仅需将那些当前要运行的少数页面或段先装入内存便可运行,其余部分暂留在磁盘上。如果程序运行所要访问的页/段尚未调入内存(缺页/段),应用程序利用OS所提供的请求调页/段功能,将它们调入内存,以使进程能继续执行;如果此时内存已满,无法在装入新的页/段,还需要根据一定的置换算法,将内存中暂时不用的页/段调至磁盘上,腾出足够的空间将要访问的页/段调入内存,使进程进程继续执行。比如想要在一个内存只有4MB的机器运行一个16MB的程序,OS通过选择,可以决定各个时刻将哪4M的内容保留在内存中,并在需要时在内存和磁盘间交换程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值