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

文件映射:
    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()是不跟磁盘相关的)。多个进程的共享内存线程区都映射到相同的页框,从而实现了数据共享。

---细节待补充---
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值