4.Linux内存管理----内存与IO交换

一、Page Cache

    1.page cache解释:在Linux读写文件时,用于缓存文件的逻辑内容,从而加快对磁盘上映像和数据的访问。

    2.产生page cache 的操作:read/write,mmap(内存映射)
    1)read/write

     ①read:
    当cpu首次从磁盘读取文件时,内存中是不存在page cache 的,因此先申请1(或n)页内存,然后通过io读取磁盘上的问题件加载到申请的内存当中,然后通过read返回读取到的数据。在此过程中会产生较多 major 行为的page fault,读取速度较慢。
    当再次读取该文件时,由于该文件已经存储到page cache当中,所以直接从page cache中访问。读取速度相
对于第一次快很多。

     ②write
    如果要写入的文件已经有了 page cahe,那么直接写入到 page cache 当中;如果没有,那么先申请 1(或n) 页page的内存,然后将磁盘中相应位置的数据读取到申请的页面当中,然后将要写入的数据写入申请页面当中对应的位置,其中写的过程会首先有一个读取的过程。(磁盘操作是按页处理的)

    2)mmap
  是将文件的一部分内容(其实就是pagecache的地址)map到进程的虚拟地址空间。
  *p = mmap(…);
  p就是返回的虚拟地址,通过对p操作来进行对文件的读写;
  相对于 read/write 而言,mmap少了一层内存拷贝(从用户空间拷贝到内核空间)的操作

page cache
mmap

二、free命令详解

page cahce有两种形式的存在即cache 和 buffes。具体区别后面详细说明。
1、free指令:
free
    从buddy角度来看,不关心用户(kernel、app、page cache)是谁。图中①表示实际物理内存的大小;②表示已经使用的物理内存大小(含page cache);③表示物理内存还有多少未使用;④和⑤表示的是page cache 占用已经使用的物理内存的大小。
    从系统用户来看:page cache 是可以回收利用的,所以⑦(含page cache)是系统可以真正可以使用的内存大小;⑥是系统真正使用的内存,这部分内存是无法丢弃回收的。
    所以会有如下公式
  ① = ② + ③
  ⑦ = ③ + ④ + ⑤
  ⑥ = ② - (④ + ⑤)
2、page cache 的两种形式:cache/buffers
  cache:以文件系统中的文件为背景
  buffers:以裸分区/dev/sdax等为背景
  举例说明:
  一个U盘,里面有三个文件1.txt、2.txt、3.txt;在/dev目录下的名称是sda1。
  (1)如果我们在应用层直执行 dd if = /dev/sda1 就相当于从u盘的第一个字节开始一个一个的读取,这种裸磁盘读取上来的数据是存储到buffers当中的。
  (2)如果我们执行 mount /dev/sda1 /mnt 指令,然后从 /mnt目录下 读取 1.txt,那么读取1.txt的文本内容的数据是存储到cache当中的;需要注意的是这种情况下1.txt的相关的配置信息比如说存储的位置、大小等这些数据仍然是存储到buffers当中的
3、新版本的内核当中free指令中已经没有了 buffers/cache 选项了,取而代之的是available选项
4、清空对应page cache
①echo 1 > /proc/sys/vm/drop_caches //清空 pagecache
②echo 2 > /proc/sys/vm/drop_caches //清空 dentries 和 inodes
③echo 3 > /proc/sys/vm/drop_caches //清空所有缓存(pagecache、dentries 和 inodes)

三、页面类型

1、File-backed:有文件背景的页面
  ①代码段
  ②mmap一个字体
  代码段的本质就是page cache,是一种demangding page(消耗型页面),需要的时候从flash中加载到内存当中,不需要的时候也可以丢弃掉。
2、anonymous :匿名页
  ①statck
  ②Heap
  ③Cow (Copy On Write) pages

四、swap 和 zRam

1、swap 分区:可以将匿名页伪造成带文件背景的页面,存储到flash当中,从而使用物理的磁盘实现扩展内存。
2、在linux当中,swap从动词形式来看可以指带文件背景的页面与磁盘的数据交换,也可以指匿名页与swap分区的数据交换;从名词上来看,只表示匿名页与swap分区的数据交换。
3、绝大嵌入式系统由于各种条件限制是没有swap分区的
4、zRam:在新版的内核当中出现了以一块内存作为swap分区,将要swap的数据进行压缩存储到该内存区域当中,从而现实了以内存扩内存,这种形式的出现主要是通过牺牲CPU的算力实现的内存扩展。
5、关闭swap分区:swap off -a

五、页面回收和LRU

LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。这里就不详细描述了,具体可以百度。LRU可能会触发pagecache或者anonymous页与对应文件的数据交换。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值