第九十四章:缓冲与页面缓存
复习
- 文件系统要在内存与远慢于内存的持久设备之间读写数据。
TL;DR
- 缓冲与页面缓存把近期文件数据留在内存,减少设备访问。
- 写入可以延后,但延后也让持久化时刻成为需要明确的问题。
正文
磁盘访问比内存慢得多。若程序连续两次读取同一段文件,第二次再去访问磁盘很浪费。内核会把已读取的文件页放入页面缓存;下一次读取先在缓存中寻找,命中时直接交给程序。
写入也常先更新内存中的缓存页,再由内核择机合并写回设备。这能把许多小写入变成更高效的大写入,却也意味着“写入函数已经返回”不总等于“数据已经安全落到磁盘”。需要特别可靠的程序会请求同步写回。
缓存让常见路径很快,但也让内存中的文件页与磁盘中的旧内容暂时不同。下一章用内存映射把这种文件页与地址空间再接近一步。
思考题
为什么页面缓存同时能加速读和写?
小结
- 缓存利用访问局部性避免重复设备 I/O。
- 延迟写入提高效率,也需要处理持久化时机。
思考题答案(仅供参考)
读取可直接命中已有数据;写入可先在内存合并,稍后一次性或批量提交给设备。
协议
本文采用 CC BY-NC-SA 4.0 协议发布。