《Linux内核设计与实现》——页高速缓存和页回写

一、概论

  1、页高速缓存(cache)是Linux内核实现磁盘缓存。它主要用来减少对磁盘的I/O操作。具体的讲,就是通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存

        的访问。


  2、磁盘高速缓存在现代操作系统中重要的原因:

    1)、第一,访问磁盘的速度要远低于访问内存的速度,因此,从内存访问数据比从磁盘访问速度更快。

    2)、第二,数据一旦被访问,就很有可能在短期内在此被访问到。



二、缓存手段

 一)、相关介绍

  1、页高速缓存是由内存职工的物理页面组成的,其内容对应磁盘上的物理块。


  2、页高速缓存大小能动态调整——它可以通过占用内存以扩展大小,也可以自我收缩以缓存内存使用压力。称正被缓存的存储设备为后备存储。


  3、当内核开始一个读操作,它首先会检查需要的数据是否在页高速缓存中。如果在,则放弃访问磁盘,而直接从内存中读取。这个行为称作缓存命中。如果数据没有在缓存

         中。称为未命中,那么内核必须调度块I/O操作从磁盘去读数据。然后内核将读来的数据读入页缓存中,于是后续相同的数据读取可命中缓存了。



 二)、写缓存

  1、缓存一般被实现成下面三种策略之一:

    1)、第一种策略称为不缓存(nowrite),也就是说高速缓存不去缓存任何写操作。

    2)、第二种策略,写操作将自动更新内存缓存,同时也更新磁盘文件。这种方式,通常称为写透缓存(write-through cache),因为写操作会立即穿透缓存到磁盘中。

    3)、第二种策略,也是Linux所采用的,称为“回写”。在这种策略下,程序写操作直接写到缓存中,后端存储不会立刻直接更新,而是将页高速缓存中被写入的页面标记为

              “脏”,并且被加入到脏页链表中。然后由一个进程(回写进程)周期性将脏页链表中的页写回到磁盘,从而让磁盘中的数据和内存中的最终一致。



 三)、缓存回收

  1、缓存算法最后涉及的重要内容是缓存中的数据如何消除;或者是为更重要的缓存项腾出位置;或者是收缩缓存大小,腾出内存给其他地方使用。这个工作,也就是决定缓存

       中什么内容将被清除的策略,称为缓存回收策略。


  2、缓存回收策略是通过所访问的数据特性,尽量追求预测效率。最成功的算法称作最近最少使用算法,简称LRU。


  3、Linux实现的是双链策略。和LRU不同,Linux维护的是不再是一个LRU链表,而是维护两个链表:活跃链表和非活跃链表。处于活跃链表上的页面被认为是“热”的且不会被

        唤出,而在非活跃链表上的页面则是可以被唤出的。




三、Linux页高速缓存

 一)、address_space对象

  1、为了维护页高速缓存的普遍性(不应该将其绑定到物理文件或者inode结构体),Linux页高速缓存使用了一个新的对象管理缓存项和页I/O操作。这个对象是

        address_space结构体


  2、address_space结构体成员说明。



 二)、address_space操作

  1、a_ops域指向地址空间对象中的操作函数,操作函数表定义在文件<linux/fs.h>中,由address_space_operation结构体表示。


  2、address_space_operation结构体成员说明。


  3、读操作步骤

    1)、首先linux内核试图在页高速缓存中找到需要的数据:find_get_page()方法负责完成这个检查动作。

    2)、如果搜索的页并没在高速缓存中,find_get_page()将会返回一个NULL,并且内核将分配一个新页面,然后将之前搜索的页加入到页高速缓存中。

    3)、最后,需要的数据从磁盘被读入,再被加入页高速缓存,然后返回给用户。



 三)、基数

  1、页高速缓存通过两个参数address_space兑现加上一个偏移量进行搜索。每个address_space对象都有惟一的基数,它保存在address_space结构体中。


  2、基数是一个二叉树,只要指定了文件偏移量,就可以在基数中迅速检索到希望的页。



 四)、以前的页散列表



四、缓冲区高速缓存(略)

 


五、flusher线程(略)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值