页高速缓存有什么作用?
主要实现Linux的磁盘缓存,用来减少磁盘的IO操作,具体讲就是把磁盘中数据缓存到物理内存,把对磁盘的访问转换为对物理内存的访问。
磁盘高速缓存为什么这么重要?
- 访问磁盘的速度(ms)远远低于访问内存的速度(nm)
- 数据一旦被访问,就有可能在短期内再次被访问到
什么是临时局部原理?
在短期内访问同一片数据区的原理称为临时局部原理
页高速缓存有什么特点?
- 由内存中的物理页组成
- 内容对应磁盘上的物理块
- 大小可以动态调整
页高速缓存的大小如何动态调整?
通过占用空闲内存扩张大小,通过自我收缩缓解内存压力
什么是后备存储?
正在被缓存的存储设备
什么是缓存命中,什么是缓存未命中?
当内核开始一个读操作,它首先会检查数据是否在页高速缓存中。如果在,则放弃对磁盘的访问,直接从内存中读取,这个行为称为缓存命中;如果不在,内核调度块IO从磁盘读取数据并将数据放入页高速缓存中,这个行为称为缓存未命中。
进程执行写操作,页高速缓存如何使用,有哪些策略?
- 不缓存----进行写时,直接跳过缓存,写到磁盘,同时使缓存中的数据失效
- 写透缓存----同时更新内存和磁盘,使缓存数据时刻与后备存储保持一致
- 回写----数据先写到缓存中,将被写入的页标记为“脏”并加入脏页链表,由页回写进程周期性的将脏页链表中的页写回到磁盘。
内核进行写操作的具体过程是怎样的?
- 1--在页高速缓存中搜索需要的页
- 2--如果需要的页不在高速缓存中,内核在高速缓存组新分配一个空闲项
- 3--内核创建一个写请求
- 4--数据被从用户空间拷贝到内核缓冲
- 5--将数据写入磁盘
什么是缓存回收策略?
决定缓存中什么内容将被清除的策略
Linux如何进行缓存回收?
通过选择干净页(不脏)进行替换,如果缓存中没有足够的干净页,内核强制进行回写操作,以腾出更多的干净页
有哪些缓存回收策略,原理是什么?
- 最近最少使用(LRU)----缓存的数据很久没被访问,那么近期被访问的概率就很低,通过维护一个按时间为序的链表,回收链表头(最老时间戳)的页面
- 双链表(改进的LRU)----活跃链表中页面不会被回收,非活跃链表中页面有可能被回收,当活跃链表中页面太多,为了维护平衡,会取出活跃链表头部的页面将其加入非活跃链表尾部。
address_space结构体有什么作用?
address_space结构体用来管理缓存项和页IO操作,一个文件可以被多个vm_area_struct结构体标识有多个虚拟地址,但是只能被一个address_space结构体标识有一个物理地址。
什么是缓冲,有什么作用?
缓冲是一个物理磁盘块在内存中的表示,它的作用是映射内存中的页面到磁盘块。
什么是脏数据?
当页高速缓存中的数据比后台存储的数据先更新时,该数据称为脏数据,最终脏数据会被写回到后台存储设备(磁盘)
哪些情况下,脏页被写回磁盘?
- 空闲内存大小低于一个特定阈值,内核将脏页写回到磁盘,释放脏页,使之成为空闲内存
- 脏页在内存中驻留时间超过一个特定阈值,内核将超时的脏页写回磁盘
- 用户进程执行sync()和fsync()系统调用,内核按要求执行回写动作