✅什么是Page Cache,他的读写过程是怎么样的?有什么优缺点?

在操作系统中,文件数据是存储在磁盘上的,而每次应用程序想要读取数据的时候,如果都和磁盘进行交互,速度会非常慢,不仅是读请求会慢,写操作也是一样的,向磁盘中直接写入数据也需要很大的时延。

为了提升磁盘的读写效率,操作系统在磁盘之上,通过了一个page cache(页缓存),页缓存其实是内存的一种,他就是可以将数据缓存到内存中,从而减少对磁盘的实际读写操作。

1719630640471-77c71959-2602-41f1-9446-2256d331190f.jpeg

通过在内存中缓存数据,操作系统可以更快速地响应文件操作请求,因为访问内存的速度比访问磁盘快得多。

页缓存中的“页”(page)是指计算机内存管理中的基本单位。在大多数操作系统中,内存被分成固定大小的块,这些块通常称为“页”。页的大小通常是2的幂,例如4 KB或8 KB。

读写过程

1719630647365-24b42a1c-d287-4529-8447-7ca22c173e9f.jpeg

有了page cache之后,一次读操作的过程如下

    • 1、当一个应用程序请求读取文件时,操作系统首先检查page cache是否已经包含了所需的数据。
  • 2、如果数据在cache中(称为“命中”),则直接从内存中读取数据,避免了磁盘I/O操作。
  • 3、如果数据不在cache中(称为“未命中”),则从磁盘读取数据,并将数据写入page cache,以便下次读取时能够更快地获取数据。

这里面读取到数据大小并不是用多少取多少,而是采用预读**的方式,额外读取一些数据,预读的大小一般都是以页为单位的。如果请求读取的数据量小于一页(通常4k),操作系统通常仍会读取完整的一页。

如果应用程序请求的数据量大于一页,操作系统可能会一次性读取多个连续的页,以减少后续的磁盘I/O操作。

有了page cache之后,一次写操作的过程如下

当向文件中写入数据时,,然后从文件中读取数据到页缓存,并且把新数据写入到页缓存中。对于被修改的页缓存,内核会定时把这些页缓存刷新到文件中。

  • 1、当一个应用程序请求写入文件时,如果要写入的数据所在的页缓存已经存在,那么直接把新数据写入到页缓存即可,否则,内核首先会申请一个空闲的内存页(页缓存)。
  • 2、操作系统通常将数据写入page cache中,而不是立即写入磁盘。这种方法被称为“延迟写”或“写回缓存”(write-back caching)。
  • 3、页缓存中的数据会标记为“脏页”(dirty pages),表示这些数据需要写入磁盘
  • 4、操作系统不会立即将脏页写入磁盘,而是会等待合适的时机(如系统空闲时或达到一定阈值时)将脏页批量写入磁盘。这种方式可以减少磁盘写操作的频率,提高整体系统性能。

脏页写入磁盘的触发条件一般有以下几个:

1、页缓存的大小达到一定阈值时,操作系统会触发写入操作,将部分或全部脏页写入磁盘。

*
*2、系统内存压力增大时,操作系统也可能会主动将脏页写入磁盘,以释放内存空间。

*
*3、文件系统的同步操作(如fsync、sync命令)会强制将所有脏页写入磁盘,以确保数据持久化。

操作系统将脏页中的数据写入磁盘也不是一条一条写入的,通常是按页或多个页的块进行整体写入。写入完成后,这些页会被标记为“干净页”(clean pages),表示数据已经同步到磁盘。

优缺点

page cache 的优点非常明显,也很容易理解:

提高性能:按照页去读取和写入磁盘,操作减少了对磁盘的频繁I/O操作,提高文件读取和写入的速度。

减少磁盘损耗:磁盘I/O次数少了,还能有助于延长磁盘的使用寿命。

然而,page cache 也有一些潜在的缺点

1、内存占用:缓存数据需要占用内存资源,如果系统内存有限,可能会影响其他应用程序的性能。

2、数据丢失风险:由于数据在写入磁盘前暂时存储在内存中,如果系统在数据同步到磁盘前崩溃,未写入的数据可能会丢失。

原文: https://www.yuque.com/hollis666/xkm7k3/cfl80ptdn7r31s6f