Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

第九十四章:缓冲与页面缓存

复习

  • 文件系统要在内存与远慢于内存的持久设备之间读写数据。

TL;DR

  • 缓冲与页面缓存把近期文件数据留在内存,减少设备访问。
  • 写入可以延后,但延后也让持久化时刻成为需要明确的问题。

正文

  磁盘访问比内存慢得多。若程序连续两次读取同一段文件,第二次再去访问磁盘很浪费。内核会把已读取的文件页放入页面缓存;下一次读取先在缓存中寻找,命中时直接交给程序。

  写入也常先更新内存中的缓存页,再由内核择机合并写回设备。这能把许多小写入变成更高效的大写入,却也意味着“写入函数已经返回”不总等于“数据已经安全落到磁盘”。需要特别可靠的程序会请求同步写回。

  缓存让常见路径很快,但也让内存中的文件页与磁盘中的旧内容暂时不同。下一章用内存映射把这种文件页与地址空间再接近一步。

思考题

为什么页面缓存同时能加速读和写?

小结

  • 缓存利用访问局部性避免重复设备 I/O。
  • 延迟写入提高效率,也需要处理持久化时机。

思考题答案(仅供参考)

  读取可直接命中已有数据;写入可先在内存合并,稍后一次性或批量提交给设备。

协议

本文采用 CC BY-NC-SA 4.0 协议发布。