页高速缓存

页高速缓存

页高速缓存是Linux实现磁盘缓存,由内存中的物理页面组成,内容对应磁盘上的物理块

  • 作用:减少对磁盘的IO操作
  • 实现:通过把磁盘中的数据缓存到物理内存中,把对磁盘的访问变为对物理内存的访问
  • 读操作:比如read。检查数据是否在页高速缓存,有则直接拷贝到进程地址空间;无则调度块IO操作从磁盘中读取数据再放入页,再将页加入页高速缓存,再拷贝到进程地址空间
  • 写操作:
    • 页回写。直接写到页高速缓存,标记为“脏”,并加入到脏页链表,由回写进程周期性将脏页链表中的页写回磁盘
    • 如果页高速缓存没有该页,分配空闲项;内核创建一个写请求,数据从用户空间拷贝到了内核缓冲(新版本内核缓冲就是页高速缓存),最后将数据写入磁盘
    • 好处:延迟写回磁盘,减少操作次数
  • 缓存回收:Linux选择不脏的页进行替换,如果没有足够的干净页面,内核强制进行页回写

address_space

Linux用来管理缓存项和页IO操作,是虚存区VMA的物理地址对等体

  • 一个文件只能由一个address_space,但可以有多个vm_area_struct
  • 如何检查页是否在页高速缓存:使用基树,通过address_space和偏移量来搜索
  • 和虚拟文件系统中的inode有关联

flusher线程

脏页写回磁盘时机

  1. 当空闲内存低于一个特定阈值时,内核必须把脏页写回磁盘以释放内存,因为只有不脏的内存才能回收
  2. 脏页在内存驻留时间超过一个特定阈值,内核把超时的脏页写回磁盘,确保脏页不会无限期驻留内存(个人认为避免断电导致长时间多次修改都丢失)
  3. 用户进程显示调用回写操作
  4. 线程会周期性运行将超时脏页写回
posted @ 2021-02-16 20:49  肥斯大只仔  阅读(167)  评论(0编辑  收藏  举报