15 页高速缓存

文章目录

  • 页高速缓存

  • 十二章的“通用文件模型”提到
  • 磁盘高速缓存是软件机制
  • 允许系统把通常存放在磁盘上的一些数据保留在RAM

  • 对同一磁盘数据的反复访问频繁发生
    • 磁盘高速缓存对系统性能至关重要
  • 与磁盘交互的用户态进程
    • 有权反复请求读或写同一磁盘数据
  • 不同进程也需在不同的时间访问相同磁盘数据
  • cp拷贝一个文本文件,然后调用你喜欢的编辑器修改它
  • shell:创建两个不同的进程,它们在不同的时间访问同一文件

  • 第十二章提到其他磁盘高速缓存
    • 目录项高速缓存
    • 索引节点高速缓存
    • 前者存放
      • 描述文件系统路径名的目录项对象
    • 后者存放
      • 描述磁盘索引节点的索引节点对象
  • 目录项对象和素引结节点对象
    • 不只是存放一些磁盘块内容的缓冲区
  • 目录项高速缓存和索引节点高速缓存就像磁盘高速缓存那样独特

  • 本章介绍页高速缓存
    • 一种对完整的数据页进行操作的磁盘高速缓存。
    • 第一节介绍页高速缓存
  • “把块存放在页高速缓存中”
    • 如何用页高速缓存快速检索单独数据块(如超级块和索引节点),
    • 这是提高虚拟文件系统和磁盘文件系统速度的关键
  • “把脏页写入磁盘”
    • 如何把页高速缓存中脏页写回磁盘
  • 在“sync()、 fsync(和 fdatasync(O系统调用”
    • 一些系统调用,
    • 让用户刷新页高速缓存的内容来更新磁盘内容

页高速缓存

但内存有些东西不必全部都在磁盘里,例如你程序动态申请的变量哈哈哈

  • page cache是内核的主要磁盘高速缓存
  • 绝大多数下,内核在读写磁盘时都引用页高速缓存
  • 新页被追加到页高速缓存以满足用户态进程的读请求
  • 如果页不在高速缓存,新顶就被加到高速缓存中,然后用从磁盘读出的数据填充它。
  • 如果内存有足够空闲空间,就让该页在高速缓存中长期保留,使其他进程再使用该页时不再访问磁盘。

  • 把一页数据写到块设备前
    • 内核先检査对应的顶是否已在高速缓存
  • 如果不,就先在其中增加一个新项,并用要写到磁盘中的数据填充
  • I/O数据的传送并不是马上开始,
    • 延迟几秒之后オ对磁盘更新,
    • 从而使进程有机会对要写入磁盘的数据做进一步修改(就是内核执行延迟的写操作)

  • 内核的代码和内核数据结构不必从磁盘读,也不必写入磁盘(注1)
  • 页高速缓存中的页可能是

在这里插入图片描述

  • 普通文件数据的页。

    • 第十六章
    • 内核如何处理它们的读、写和内存映射操作。
  • 含目录的页。

    • 十八章看到,
    • Linux采用与普通文件类似的方式操作目录文件。
  • 直接从块设备文件(跳过文件系统层)读出的数据的页。

    • 第十六章那样,
    • 内核处理这种页与处理含有普通文件的顶使用相同的函数集合。
  • 用户态进程数据的页,但页中的数据已经被交换到磁盘。

    • 十七章看到,
    • 内核可能会强行在页高速缓存中保留一些页面,而这些页面中的数据已经被写到交换区(可能是普通文件或磁盘分区)。
  • 属于特殊文件系统文件的页,

    • 如共享内存的进程间通信(IPC)所使用的特殊文件系统shm(见第十九章)。

  • 顶高速缓存中的每个顶所包含的数据肯定属于某个文件。
  • 这个文件(准确说是文件的索引节点)就称为页的所有者。
  • (十七章了解,含有换出数据的页都属于同一个所有者,即使它们涉及不同的交换区。)

  • 几平所有文件读和写都依赖页高速缓存
  • 只有O_DIRECT被置而进程打开文件的情况下オ例外
  • 此时,I/O数据的传送绕过页高速缓而用进程用户态地址空间的缓冲区(见十六章“直接IO传送”)
  • 少数数据库软件
    • 为能采用自己的磁盘高速缓存算法
    • 而用O_ DIRECT

你可能感兴趣的:(15 页高速缓存)