- 十二章的“通用文件模型”提到
- 磁盘高速缓存是软件机制
- 允许系统把通常存放在磁盘上的一些数据保留在RAM
- 对同一磁盘数据的反复访问频繁发生
- 与磁盘交互的用户态进程
- 不同进程也需在不同的时间访问相同磁盘数据
- cp拷贝一个文本文件,然后调用你喜欢的编辑器修改它
- shell:创建两个不同的进程,它们在不同的时间访问同一文件
- 第十二章提到其他磁盘高速缓存
- 目录项高速缓存
- 索引节点高速缓存
- 前者存放
- 后者存放
- 目录项对象和素引结节点对象
- 目录项高速缓存和索引节点高速缓存就像磁盘高速缓存那样独特
- 本章介绍页高速缓存
- 一种对完整的数据页进行操作的磁盘高速缓存。
- 第一节介绍页高速缓存
- “把块存放在页高速缓存中”
- 如何用页高速缓存快速检索单独数据块(如超级块和索引节点),
- 这是提高虚拟文件系统和磁盘文件系统速度的关键
- “把脏页写入磁盘”
- 在“sync()、 fsync(和 fdatasync(O系统调用”
- 一些系统调用,
- 让用户刷新页高速缓存的内容来更新磁盘内容
页高速缓存
但内存有些东西不必全部都在磁盘里,例如你程序动态申请的变量哈哈哈
- page cache是内核的主要磁盘高速缓存
- 绝大多数下,内核在读写磁盘时都引用页高速缓存
- 新页被追加到页高速缓存以满足用户态进程的读请求
- 如果页不在高速缓存,新顶就被加到高速缓存中,然后用从磁盘读出的数据填充它。
- 如果内存有足够空闲空间,就让该页在高速缓存中长期保留,使其他进程再使用该页时不再访问磁盘。
- 把一页数据写到块设备前
- 如果不,就先在其中增加一个新项,并用要写到磁盘中的数据填充
- I/O数据的传送并不是马上开始,
- 延迟几秒之后オ对磁盘更新,
- 从而使进程有机会对要写入磁盘的数据做进一步修改(就是内核执行延迟的写操作)
- 内核的代码和内核数据结构不必从磁盘读,也不必写入磁盘(注1)
- 页高速缓存中的页可能是

- 顶高速缓存中的每个顶所包含的数据肯定属于某个文件。
- 这个文件(准确说是文件的索引节点)就称为页的所有者。
- (十七章了解,含有换出数据的页都属于同一个所有者,即使它们涉及不同的交换区。)
- 几平所有文件读和写都依赖页高速缓存
- 只有O_DIRECT被置而进程打开文件的情况下オ例外
- 此时,I/O数据的传送绕过页高速缓而用进程用户态地址空间的缓冲区(见十六章“直接IO传送”)
- 少数数据库软件
- 为能采用自己的磁盘高速缓存算法
- 而用O_ DIRECT