内核版本
linux-6.5
需求
通过mmap将一个文件以SHARE的方式映射到进程的虚拟地址空间,然后写其中一段数据,此时会发生缺页异常,内核会分配页缓存并根据偏移将文件指定位置的内容读到页缓存,最后再修改进程的页表,将这个页缓存映射给用户,不过第一次映射的时候PTE里面RW位是0,当进程真正写的时候,会再次触发缺页,并将对应的文件页设置为脏页,Linux会定期将脏页回写到磁盘上,在回写操作执行之前清除脏页标记,同时也会清除RW位。
下面利用crash、funcgraph以及kprobe结合的方式来学习和验证这一过程。
测试程序
int main(int argc, const char *argv[