页面缓存(Page Cache)

我们知道文件一般存放在硬盘(机械硬盘或固态硬盘)中,CPU 并不能直接访问硬盘中的数据,而是需要先将硬盘中的数据读入到内存中,然后才能被 CPU 访问。

由于读写硬盘的速度比读写内存要慢很多(DDR4 内存读写速度是机械硬盘500倍,是固态硬盘的200倍)。为了避免每次读写文件时,都需要对硬盘进行读写操作,Linux 内核会以页大小(4KB) 为单位,将文件划分为多数据块,当用户对文件中的某个数据块进行读写操作时,内核首先会申请一个内存页(称为页缓存)与文件中的数据块进行缓存,如下图所示:
页面缓存(Page Cache)_第1张图片

如上图所示,当用户对文件进行读写时,实际上是对文件的页缓存进行读写。所以对文件进行读写操作时,会分以下两种情况进行处理:

  1. 当从文件中读取数据时,如果要读取的数据所在的页缓存已经存在,那么就直接把页缓存的数据拷贝给用户即可。否则,内核首先会申请一个空闲的内存页(页缓存),然后从磁盘中读取数据到页缓存,并且把页缓存的数据拷贝给用户。
  2. 当向文件中写入数据时,如果要写入的数据所在的页缓存已经存在,那么直接把新数据写入到页缓存即可。否则,内核首先会申请一个空闲的内存页(页缓存),然后把新数据写入到页缓存中。对于被修改的页缓存,内核会定时把这些页缓存刷新到磁盘上。

你可能感兴趣的:(操作系统,页缓存,操作系统)