浅谈mmap

  • 通过 read 系统调用来读取磁盘上的文件时,文件内容会先被读到内存的page inode 部分,然后再从page cache中拷贝到应用层的读缓存buffer中;对于打开的文件,内核都会在内存中维护一个inode结构体(对于同一个文件,即使被open多次,内核也仅维护这一个inode),其有一个成员是 struct address_space *i_mapping , 它用来维护这个文件被读取的所有部分在内存中的缓存,其使用 xarray (全新封装了基数树的操作)来存储这个物理页(struct page), 如下图: