内存相关概念

概述
  1. 系统主存存储应用程序和内核指令,包括它们的工作数据以及文件系统缓存;
  2. 主存填满后,系统可能会在主存和磁盘这些存储设备交换数据,该过程缓慢严重影响性能;
  3. 系统可能种植内存占用量最多的进程;
  4. 分配和释放内存,以及管理内存地址空间映射也会造成CPU开销;
  5. 对于多路处理器架构的系统,由于连接到本地CPU的内存相对于远程CPU访问时延时更低,内存本地性也是性能的影响因素;
相关术语

其实也没啥意思,就当抄写一遍留个印象

  • 主存 物理内存,描述计算机的高速数据存储区域,通常是动态随机访问内存(DRAM)
  • 虚拟内存 抽象主存概念,几乎是无限的和非竞争性的;虚拟内存不是真实的内存
  • 常驻内存 当前处于主存中的内存
  • 匿名内存 无文件系统位置/路径名的内存;包括进程地址空间的工作数据,称作堆
  • 地址空间 内存上下文,每个进程和内核都有对应的虚拟地址空间
  • 标记为特殊用途的一块内存区域,例如用来存储可执行或可写的页
  • OOM 内存耗尽,内核监测到可用内存低
  • 操作系统和CPU使用的内存单位;一直以来是4KB或者8KB,现代处理器允许多种页大小以支持 更大的页面尺寸
  • 缺页 无效的内存访问;使用按需虚拟内存时是正常事件
  • 换页 在主存与存储设备间交换页
  • 交换 源自UNIX,指将整个进程从主存转移到交换设备;linux中指页面转移到交换设备(迁移交换页)
  • 交换(空间) 存放换页的匿名数据和交换进程的磁盘空间;它可以是存储设备的一块空间,也称为物理交换设备,或者是文件系统文件,称作交换文件
概念
虚拟内存

虚拟内存是一个抽象概念,它向每个进程和内核提供巨大的、线性的并且私有的地址空间;
将物理内存的分配交给了操作系统管理;
支持多任务;
虚拟地址空间被设计成分离的,使用中的内存可以超出主存的容量;进程的地址空间有虚拟内存子系统映射到主内存和物理交换设备,内核会按需在它们之间移动内存页,这个过程称作交换
内核可能会限制超额订购,solaris内核限制为主存加上物理交换设备大小,超过则分配失败;linux可以配置成同样模式,也可以有其他选项,包括不对内存分配做限制

换页

换页是将页面换入和调出主存,分别称为页面换入和页面换出。
文件系统换页
文件系统换页由读写位于内存中的映射文件页引发。对于使用文件内存映射(mmap())的应用程序和使用了页缓存的文件系统,换页是正常行为,也被称为好的换页。
有需要时,内核可以调出一些页释放内存:如果一个文件系统页在主存中修改过(脏),页面换出要求将该页写回磁盘;如果文件系统页在内存中没有修改过(干净),因为磁盘已经存在一份副本,页面换出仅仅释放这些内存以便立即充用
匿名换页
匿名换页牵涉进程的私有数据:进程堆和栈。被称为匿名是由于在操作系统缺乏有名字的地址(如没有文件系统路径)。匿名换页要求迁移数据到物理交换设备或者交换文件。
linux用交换(swapping)来命名这种类型的换页
匿名换页拖累性能,因此被称为“坏的“换页。
当应用程序访问被调出的页时,会被读页的的磁盘I/O阻塞,这就是匿名页换入,会给应用程序带来同步延时。匿名页面换出可能不会直接影响应用程序性能,因为它由内核异步执行。
性能在没有匿名换页的情况下处于最佳状态,要做到这一点可以通过配置应用程序常驻于内存并且监控页面扫描、内存使用率和匿名换页,来确保不存在内存短缺的迹象

按需换页

在这里插入图片描述
支持按需换页的操作系统将虚拟内存按需映射到物理内存;这会把CPU创建映射的开销推迟到实际需要或者访问时,而不是在初次分配这部分内存时。
如图所示,当写入一个新分配的虚拟内存页开始,会对物理内存进行按需映射;当访问一个尚未从虚拟映射到物理内存的页时,会发生缺页。
如果一个包含数据但尚未映射到这个进程地址空间的映射文件时,第一步可能是读;
如果这个映射可以由内存中其他的页满足,就被称为轻微缺页,这可能在进程内存增长过程中发生,从可用内存中映射到一个新的页,也可能在映射到另一个存在的页时发生,如从共享页中读取一个页(mmap()?)
需要访问存储设备的缺页,如访问未缓存映射到内存的文件,被称作严重缺页;
虚拟内存和按需换页的结果时任何虚拟内存页可能处于如下的一个状态:
A. 未分配
B. 已分配,未映射(未填充并且缺页)
C. 已分配,已映射到主存(RAM)
D. 已分配,已映射到物理交换空间(磁盘)

如果因为系统内存压力而换出页就会达到D状态;状态B到C的转变就是缺页;如果需要磁盘读写,就是严重缺页,否则就是轻微缺页。
常驻集合大小(RSS) 已分配的主存页(C状态)大小
虚拟内存大小 所有已分配的区域(B + C + D)

过度提交

linux支持,可以用可调参数配置过度提交;
允许分配超过物理内存与交换设备的总和,依赖于按需换页以及应用程序不会使用分配给他们的大部分内存;

交换

交换出一个进程,进程所有私有数据(线程结构和进程堆)写入交换设备;源于文件系统而且没有修改的数据可以被丢弃,需要的时候再从原来位置读取。
进程的一小部分元数据总是常驻于内核内存中,内核仍能知道已交换出的进程;内核会根据线程优先级、磁盘等待时间以及进程的大小,来决定将哪个进程交换回来。
已交换出的进程需要许多磁盘I/O才能重新运行,故此交换严重影响性能。
linux完全不交换进程。

文件系统缓存占用

系统启动后内存的占用增加是正常的,因为操作系统会将可用内存用于文件系统缓存以提高性能。
如果有可用的主存,就有效地使用它;如果应用程序需要的时候,内核能够很快的从文件系统缓存中释放内存。

使用率和饱和度

主存使用率可由已占用的内存注意总内存得出,文件系统缓存占用的内存可当作未使用(可以被应用程序重用)
对内存的需求超过了主存的情况被称作主存饱和,此时操作系统会使用换页、交换或者OOM(仅linux)释放内存。
默写时候当前系统中可用的虚拟内存被称为可用交换

分配器

当虚拟内存处理多任务物理内存时,在虚拟地址空间中实际分配和内存堆放通常由分配器来处理。
分配器对性能有显著影响,一个系统通常会提供多个可选择的用户态分配器库;分配器可以利用包括线程级别对象缓存在内的技术以提高性能,但如果分配变碎且损耗变高则会损害性能。

字长

处理器可能会支持多种字长,如32位或者64位;地址空间受限于字长的寻址空间,因此32位的地址空间放不下需要4GB以上的应用程序,必须使用64位或者更大的字长来编译。
利用更大的字长有可能提升内存性能,具体取决于CPU架构,当一个数据类型在更长的字长下有未使用的位时,可能会浪费一小部分内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值