页缓存是Linux内核在内存中开辟的一块区域(属于内核),用于缓存最近访问过的文件数据。它主要解决了两个问题:

  1. 速度鸿沟:内存的读写速度远超硬盘(即使是顶级的固态硬盘,其速度也远慢于内存)。如果每次读取文件都要直接访问硬盘,程序将被极大地拖慢。
  2. 时间局部性原理:程序在短期内往往会重复访问相同的数据。页缓存利用这一点,一旦数据被读入,后续的访问就可以直接从内存中获取,避免了重复、缓慢的磁盘I/O操作。
存储设备
    ↓ DMA
Page Cache
    ↓ 页表映射
用户虚拟地址data
    ↓
CPU直接读取data[index]
//打开一个文件
#include <fctnl.h>
int fd = open("./test.txt",O_RDONLY);//只读的方式
//文件相关信息
#include <sys/stat.h>
struct stat file_stat;
if(fstat(fd,&file_stat)!=0){
	return 1;
}
//建立映射
#include <sys/mman.h>
size_t file_size = (size_t)file_stat.st_size;
const char *data = mmap(NULL, file_size, PROT_READ, MAP_PRIVATE, fd, 0);

//关闭文件,映射建立完成文件就不需要打开了
#include <unistd.h>
close(fd);

printf("%s",data);

//解除映射
munmap((void *)data, file_size)