page cache 缓存页 内存缓存

为什么设计缓存?

1. 存储设备访问速度的巨大差异
2. temporal locality

如何设计缓存?

1. 大小
2. 对齐,方便寻址
3. 一致性(主要是写策略)

    3.1 nowrite
    3.2 write-through cache
    3.3 回写,标dirty,按阈值回写
        回写又要考虑何时写? 怎么写

        3.3.1 按时间定期回写
        3.3.2 按实际大小
        3.3.3 按脏页百分比
        3.3.4 调用sync(),fsync()

        回写方式

        1. 阻塞写 stop process
        2. 异步写, 启动一个线程

        2.6之后由一群内核线程(flusher线程)执行wirteback

4. 缓存回收

    有缓存就要考虑其回收
    LRU及其他算法(以前是按时间的单链现在是双链(甚至n链LRU/n),单链对只访问一次文件再不访问的情景很不好)

页面缓存都缓存什么?

读写操作时,缓存如下文件:

* 正规文件
* 块设备文件
* 内存映射文件

若页是4KB,物理块是512B,那一个页可能包含多个块,并且可以不连续.
所以索引不能用设备名称和块号做page cache中数据的索引

为什么不用设备号,块以及inode进行索引?

    因为Linux想缓存除了文件系统之外的可以基于页的对象
    所以通过结构体address_space来管理缓存和页I/O
    页面缓存不同进程共享. (通过虚拟地址vm_area_struct, 即文件可以有多个虚拟地址,但是物理存内存只一份)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值