普通文件读写过程
读文件:会先把文件数据拷贝到内核空间中的页缓存中,然后再把页缓存的数据拷贝到用户空间中,这里需要两次数据拷贝。
写文件:先把用户空间的数据拷贝到内核空间,内核空间再写回磁盘,也是两次数据拷贝。
mmap实现过程
在当前进程的虚拟地址空间中寻找一段满足要求的虚拟地址,然后创建vm_area_struct结构,对其进行初始化,最后将其插入到进程的虚拟地址区域链表(或者树)中。
内核根据fd找到文件磁盘物理地址,建立页表实现文件地址和虚拟地址区域的一一对应。
进程对映射的虚拟地址空间发起访问,引发缺页中断,系统会把所缺的页装入主存中。