页缓存和页回写

点击跳转到内核课程所有目录

点击这里查看配套的教学视频

1 简介

页高速缓存(page cache)把磁盘数据放到内存中,从而减少对磁盘的I/O操作。访问磁盘比访问内存慢几个数量级,cpu高速缓存更快。

金字塔式存储体系如下,每一种存储器设备只和它相邻的存储设备打交道:

             / \
            /   \
           / Reg \ 寄存器(Register)
          /-------\
         /L1 Cache \ 又分成: 数据缓存(Instruction Cache)和 指令缓存(Data Cache)
        /-----------\
       /  L2 Cache   \
      /---------------\
     /    L3 Cache     \ 多个核共享一个L3缓存
    /-------------------\
   /      Memory         \ 这一章我们讲这一层
  /-----------------------\
 /        SSD HDD          \ Solid State Disk(Drive)、Hard Disk Drive
/---------------------------\

从上到下容量递增、速度递减、价格递减。cpu高速缓存包括L1、L2、L3三层,使用静态随机存取存储器(Static Random-Access Memory)的芯片。

维基百科上对访问局部性(Locality of reference)的定义:

2 缓存

页高速缓存由内存中的物理页面组成,对应磁盘(后端设备)上的物理块,大小可动态调整。

读操作时(如read()系统调用),先检查数据是否在页高速缓存中,如果在缓存中则直接从内存中读取数据(称为缓存命中),如果不在缓存中则从磁盘上读取(缓存未命中)。 读完磁盘后,数据被放到内存中,后续的读操作就能命中缓存了。缓存可以存储文件部分内容或全部内容。

读操作时(如write()系统调用),缓存有三种策略:

缓存回收策略: