文件映射,共享内存的实现

文件映射:
    mmap()实际上是一个vma的创建过程,分配进程线性区来映射打开的文件,把对文件的读写转为对内存的读写,在频繁移动指针读写文件的时候,读写效率有很大的提高。
    mmap()函数会调用特定文件系统的mmap(),全部执行之后,线性区结构vm_area_struct的vm_file指向映射文件的文件对象,vm_pgoff指向映射文件中的偏移,vm_ops指向相应的线性区方法(其中一项指定了nopage()方法,处理内存映射时的请求调页会调用nopage()方法,从 address_space中检索缓冲页,不存在则分配页读写文件(读文件到缓冲页或写到缓冲页),如果是匿名线性区,则该项为NULL)。索引结点和文件对象的address_space相关项被设置。根据映射类型是私有还是共享,处理会有差异。

共享内存:
    基于文件映射实现,只是用户通过特定的IPC标示符来引用,相关的VFS对象整合成shm特殊文件系统,该文件系统只定义了mmap()文件操作,最终该操作会设置vm_ops线性区方法表中的nopage()指针(相对文件映射,这里的nopage()是不跟磁盘相关的)。多个进程的共享内存线程区都映射到相同的页框,从而实现了数据共享。

---细节待补充---

你可能感兴趣的:(Linux内核)